Ergebnis 1 bis 10 von 10

Thema: Benachrichtigungsmail bei Änderung von "Persönlichen Daten" im Frontend

  1. #1
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard Benachrichtigungsmail bei Änderung von "Persönlichen Daten" im Frontend

    Hallo,

    für unsere Vereinsseite stellt sich folgende Anforderung:
    Bei Änderungen von Email-Adresse und/oder Telefonnummer/Handy in den "Persönlichen Daten" im Frontend soll eine Email an bestimmte Personen verschickt werden, um auch an anderer Stelle die Daten aktualisieren zu können.

    Dabei sollten folgende Schritte erfolgen:
    - Prüfen, ob die Email-Adresse und/oder die Handy-Nummer geändert wurde.
    - Liegt eine Änderung vor, dann Mail versenden

    Zur Prüfung, ob die relevanten Daten geändert wurden, müsste dann wohl die aus der Datenbank gelesenen Feldwerte temporär gespeichert werden, damit sie bei einem Submit mit den zu speichernden Feldwerten verglichen werden können.

    * Formulardaten laden
    - Feldwerte "Email" und "Handynummer" speichern
    * Bearbeitung der Formulardaten durch das Mitglied (Frontend)
    * Submit/Speichern-Button
    - aktuelle Feldwerte "Email" und "Handynummer" mit den zuvor (temporär) gespeicherten Werten
    vergleichen. Wenn Unterschiede vorliegen, dann Mail versenden
    * Submit ausführen/Daten speichern

    Ist ein solcher Ablauf denkbar? (Callbacks/Hooks)?

    Ich habe im personaldata.php nicht nicht herausgefunden, wie ich dort einzelne Felder der Tabelle tl_member ansprechen kann. Gibt es Möglichkeiten dazu?

    Gruß
    Carsten
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  2. #2
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.614
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Carsten,

    Seit Contao 2.10 gibt es einen entsprechenden Hook (updatePersonalData oder so ähnlich), mit dem das möglich sein müsste.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  3. #3
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Hallo Andreas,

    danke für den Tipp. Habe aber augenblicklich noch das Problem, dass ich noch nicht auf Contao 2.10.1 wechseln kann, da einige verwendete Erweiterungen noch nicht für 2.10 freigegeben sind, u.a. wegen dem neuen Token-Request.

    (Für "helpdesk" gibt es ja bereits angepasste Templates, aber bei einigen anderen Erweiterungen weiss ich mir leider noch nicht zu helfen.
    In meiner Testumgebung Contao2Go habe ich unsere Webpräsenz von 2.9.5 nach 2.10.1 upgedatet und so weit mir möglich, die erforderlichen Umstellungen gemacht.)
    Es kommt aber immer wieder zu "Request-Token"-Fehlern, da nicht alle relevanten Erweiterungen angepasst.

    Aber das ist ein anderes Thema. Gibt es speziell für Updates nach 2.10 (gesammelte) Anleitungen/How-Tos/Erfahrungen?

    Gruß
    Carsten

    Edit:
    Problem hat sich gelöst. Habe doch noch herausgefunden, dass das Objekt "user" an die Hook-Funktion übergeben wird. Darüber kann ich dann alle "User-Felder" (tl_member) ansprechen.
    Geändert von althoffc (01.05.2012 um 09:41 Uhr) Grund: gelöst
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  4. #4
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Hallo Andreas,

    habe unsere Vereinsseite nun seit einiger Zeit auf 2.10.4 umgestellt. Nun ist das Thema "Benachrichtigung bei Änderung von Persönlichen Daten" wieder aktuell geworden.
    Ziel ist es nun, ein Änderungsdatum zu speichern, so dass nachvollziehbar ist, wann Kontaktdaten einzelner Mitglieder geändert wurden. Dazu ist bereits ein neues Feld in tl_member ergänzt worden. Im Backend wird dieses Änderungsdatum bereits entsprechend gesetzt.

    Habe für das Frontend nun eine Funktion für den Hook "updatePersonalData" registriert, welche auch wie erwartet beim Speichern der "Persönlichen Daten" ausgelöst wird.

    Mir ist aber nicht klar, welche Parameter an meine Hook-Funktion übergeben werden und wie ich diese ggf. ansprechen kann.
    Ich möchte nur bei Änderung bestimmter Felder (z.B. Mobilnummer, Email-Adresse, Anschrift) das Feld "Änderungsdatum" setzen.

    Wie kann ich dies umsetzen bzw. die Funktionsparameter ansprechen?

    Danke und Gruß
    Carsten
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  5. #5
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.614
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Carsten,

    Der gewünschte Wert steht doch schon im Feld tstamp ?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  6. #6
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Hallo Andreas,

    prinzipiell ja. Ich habe aber trotzdem ein weiteres Datumsfeld angelegt, weil das Änderungsdatum nicht für jede beliebige Änderung an Mitgliedsdaten ausgewertet werden soll.

    Nur bei Änderung bestimmter Felder soll dieses (eigene) Änderungsdatum ausgewertet werden.
    Ziel ist letztendlich, eine Mitgliederliste mit den jüngsten Änderungen an _relevanten_ Daten darstellen zu können. Unter "relevanten" Daten sind in unserem Fall primär Kontaktdaten gemeint.

    Aufgrund dieser Liste sollen alle Vereinsmitglieder einen schnellen Überblick bekommen, bei wem sich in jüngster Zeit z.B. die Mobilnummer oder Email-Adresse geändert hat.

    Änderungen an "nicht relevanten" Feldern sollen in dieser Übersicht keine Rolle spielen.

    Ich tüftele gerade noch daran, wie ich ggf. geänderte Daten in den "persönlichen Daten" (Formular) mit den aktuell in der DB (tl_member) gespeicherten Daten auf unterschiede innerhalb meiner Hook-Funktion vergleichen kann.

    Treten relevante Unteschiede auf, soll das "eigene" Änderungsdatum gesetzt werden.

    Nachfolgende Funktion führt aber noch nicht zum gewünschten Ergebnis.
    Der Hook "updatePersonalData" wird beim Speichern ausgelöst und ruft die Methode "MyHookFunction" auf.
    Die im Formular geänderten Daten werden über $objuser-><feldname> korrekt angezeigt.
    Dann möchte ich den bisher gespeichtern Datensatz (tl_member) lesen und mit den Formular-Feldern auf Unterschiede prüfen.
    Bei festgestellten Änderungen bestimmter Felder soll ein Änderungsdatum gesetzt werden.

    Allerdings erhalte ich mit diesem Code aus $objuser-><feldname> und $result-><feldname> die gleichen werde.
    Es sieht so aus, als ob zum Zeitpunkt des Vergleichs die "PersonalData" bereits gespeichert wurden.
    Oder mache ich noch was grundsätzlich falsch?

    Code:
    class myHookFunction extends Frontend
    {
    	public function setDateOfChange($objuser, $arrForm)
    	{
    		echo $objuser->id;
    		echo $objuser->lastname;
                    echo $objuser->firstname;
    		echo $objuser->mobile;
    		      
                   $result = $this->Database->prepare("SELECT * FROM tl_member WHERE id=? ")->execute($objuser->id);
                   echo $result->lastname;
    
                   if ($objuser->mobile <> $result->mobile)
                   {
                        $objuser->changedat = date('U));
                    }
    		
    		return 0;
    	}
    
    }
    Gruß,
    Carsten
    Geändert von althoffc (02.05.2012 um 13:27 Uhr)
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  7. #7
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Hallo,

    der Hook "updatePersonalData" greift erst NACH einem Update der Daten, eignist sich somit nicht für eine Feldprüfung VOR dem Update.

    Habe einen eigenen Hook in dem Modul "ModulePersonalData.php" ergänzt, mit dem ich beim Abschicen des Formulars (Submit-Button) alle Formular-Felder einzeln mit dem Wert aus dem Datenbankfeld vergleichen und bei Differenzen reagieren kann.
    Das funktioniert auch soweit.
    Jedoch habe ich die Änderung direkt im Original "ModulePersonalData.php" vorgenommen, was natürlich nicht update-sicher ist.
    In welchem Verzeichnis muss das geänderte Module "ModulePersonalData.php" abgelegt werden, so dass meine Änderung greift und Updatesicher ist, das Original jedoch nicht verändert wird?

    Kann mir jemand einen Tipp dazu geben?

    Danke und Gruß
    Carsten
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  8. #8
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.614
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Nutze die save_callback
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  9. #9
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Habe den Fehler gefunden. Eine falsche Klammersetzung in einem meiner PHP-Dateien hat eine korrekte Ausführung der Callback-Funktionen vereitelt.

    Aufruf der Callback-Funktion läuft jetzt korrekt.

    --------------------------------------


    Hallo,

    das mit dem save_callback will noch nicht funktionieren.
    Habe (m)eine callback-Funktion registriert, aber meine Funktion wird offenbar nicht aufgerufen.

    U.a. folgenden Code habe ich in der tl_member.php in dem DCA-Verzeichnis meines eigenen
    Moduls eingetragen:
    Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['email'] = array
    (  
    	'label'                   => &$GLOBALS['TL_LANG']['tl_member']['email'],
    	'exclude'                 => true,
    	'search'                  => true,
    	'inputType'               => 'text',
    	'eval'                    => array('maxlength'=>255, 'rgxp'=>'email', 'decodeEntities'=>true, 'feEditable'=>true, 'feViewable'=>true, 'feGroup'=>'contact', 'tl_class'=>'w50'),
    	'save_callback'           => array(array('<meineKlasse>', '<meineFunktion>'))
    	// 19.02.2012: Pflichtfeld und Eindeutigkeit aufgehoben. 'mandatory'=>true, 'unique'=>true,
    );
    Damit müsste doch eigentlich diese Callback-Funktion "registriert" sein und beim Speichern der PersonalData aufgerufen werden, oder?

    Ich bin mir nicht ganz sicher, ob der Eintrag an sich korrekt und an der richtigen Stelle/Datei steht.

    Mein eigener Hook, den ich in ModulePersonalData.php ergänzt habe, löst bei analoger Vorgehensweise meine Callback-Funktion aus.
    Irgendwie komme ich mit dem save_callback nicht weiter.

    Sieht jemand meinen Fehler?

    Gruß
    Carsten
    Geändert von althoffc (11.05.2012 um 14:46 Uhr) Grund: Fehler behoben
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  10. #10
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Hallo,

    meine callback-Funktionen zum "save_callback" in den "Persönlichen Daten" werden nun korrekt aufgerufen.

    Die callback-Funkion zu einem Feld (persönliche Daten, tl_member) werden ja in der "tl_member.php" im DCA-Verzeichnis meines Moduls registriert.
    Zu jedem Feld wird dann eine eigene Callback-Funktion mit den Parametern $varValue, $objuser und $this aufgerufen.
    Damit habe ich den Inhalt des aktuellen Formularfeldes, das Objekt "User" und das Objekt "$this" im Zugriff.

    Meine Frage: Kann ich innerhalb meiner Callback-Funktion auch die aktuellen Werte weiterer Formularfelder abfragen?
    Wenn ja, wie kann ich andere Formularfelder ("Persönliche Daten") ansprechen?

    Gruß
    Carsten
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •