---
title: "hooks sr_feuser_register"
url: "https://www.typo3.net/d/70464-hooks-sr-feuser-register"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2007-11-14"
last_reply: "2008-01-08"
replies: 6
solved: false
page: 1
pages: 1
lang: "de"
---

# hooks sr_feuser_register

Extensions › Entwicklung · 6 Antworten · gestartet 2007-11-14

## Eröffnungsbeitrag

**nicokaiser** · 2007-11-14 · [Beitrag #1](https://www.typo3.net/d/70464-hooks-sr-feuser-register/1)

Hallo Leute,

ich habe folgendes Problem. Ich habe eine Registrierungsseite, wo ein Promotioncode eingegeben werden kann. Ist der eingegebene Promotioncode mit einem in der Datenbank hinterlegten Code identisch, so wird der Nutzer für eine bestimmte Zeit freigeschaltet. Ist der eingebene Code falsch, so soll dem Nutzer zurück auf die Eingabeseite kommen und Ihm ein Fehler ausgegeben werden.

Folgendes habe ich schon hinbekommen.

```php
function registrationProcess_beforeConfirmCreate(&$recordArray, &$invokingObj) {
		
	if ($invokingObj->feUserData['preview']) {
		
		$sql = 'SELECT COUNT(*) FROM tx_ocpromotion_promocode WHERE promotioncode=\''.$recordArray['tx_ocpromotion_promoid'].'\' AND UNIX_TIMESTAMP()>=starttime AND UNIX_TIMESTAMP()<=endtime';
		$ds = $GLOBALS['TYPO3_DB']->sql_query($sql);
		$ds = $GLOBALS['TYPO3_DB']->sql_fetch_row($ds);
		
		if ($ds[0]==0)	{
			//var_dump("passt nicht");
		} else	{
			//var_dump("passt");	
		};
	}
}
```

Hiermit greife ich auf einen Hook zu und überprüfe, ob der eingeben Promotioncode korrekt ist. Leider bekomme ich es aber nicht hin, das wenn der Code falsch ist, zurück zur Eingabeseite gesprungen wird und dem Nutzer eine Meldung ausgegeben wird.

Vielleicht könnt Ihr mir ein wenig helfen

Grüße Nico

## Antworten

### [#2](https://www.typo3.net/d/70464-hooks-sr-feuser-register/2) · nicokaiser · 2007-11-16

Hallo Leute,

ich habe das Problem jetzt lösen können.

```php
function registrationProcess_beforeConfirmCreate(&$recordArray, &$invokingObj) {
	$this->pi_loadLL();
	$invokingObj->markerArray['###MESSAGE###'] = '';
	if ($invokingObj->feUserData['preview']==1 && !empty($recordArray['tx_ocpromotion_promoid'])) {
		 $sql = 'SELECT promouseperiodvalue AS value, promouseperiodunit AS unit FROM tx_ocpromotion_promocode WHERE promotioncode=\''.mysql_real_escape_string($recordArray['tx_ocpromotion_promoid']).'\' AND UNIX_TIMESTAMP()>=starttime AND UNIX_TIMESTAMP()<=endtime';
		$ds = $GLOBALS['TYPO3_DB']->sql_query($sql);
		if ($GLOBALS['TYPO3_DB']->sql_num_rows($ds)==0)	{
			if (strlen($invokingObj->failure)>0)	{
				$invokingObj->failure.=',tx_ocpromotion_promoid';
			} else	{
				$invokingObj->failure.='tx_ocpromotion_promoid';
			}
			$invokingObj->previewLabel='';
			$invokingObj->feUserData['preview'] = 0;
			$invokingObj->markerArray['###EVAL_ERROR_FIELD_tx_ocpromotion_promoid###'] = $this->pi_getLL('evalErrors_tx_ocpromotion_promoid');
		} elseif ($GLOBALS['TYPO3_DB']->sql_num_rows($ds)>0) {
			$ds = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($ds);
			$invokingObj->markerArray['###MESSAGE###'] = '<p>'.sprintf($this->pi_getLL('tx_ocpromotion_promocode.message'),($ds['value'].' '.$this->pi_getLL('tx_ocpromotion_promocode.promouseperiodunit.'.($ds['value']>1||$ds['value']<1?'p':'s').'.'.$ds['unit']))).'</p>';
		}
	}
	//echo 'registrationProcess_beforeConfirmCreate';
}
```

Wenn der eingebene Promotioncode falsch ist, wird wieder zum EingabeFeld gesprungen und ein Fehlercode ausgegeben. Wir kein Promotioncode eingeben, wird die IF-Abfrage nicht durchlaufen.

Grüße Nico

### [#3](https://www.typo3.net/d/70464-hooks-sr-feuser-register/3) · Michaelh74 · 2007-11-20

Tach Nico,

na dann scheint unsere Registrierung ja schon fast zu laufen  :D

Gruß
Michael

### [#4](https://www.typo3.net/d/70464-hooks-sr-feuser-register/4) · nicokaiser · 2007-11-23

Tach Michael,

die Registrierung war schon lange fertig, nur sollte halt diese Feature noch eingebaut werden. Jetzt käuft bei der Registrierung alles einwandfrei. Wenn der Promocode richtig ist, wird mittels UPDATE des Users in der FE-User eine starttime und eine endtime gesetzt und eine angepasste Mail versendet, bzw dem Nutzer angezeigt, wie lange sein Account funktioniert.

Ich bin jetzt an einem neuen Ding dran, welches einen Bezahlprozess in der Registrierung abbildet.

Grüße Nico

### [#5](https://www.typo3.net/d/70464-hooks-sr-feuser-register/5) · ameisenkiller · 2007-12-12

Hallo nicokaiser,

ich habe ebenfalls vor bei der Registrierung ein Code Feld einzubauen. Hier hat mir das Beispiel deines Hooks schon viel geholfen. Allerdings habe ich immer noch das Problem, dass bei der Eingabe eines falschen Codes nicht auf die Reg.Seite zurück gesprungen wird, sondern direkt weiter zur preview.

Hast du zufällig noch Änderungen außerhalb des Hooks vorgenommen? Ich hoffe du kannst mir hier ein wenig weiterhelfen.

### [#6](https://www.typo3.net/d/70464-hooks-sr-feuser-register/6) · nicokaiser · 2007-12-17

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
[/d/67472-hook-in-fe-user-register/2](https://www.typo3.net/d/67472-hook-in-fe-user-register/2)

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

```php
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');
}
```

### [#7](https://www.typo3.net/d/70464-hooks-sr-feuser-register/7) · ameisenkiller · 2008-01-08

Hallo Nico,

erst einmal "frohes neues Jahr" noch nachträglich.
Nach dem ganzen Stress von Weihnachten und Silvester waren erst einmal ein paar Tage Urlaub fällig. Nun beginnt wieder der alltägliche *typowahnisnn*.

Ich bedanke mich erst mal für das Posting des Code-Schnipsels. Ich werde mich in den nächsten Tagen wieder mit diesem Thema beschäftigen.

Gruß Jens

---

Quelle: „hooks sr_feuser_register“, typo3.net, https://www.typo3.net/d/70464-hooks-sr-feuser-register
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
