Zum Inhalt springen

Erweiterung und class.tx_srfeuserregister_pi1.php

Erstellt am 27. November 2007 · 1 Antwort · letzte Antwort am 1. Dezember 2007

Tags: Frontend-Benutzer, PHP, Frage

roschki ·

Hallo,

eines vorweg habe mit Extension-Programmierung gerade erst angefangen.

Folgendes: Ich habe mit einer kleinen Extension meine sr_feuserregister um ein Radiobuttonfeld erweitert.
Die Hooks in der FE-User-Registration habe ich auch gefunden und entsprechend erweitert. Für Create/Delete-Szenario funktioniert alles bestens. Der Updatevorgang ist etwas komplexer.

Alte vs. neue Emailadresse
Ich möchte ein hidden-Feld in dem Formular unterbringen, welches die Emailadresse beim Betreten der Profilseite speichert, damit ich bei einer Änderung derselben durch den Benutzer, die alte Adresse noch beim Verteiler (Radiobuttons) abmelden kann.

class.tx_srfeuserregister_pi1.php
Ich habe im Template gesehen, das ja schon hidden-Fields eingefügt werden. Also habe ich versucht an der class.tx_srfeuserregister_pi1.php Änderungen durchzuführen (habe natürlich ein Backup), leider bisher ohne nennenswerten Erfolg.

Ich habe es geschafft gehabt auf der reinen Profilseite das Feld auch mit dem richtigen Wert zu belegen (siehe Skript). Leider ist der Wert auf der folgenden Preview-Seite entweder mit der neuen Adresse oder gar nicht ausgefüllt. Im Hook wollte ich aber dieses Feld nutzen.

function addHiddenFieldsMarkers($markerArray, $dataArr = array()) {
 if ($this->conf[$this->cmdKey.'.']['preview'] && !$this->previewLabel) {
   $markerArray['###HIDDENFIELDS###'] .= chr(10) . '<input type="hidden" name="'.$this-" />prefixId.'[preview]" value="1" />';
   // meins
   $markerArray['###HIDDENFIELDS###'] .= chr(10) . '<input type="hidden" name="'.$this-" />prefixId.'[oemail]" value="'. htmlspecialchars($dataArr['email']).'" />';
   
   if ($this->theTable == 'fe_users' && $this->cmdKey == 'edit' && $this->conf[$this->cmdKey.'.']['useEmailAsUsername']) {

     $markerArray['###HIDDENFIELDS###'] .= chr(10) . '<input type="hidden" name="FE['.$this-" />theTable.'][username]" value="'. htmlspecialchars($dataArr['username']).'" />';

     $markerArray['###HIDDENFIELDS###'] .= chr(10) . '<input type="hidden" name="FE['.$this-" />theTable.'][email]" value="'. htmlspecialchars($dataArr['email']).'" />';
				}
// das geht hier noch weiter...

Naja nun habe ich leider keine Idee mehr, was ich noch machen kann. Dieses spezielle Problem ist logischerweise auch nicht Dokumentiert. Wie kann ich denn so ein Feld setzen und über das erste Absenden retten bzw. nachher in meinem Hook zugänglich machen?

So wollte ich darauf zugreifen.
Hook

function registrationProcess_afterSaveEdit($recordArray, &$invokingObj) {

 $sql = $GLOBALS['TYPO3_DB']->exec_SELECTquery('email','fe_users','uid = '.$recordArray['uid']);
			
 $rows = array();
 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($sql)) {
   $rows[] = $row;
 }
			
   echo "neu: ".$rows[0]['email'];
   echo " alt: ".$recordArray['oemail'];
     
}

Grüße
Mario

roschki ·

An alle,

habe jetzt eine andere Lösung gefunden.

weiteres DB-Feld
Ich habe statt dem HIDDEN-FIELD einfach ein weiteres DB-Feld angelegt, welches die Emailadresse einfach kopiert aber erst beim Erreichen der Hook-Funktion evtl überschrieben wird (Profilupdate).

So kann ich in dieser Funktion prüfen, ob der USer eine neue Emailadresse eingetragen hat und kann die "alte" vom Verteiler abmelden um sie danach mit der neuen Adresse zu überschreiben --> für den nächsten Updatevorgang.

Das DB-Feld habe ich einfach mit dem Kickstarter eingebaut und setze dessen Werte dann mittels der Hookfunktionen von fe_user_register.

!
Jetzt funktioniert das Löschen und das Updaten. Leider habe ich noch ein Problem beim eigentlichen Registrieren. Ich will nämlich erst die Anmeldung am Verteiler/Eintrag im DBFeld setzen, wenn ich als Admin die Zugehörigkeit zur Gruppe erlaubt habe. Weiß jemand, wie dieser Bestätigungslink funktioniert und kann ich mit diesem auch eine Hookfunktion anspringen?

Grüße Mario