Hallo Ameisenkiller,
das Beispiel was ich angegeben haben, ist für die Sr_feuser_register Version 2.2.5. Für die neuere Version musst du ein bisschen anders arbeiten. Auch müssen in der Sr_feuser einige Fehler beseitigt werden.
Was genau geändert werden muss habe ich in diesem Post geschrieben
#674722
Hier kommt nun ein Codefragment, welches einen Paymentprozess abbildet. Dieses funktioniert aber nur, wenn die Fehler in der sr_feuser_register behoben sind.
Der Abblauf lässt sich wiefolgt beschreiben.
Zuerst werden die Felder gesetzt die benötigt werden. Da Lastschriftverfahren und Kreditkartenzahlung nicht zur gleichen Zeit angezeigt werden können prüft das Programm welche Zahlungsoption ausgewählt ist und setzt dann die entsprechenden Felder als required.(Zeile 12-22)
In Zeile 63-68 pflanze ich der sr_feuserregister mein Template ein. Dynamische Werte in der Zeilen 69-90 in das Template eingebracht. In Zeile 57 pflanze ich mein locallang file in die sr_feuser ein.
Ab Zeile 92 wird dann der wenn eine Validierung nicht positiv ist zum Editscreen gesprungen und die jeweiligen Fehler an den Feldern ausgegeben.
Grüße Nico
function registrationProcess_beforeConfirmCreate(&$recordArray, &$invokingObj) {
$this->pi_loadLL();
if ($invokingObj->controlData->getCmd()=='create'){
$this->config = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['oc_payment']);
//$this->pi_setPiVarDefaults();
$invokingObj->marker->markerArray['###TX_OCPAYMENT_POSHERR###']='';
$invokingObj->marker->markerArray['###TX_OCPAYMENT_RC###']='';
$this->fieldList = array('payment','ctype','cholder','cnumber','ccheck','cexp','cexpm','cexpy','accountholder','account','bank','bankcode');
$this->directList = array('accountholder','account','bank','bankcode');
$this->creditList = array('ctype','cholder','cnumber','ccheck','cexpm','cexpy',);
foreach ($this->fieldList AS $value) {
$invokingObj->data->fieldList.=','.$this->prefixId.'_'.$value;
$invokingObj->pibase->auth->pibase->conf['create.']['fields'].=','.$this->prefixId.'_'.$value;
$invokingObj->pibase->auth->pibase->conf['invite.']['fields'].=','.$this->prefixId.'_'.$value;
if ($recordArray['tx_ocpayment_payment']!='direct' && $recordArray['tx_ocpayment_payment']!='credit'){
array_push($invokingObj->controlData->requiredArray,$this->prefixId.'_'.$value);
$invokingObj->pibase->auth->pibase->conf['invite.']['required'].=','.$this->prefixId.'_'.$value;
$invokingObj->pibase->auth->pibase->conf['create.']['required'].=','.$this->prefixId.'_'.$value;
}
}
if($invokingObj->data->getFeUserData('submit') || $invokingObj->data->getFeUserData('doNotSave')) {
if ($recordArray[$this->prefixId.'_'.'payment']=='direct') {
foreach($this->directList AS $value) {
if (empty($recordArray[$this->prefixId.'_'.$value])) {
$invokingObj->data->failure.=','.$this->prefixId.'_'.$value;
$invokingObj->data->missing[$this->prefixId.'_'.$value] = true;
}
$invokingObj->pibase->auth->pibase->conf['create.']['required'].=','.$this->prefixId.'_'.$value;
array_push($invokingObj->controlData->requiredArray,$this->prefixId.'_'.$value);
}
foreach($this->creditList AS $value) {
$recordArray[$this->prefixId.'_'.$value] = '';
}
} elseif ($recordArray['tx_ocpayment_payment']=='credit') {
foreach($this->creditList AS $value) {
if (empty($recordArray[$this->prefixId.'_'.$value])) {
$invokingObj->data->failure.=','.$this->prefixId.'_'.$value;
$invokingObj->data->missing[$this->prefixId.'_'.$value] = true;
}
array_push($invokingObj->controlData->requiredArray,$this->prefixId.'_'.$value);
$invokingObj->pibase->auth->pibase->conf['create.']['required'].=','.$this->prefixId.'_'.$value;
}
foreach($this->directList AS $value) {
$recordArray[$this->prefixId.'_'.$value] = '';
}
}
}
if (substr($invokingObj->data->failure,0,1)==','){
$invokingObj->data->failure = substr($invokingObj->data->failure,1);
}
//infiltrade local lang into sr_feuser_regsister lang
$invokingObj->pibase->LOCAL_LANG = $this->lang_array_merge($invokingObj->pibase->LOCAL_LANG,$this->LOCAL_LANG);
if($invokingObj->data->getFeUserData('submit')&& strlen($invokingObj->data->getFailure())==0) {
$this->payvalidate(&$recordArray, &$invokingObj);
}
if(!$invokingObj->data->getFeUserData('submit') || !$invokingObj->data->getFeUserData('doNotSave')) {
//infiltrade local template into sr_feuser_register template and replace ###TX_OCPAYMENT-TEMPLATE###
$this->templateMain = $this->getTemplate($invokingObj);
$this->templateMode = $invokingObj->cObj->getSubpart($this->templateMain, 'TEMPLATE_PAYMENT');
$invokingObj->data->templateCode = str_replace('###TX_OCPAYMENT_TEMPLATE###',$this->templateMode,$invokingObj->data->templateCode);
}
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_PAYMENT###'].='<option value="credit" '.(($recordArray['tx_ocpayment_payment']=='credit'||!isset($recordArray[$this->prefixId.'_'.'payment']))?'selected="selected"':'').'>'.$this->pi_getLL($this->prefixId.'_'.'payment.c').'</option>';
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_PAYMENT###'].='<option value="direct" '.($recordArray['tx_ocpayment_payment']=='direct'?'selected="selected"':'').'>'.$this->pi_getLL($this->prefixId.'_'.'payment.d').'</option>';
//fill ctype
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_CTYPE###'].='<option value="ae" >'.$this->pi_getLL($this->prefixId.'_'.'ctype.I.ae').'</option>';
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_CTYPE###'].='<option value="mc" >'.$this->pi_getLL($this->prefixId.'_'.'ctype.I.mc').'</option>';
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_CTYPE###'].='<option value="visa" >'.$this->pi_getLL($this->prefixId.'_'.'ctype.I.visa').'</option>';
//fill marker ###OPTION_TX_OCPAYMENT_CEXPM###
for ($i = 1; $i<=12;$i++){
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_CEXPM###'].= sprintf('<option value="%02d" '.($recordArray[$this->prefixId.'_'.'cecpm']==sprintf('%02d',$i)?'selected="selected"':'').'>%02d</option>',$i,$i);
}
//fill marker ###OPTION_TX_OCPAYMENT_CEXPY### for the next 8 years
$date_s = date('y');
$date_e = $date_s + 8;
for ($i= $date_s; $i<=$date_e;$i++){
$invokingObj->marker->markerArray['###OPTION_TX_OCPAYMENT_CEXPY###'].= sprintf('<option value="%02d" '.($recordArray[$this->prefixId.'_'.'cecpy']==sprintf('%02d',$i)?'selected="selected"':'').'>20%02d</option>',$i,$i);
}
$invokingObj->marker->markerArray['###TOOLTIP_TX_OCPAYMENT_CEXPM###'] = $this->pi_getLL('tooltip_tx_ocpayment_cexpm');
$invokingObj->marker->markerArray['###TOOLTIP_TX_OCPAYMENT_CEXPY###'] = $this->pi_getLL('tooltip_tx_ocpayment_cexpy');
//jump to the editmode
if (strlen($invokingObj->data->getFailure())>0 || $this->error['posherr']!=0 || $this->error['rc']!='000') {
$invokingObj->controlData->setMode(null);
$invokingObj->data->feUserData['preview']= 0;
$invokingObj->marker->previewLabel='';
if ($invokingObj->data->failure==',default'){
$invokingObj->data->failure = str_replace(',default','',$invokingObj->data->failure);
}
} elseif ($invokingObj->data->feUserData['preview']==1) {
$this->templateMain = $this->getTemplate($invokingObj);
if ($recordArray[$this->prefixId.'_'.'payment']=='credit') {
$this->templateMode = $invokingObj->cObj->getSubpart($this->templateMain, 'TEMPLATE_PREVIEW_PAYMENT_CREDIT');
} elseif($recordArray[$this->prefixId.'_'.'payment']=='direct'){
$this->templateMode = $invokingObj->cObj->getSubpart($this->templateMain, 'TEMPLATE_PREVIEW_PAYMENT_DIRECT');
}
$recordArray['tx_ocpayment_ctypes'] = $this->pi_getLL($this->prefixId.'_'.'ctype.I.'.$recordArray[$this->prefixId.'_'.'ctype']);
$invokingObj->data->templateCode = str_replace('###TX_OCPAYMENT_PREVIEWTEMPLATE###',$this->templateMode,$invokingObj->data->templateCode);
}
$invokingObj->marker->markerArray['###FIELD_tx_ocpayment_ctype###'] = $this->pi_getLL($this->prefixId.'_'.'ctype.I.'.$recordArray[$this->prefixId.'_'.'ctype']);
}
//print_r( 'registrationProcess_beforeConfirmCreate');
}