Contao-Camp 2024
Ergebnis 1 bis 37 von 37

Thema: Update per Formular statt Modul?

  1. #1
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard Update per Formular statt Modul?

    Moin,

    ich möchte die tl_member updaten - per Formular.

    Ich weiß, das dazu das Daten-ändern-Modul gedacht ist (Modultyp Personendaten), jedoch hätte ich gerne ein ansprechendes Formular - sprich die selects sollen als radiobuttons erscheinen und ich möchte abhängig von Feldinhalten andere Felder ausblenden, sprich, ich brauche die Funktionen des Formulargenerators. Außerdem möchte ich
    einen Text zur Datenschutzerklärung am checkbox-Feld tl_member.privacy (selbst erweitert) anzeigen und Entsprechendes beim Lastschriftauftrag.

    Mit Programmierung oder vielleicht mit der Erweiterung catalog-manager geht es sicherlich, nur habe ich schon MetaModels ausprobiert und bin da auch an Beschränkungen gescheitert bzw. war dieser Lösungsansatz zu verquer. Contao ist ja ein super System und bietet von Hause aus schon eine tolle Mitgliederverwaltung. Deshalb denke ich, sollte es auch mit "Bordmitteln" lösbar sein.

    Anhang: Hardcopy meines Formulars.
    Angehängte Grafiken Angehängte Grafiken

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    die selects sollen als radiobuttons erscheinen
    Das könntest du per DCA Änderung machen.



    Zitat Zitat von Ernestopheles Beitrag anzeigen
    und ich möchte abhängig von Feldinhalten andere Felder ausblenden, sprich, ich brauche die Funktionen des Formulargenerators.
    Der Formulargenerator hat keine derartige Funktion. Vermutlich meinst du die conditionalformfields Extension.

    Du könntest diese Funktionalität grundsätzlich auch selbst per JavaScript nachbilden.

  3. #3

  4. #4
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    @Ernestopheles

    Doppelt fragen hält besser?!?
    https://community.contao.org/de/show...itgliederdaten
    Ist ein anderes Thema, möchte nicht mehrere Themen in einem thread, da es dann unübersichtlich wird. Natürlich kann es sein, dass der Lösungsweg zu 2 Themen gleich ist.

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Mit Programmierung oder vielleicht mit der Erweiterung catalog-manager geht es sicherlich, nur habe ich schon MetaModels ausprobiert und bin da auch an Beschränkungen gescheitert bzw. war dieser Lösungsansatz zu verquer.
    nur ein paar Felder bei tl_member erweitern würde ich auch keine Erweiterung anflanschen... bei MM hatten wir aber auch schon einige Projekte, um die tl_member für die "Nicht-Programmierer-Admins" flexibel erweiterbar zu machen bzw. weils schneller ging verschiedene Suchen und Filterungen für das FE bereit zu stellen.

  6. #6
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Was ich machen möchte (aus der Doku, die gerade parallel schreibe):

    Ich möchte ein Formular (Vereins-Mitgliedsantrag) dazu verwenden, die Daten bereits registrierter Mitglieder zu ergänzen, damit wir sie als Vereinsmitglieder führen können.
    Ein angemeldetes Mitglied kann das Formular ausfüllen und damit seine Vereins-Mitgliedschaft beantragen. Dabei werden die erfassten Daten in die Tabelle tl_member gebucht, welche ich zuvor um die neuen Attribute per DCA Konfiguration erweitert habe.
    Warum verwende ich nicht das Modul Personendaten? Nun, mein Formular hat „schöne“ Eigenschaften, welche der Contao Formulargenerator zusammen mit den Erweiterungen conditionalformfields, form-dependent-mandatory-field und Notification Center ermöglicht. Vermutlich ließen sich ähnliche Funktionalitäten auch durch Anpassung des Moduls Personendaten erreichen. Ich möchte jedoch durchgängig mit Formularen arbeiten, soweit möglich.
    Systemvoraussetzungen
    Contao 4.9 und bei Bedarf die genannten Erweiterungen
    Ich habe bisher den Hook ProcessFormData probiert, musste aber feststellen, dass auch hier ein Insert auf die tl_member gemacht wird.

    Daraufhin habe ich den Hook StoreFormData genommen. Im Beispielcode des Handbuchs wird eine nicht existierende Tabellenspalte "member" verwendet. Müsste man nicht einfach "id" nehmen? Wäre schön, wenn jemand diese Frage beantwortet, ich wäre bereit, das beispiel im Handbuch entsprechend zu korrigieren. Auch in dem fall, dass der Hook nicht die Lösung für mich sein sollte.

    Meine Idee ist, in der Methode onStoreFormData etwas einzubauen, dass einen Update auf tl_member bewirkt. Vermutlich habe ich aber den falschen Ansatz verwendet?

    Das Gute ist ja, dass ich ne Menge lerne von den Innereien von Contao, auch wenn es einen anderen schnelleren Weg gegeben hätte?

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Im Beispielcode des Handbuchs wird eine nicht existierende Tabellenspalte "member" verwendet. Müsste man nicht einfach "id" nehmen? Wäre schön, wenn jemand diese Frage beantwortet, ich wäre bereit, das beispiel im Handbuch entsprechend zu korrigieren.
    Es gibt hier nichts zu korrigieren. Das Beispiel aus dem Handbuch implementiert ja nicht deine Anforderung.

  8. #8
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Es gibt hier nichts zu korrigieren. Das Beispiel aus dem Handbuch implementiert ja nicht deine Anforderung.
    Definitiv funktioniert es nicht...

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Definitiv funktioniert es nicht...
    Ja, weil du ja was komplett anderes machen möchtest . Warum konzentrierst du dich auf das Beispiel aus dem Handbuch? Du musst natürlich deine eigene Logik implementieren.

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Ich habe bisher den Hook ProcessFormData probiert, musste aber feststellen, dass auch hier ein Insert auf die tl_member gemacht wird.
    => nein, nur wenn Du bei den Formulareigenschaften "speichere in Tabelle..." angegeben hast - das darf man (logischer Weise) nicht auch noch auswählen

  11. #11
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Also mein Stand ist jetzt dieser:

    Offensichtlich ist der processFormData Hook der passende. Zonky, du hast mir ja auch dazu geraten.

    Dass ich da leider nicht weitergemacht hatte, lag wohl an Mißverständissen...

    Also jetzt weiter!

    Die Methode wird nach dem Absenden des Mitgliedsantragsformulars gerufen. Schon mal gut

    Frage: Wie bringe ich das gute Contao jetzt dazu, die Eingabedaten ($submittedData) in tl_member per update zu speichern?
    Die ID des Mitglieds (Formabsender = zu änderndes Mitglied) befindet sich bereits in $submittedData.

    PHP-Code:
    <?php
    // ../src/EventListener/ProcessFormDataListener.php


    // Aufruf: nach Absenden des Mitgliedsantragsformulars, Die Eingabedaten sind vom Formular verifiziert und können gespeichert werden

    // Funktionen:
    //
    // 01. Test: Aufruf der Methode (via Dump). ok 
    // 02. Auswahl der gewünschten Form: ok
    // 03. Speicherung der Eingabedaten ($submittedData) in tl_mmember 

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Form;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;


    class 
    processFormDataListener implements ServiceAnnotationInterface
    {
         
    /**
         * @Hook("processFormData", priority=-10)
         */

        
    public function onProcessFormData(array $submittedData, array $formData, ?array $files, array $labelsForm $form ): void
        
    {    
        if (
    23 === (int) $form->id) {
    //      dump($submittedData, $form); die();
            
    }
        }
    }
    ?>
    Im Anhang habe ich eine Doku angefangen
    Angehängte Dateien Angehängte Dateien

  12. #12
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    da gibts verschiedene Möglichkeiten...

    z.B.

    PHP-Code:
            $objMember = \MemberModel::findByPk($user_id);

            
    // Set value and save.
            
    $objMember->firstname $firstname;
    ...

            
    $objMember->save(); 

  13. #13
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Danke vielmals! Klappt nur leider noch nicht.

    Normale Ausführung =>
    Bei der Ausführung des Skriptes ist ein Fehler aufgetreten. Irgendetwas funktioniert nicht richtig.
    Aber log in var/logs hat keine Einträge dazu.

    Debugmodus: => scheinbar normale Ausführung, lande auf der Bestätigungsseite meiner Homepage.

    Datenbank: Unverändert

    PHP-Code:
    <?php
    // ../src/EventListener/ProcessFormDataListener.php


    // Aufruf: nach Absenden des Mitgliedsantragsformulars, Die Eingabedaten sind vom Formular verifiziert und können gespeichert werden

    // Funktionen:
    //
    // 01. Test: Aufruf der Methode (via Dump). ok 
    // 02. Auswahl der gewünschten Form: ok
    // 03. Speicherung der Eingabedaten ($submittedData) in tl_mmember 

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Form;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;


    class 
    processFormDataListener implements ServiceAnnotationInterface
    {
         
    /**
         * @Hook("processFormData", priority=-10)
         */

        
    public function onProcessFormData(array $submittedData, array $formData, ?array $files, array $labelsForm $form ): void
        
    {    
        if (
    23 === (int) $form->id) {
    //      dump($submittedData, $form); die();
            
    $objMember = \MemberModel::findByPk($submittedData->id);

            
    // Set value and save.
            
    $objMember->dateOfBirth $submittedData->dateOfBirth;
            
    $objMember->fee $submittedData->fee;

            
    $objMember->save(); 
            }
        }
    }
    ?>

  14. #14
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Dump von $objMember : NULL

  15. #15
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Einen Fehler habe ich gefunden: $submittedData ist kein objekt, sondern ein array, daher nicht -> sondern [ ].

    PHP-Code:
    $objMember->fee $submittedData[fee]; 
    $submittedData[fee] hat den Wert "1", ok. $objMember->fee wurde modifiziert, aber Wert = "".
    Warum nicht "1"?

    PHP-Code:
    <?php
    // ../src/EventListener/ProcessFormDataListener.php


    // Aufruf: nach Absenden des Mitgliedsantragsformulars, Die Eingabedaten sind vom Formular verifiziert und können gespeichert werden

    // Funktionen:
    //
    // 01. Test: Aufruf der Methode (via Dump). ok 
    // 02. Auswahl der gewünschten Form: ok
    // 03. Speicherung der Eingabedaten ($submittedData) in tl_mmember 

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Form;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;


    class 
    processFormDataListener implements ServiceAnnotationInterface
    {
         
    /**
         * @Hook("processFormData", priority=-10)
         */

        
    public function onProcessFormData(array $submittedData, array $formData, ?array $files, array $labelsForm $form ): void
        
    {    
        if (
    23 === (int) $form->id) {
            
    // get an instance og MemberModel by ID of member
            
    $id $submittedData[id];
            
    $objMember = \MemberModel::findByPk($id);
            
            
    // Set value 
            
    $objMember->dateOfBirth $submittedData[dateOfBirth];
            
    $objMember->fee $submittedData[fee];
        
    dump($submittedData$form$objMember$id$submittedData[fee]); die();
        
            
    // and save
            
    $objMember->save(); 
            }
        }
    }
    ?>

  16. #16
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    In der Datenbank doch upgedated! Prima, danke, super

    Im Dump wars verkehrt: Offenbar behält sich das script (?) die Werte aus einem vergangenen Durchlauf, aber wohl nur beim Dump. Seltsam.

    Ist das jetzt so fertig oder fehlt noch irgendwas?

  17. #17
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    In der Datenbank doch upgedated! Prima, danke, super

    Im Dump wars verkehrt: Offenbar behält sich das script (?) die Werte aus einem vergangenen Durchlauf, aber wohl nur beim Dump. Seltsam.
    Finde ich nicht seltsam, denn der dump() kommt vor dem -> save()


    Ist das jetzt so fertig oder fehlt noch irgendwas?
    Die id des Mitglieds nicht per hidden field transportieren. So könnte man leicht Daten manipulieren. Wenn Du ohnehin einen angemeldeten User hast, kannst Du Dir die ID auch auch diesem holen.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  18. #18
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Offensichtlich ist der processFormData Hook der passende. Zonky, du hast mir ja auch dazu geraten.
    ich habe nur geschrieben, dass das eine Möglichkeit ist... mit dem storeHook, wie von spooky vorgeschlagen, würde das wahrscheinlich auch gehen - hatte ich noch nicht im Einsatz

    und du solltest Dein Script auf "Sicherheitsmängel" untersuchen bzw. absichern, wie fiedsch das schon geschrieben hat

  19. #19
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    btw: Du musst bei dem Dump nicht unbedingt ein die() einbauen... wenn du die Debug-Bar offen hast (neuer Tab), kannst Du bei Debug auf "Latest 10" gehen, und siehst die letzten 10 Requests... dann in der rechten Spalte bei dem letzten POST-Request auf den Token klicken..

  20. #20
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Offensichtlich ist der processFormData Hook der passende. Zonky, du hast mir ja auch dazu geraten.

    Dass ich da leider nicht weitergemacht hatte, lag wohl an Mißverständissen...
    Ja, hatte vergessen, dass du ja bestehende Mitglieder mit dem Formular aktualisieren willst. Der storeFormData Hook ist natürlich nur für den Fall, wenn du mit Hilfe der Funktionalität des Formulares neue Einträge in eine Datenbanktabelle machen willst.
    Geändert von Spooky (15.05.2020 um 14:17 Uhr)

  21. #21
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    ich habe nur geschrieben, dass das eine Möglichkeit ist...
    Warum distanzierst du dich?
    mit dem storeHook, wie von spooky vorgeschlagen, würde das wahrscheinlich auch gehen
    Nach spookys Aussage nein, ist mir aber auch egal

    - - - Aktualisiert - - -

    Zitat Zitat von zonky Beitrag anzeigen
    btw: Du musst bei dem Dump nicht unbedingt ein die() einbauen... wenn du die Debug-Bar offen hast (neuer Tab), kannst Du bei Debug auf "Latest 10" gehen, und siehst die letzten 10 Requests... dann in der rechten Spalte bei dem letzten POST-Request auf den Token klicken..
    Danke für den Tipp

  22. #22
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Die id des Mitglieds nicht per hidden field transportieren. So könnte man leicht Daten manipulieren. Wenn Du ohnehin einen angemeldeten User hast, kannst Du Dir die ID auch auch diesem holen.
    Habe dazu ein Beispiel gefunden, zu dem ich eine Frage habe.
    PHP-Code:
    ...$user $this->security->getUser();
           
            if (!
    $user instanceof FrontendUser) {
                return;...
            } 
    Sehe ich das richtig, dass hier abgefragt wird, ob der user angemeldet ist? Wäre er das nicht, wäre es ein "maschineller user"? So kenne ich es aus meinem alten EDV-Umfeld (Batchverarbeitung/ serverseitige Programme/ ...)
    Dann - besonders wo ja Sicherheit ein offensichtliches Thema ist - hätte ich gerne nicht nur ein return, sondern mindestens einen log-Eintrag, besser eine Nachricht an den Administrator (per email). Denn das Formular befindet sich im internen Bereich der Homepage.
    Ein log-Eintrag würde wahrscheinlich übersehen werden, es sei denn, man hat eine Funktionalität zur Auswertung.
    Wie baue ich also eine Benachrichtigung ein?

  23. #23
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Warum distanzierst du dich?
    ich distanziere mich nicht, sondern ich habe die Aussage relativiert, da ggf. auch später mal jemand diesen Thread zu lesen bekommt...

    im Vergleich zu mir zählt spooky zu den Wissenden - ich nur Halb ;-)

  24. #24
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Habe dazu ein Beispiel gefunden, zu dem ich eine Frage habe.
    PHP-Code:
    ...$user $this->security->getUser();
           
            if (!
    $user instanceof FrontendUser) {
                return;...
            } 
    Sehe ich das richtig, dass hier abgefragt wird, ob der user angemeldet ist? Wäre er das nicht, wäre es ein "maschineller user"? So kenne ich es aus meinem alten EDV-Umfeld (Batchverarbeitung/ serverseitige Programme/ ...)
    Dann - besonders wo ja Sicherheit ein offensichtliches Thema ist - hätte ich gerne nicht nur ein return, sondern mindestens einen log-Eintrag, besser eine Nachricht an den Administrator (per email). Denn das Formular befindet sich im internen Bereich der Homepage.
    Ein log-Eintrag würde wahrscheinlich übersehen werden, es sei denn, man hat eine Funktionalität zur Auswertung.
    Wie baue ich also eine Benachrichtigung ein?
    Diese Funktion brauchst du ohnehin, nicht nur für Logging. Denn du musst ja die ID des Mitglieds herausfinden. Und das bekommst du eben, in dem du dir \Symfony\Component\Security\Core\Security injecten lässt und dort mit $this->security->getUser() den aktuellen User holst und prüfst, ob es ein FrontendUser ist. Wenn nicht, ist er nicht eingelogged - und dann soll dein processFormData Hook ja auch nichts machen.

  25. #25
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    prüfst, ob es ein FrontendUser ist. Wenn nicht, ist er nicht eingelogged - und dann soll dein processFormData Hook ja auch nichts machen.
    Das wäre in diesem Fall ein fataler Fehler, der meiner Meinung nach verfolgt werden muß. Denn wenn das Formular nur nach Anmeldung am FE zur Verfügung steht, und dennoch der User als nicht eingeloggt erkannt wird, dann stimmt was richtig nicht. Deshalb die emailbenachrichtigung.

    Wie mache ich das ?

  26. #26
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Wie mache ich das ?
    Was meinst du?

  27. #27
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    btw: Du musst bei dem Dump nicht unbedingt ein die() einbauen... wenn du die Debug-Bar offen hast (neuer Tab), kannst Du bei Debug auf "Latest 10" gehen, und siehst die letzten 10 Requests... dann in der rechten Spalte bei dem letzten POST-Request auf den Token klicken..
    Also ich starte den debug modus im BE und gehe auf preview, wo sehe ich da die latest 10?

    - - - Aktualisiert - - -

    Zitat Zitat von Spooky Beitrag anzeigen
    Was meinst du?
    Wie baue ich eine Emailbenachrichtigung an admin ein in die Abfrage ob angemeldet?

  28. #28
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Die moderne Variante wäre, wenn du dir den Swiftmailer Service injecten lässt. Zur Not kannst du auch einfach die Email Klasse von Contao verwenden.

  29. #29
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das script scheint nach dem Umbau nicht mehr ausgeführt zu werden (habe cache erneuert, abhängigkeiten installiert).

    PHP-Code:
    <?php
    // ../src/EventListener/ProcessFormDataListener.php


    // Aufruf: nach Absenden des Mitgliedsantragsformulars, Die Eingabedaten sind vom Formular verifiziert und können gespeichert werden

    // Funktionen:
    //
    // 01. Test: Aufruf der Methode (via Dump). ok 
    // 02. Auswahl der gewünschten Form: ok
    // 03. Ermittlung des frontend-users, dessen id
    // 03. Speicherung der Eingabedaten ($submittedData) in tl_mmember 

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;
    use 
    Doctrine\DBAL\Connection;
    use 
    Symfony\Component\Security\Core\Security;
    use 
    Contao\FrontendUser;
    use 
    Contao\Form;


    class 
    processFormDataListener implements ServiceAnnotationInterface
    {
        
    /**
         * @var Connection
         */
        
    private $connection;

        
    /**
         * @var Security
         */
        
    private $security;

        public function 
    __construct(Connection $connectionSecurity $security)
        {
    dump('Im Konstruktor'); die();
            
    $this->connection $connection;
            
    $this->security $security;
        }
        
         
    /**
         * @Hook("processFormData", priority=-10)
         */
        
    public function onProcessFormData(array $submittedData, array $formData, ?array $files, array $labelsForm $form ): void
        
    {    
        
    Mitgliedsantragsformular (id 23)
    dump($submittedData$form]); die();

        if (
    23 === (int) $form->id) {
        
            
    get member-ID
            $user 
    $this->security->getUser();
           
            if (!
    $user instanceof FrontendUser) {
    //         Darf nicht auftreten! Denn Formular nur nach Anmeldung zugänglich. 
    //         Benachrichtigung an admin einbauen! Wie?
    dump($submittedData$form); die();
               return;
            }   
            
    $id $user->id;
            
            
    get an instance of MemberModel by member-ID
            $objMember 
    = \MemberModel::findByPk($id);
            
    //      Set value
    //        foreach ...     
             
            
    $objMember->dateOfBirth $submittedData[dateOfBirth];
            
    $objMember->fee $submittedData[fee];
    dump($submittedData$form$objMember$id); die();
        
    //         and save
            
    $objMember->save(); 
            }
        }
    }
    ?>

  30. #30
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Die moderne Variante wäre, wenn du dir den Swiftmailer Service injecten lässt. Zur Not kannst du auch einfach die Email Klasse von Contao verwenden.
    Hm, wo kann ich mir die Credentials herholen?

  31. #31
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Zitat Zitat von Ernestopheles Beitrag anzeigen
    Hm, wo kann ich mir die Credentials herholen?
    Was meinst du damit?

  32. #32
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was meinst du damit?
    Die anmeldedaten für smtp:

    Auszug aus der webseite von swift-mailer:
    PHP-Code:
    $transport = (new Swift_SmtpTransport('smtp.example.org'25))
      ->
    setUsername('your username')
      ->
    setPassword('your password')


  33. #33
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107

    Standard

    Du solltest wie schon gesagt den swiftmailer.mailer Service benutzen. Ich denke für dich ist es aber einfacher, wenn du die Email Klasse von Contao nimmst.

  34. #34
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    entfernt da irrelevant
    Geändert von Ernestopheles (16.05.2020 um 16:26 Uhr)

  35. #35
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Nun habe ich es:

    PHP-Code:
    <?php
    // ../src/EventListener/processFormDataListener.php


    // Aufruf: nach Absenden eines Formulars 

    // Funktionen:
    //
    // 01. Mitgliedsantragsformular (id = 23) 
    //     Update eines am FE angemeldeten Mitglieds mit den vom Formular  übermittelten Feldinhalten    

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;
    use 
    Doctrine\DBAL\Connection;
    use 
    Symfony\Component\Security\Core\Security;
    use 
    Contao\FrontendUser;
    use 
    Contao\Form;


    class 
    processFormDataListener implements ServiceAnnotationInterface
    {
      
    /**
      * @var Connection
      */
      
    private $connection;
      
      
    /**
      * @var Security
      */
      
    private $security;
      
      public function 
    __construct(Connection $connectionSecurity $security)
      {
        
    $this->connection $connection;
        
    $this->security $security;
      }
      
      
    /**
      * @Hook("processFormData", priority=-10)
      */
      
      
    public function onProcessFormData(array $submittedData, array $formData, ?array $files, array $labelsForm $form ): void
      
    {
        
    // dump($submittedData, $this->security); die();
        
    if (23 === (int) $form->id) {
          
    // dump($submittedData, $formData); die();
          
          // get member-ID
          
    $user $this->security->getUser();
          if (!
    $user instanceof FrontendUser) {
            
    // Darf nicht auftreten! Denn Formular erst nach Anmeldung zugänglich. 
            
    dump('Nicht angemeldeter User in ProcessFormData, Mitgliedsantrag'$submittedData$form$user); die();
            return;
          }   
          
    $id $user->id;
          
          
    // get an instance of MemberModel by member-ID
          
    $objMember = \MemberModel::findByPk($id);
          
          
    // Set value
          
    foreach ($submittedData as $key=>$value) {
            
    $objMember->$key $value;
          }    
          
          
    // and save
          
    $objMember->save(); 
          
          
    // dump($submittedData, $user, $id, $objMember); die();
        
    }
      }
    }
    ?>
    Denkt ihr, der Dump macht Sinn?
    Gibt es noch Anmerkungen, Bedenken, ...?
    Geändert von Ernestopheles (16.05.2020 um 01:50 Uhr)

  36. #36
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Eines passt noch nicht:

    Das Formularfeld dateOfBirth wird jetzt in der tl_member nicht mehr als Ziffernfolge wie bisher, sondern im Eingabeformat (TT.MM.JJJJ) gespeichert. Und das Token {{user::dateOfBirth}} gibt nichts mehr zurück. Das kommt bestimmt durch die einfache Zuweisung in meiner Methode. Vermutlich macht Contao hier einen typecast intern? Warum eigentlich? Warum wird das Datum in dieser Form abgelegt? Wegen Sortierung?

    Was empfiehlt ihr mir, hier zu tun? Wie lautet der korrekte cast?

    Habe versucht, im source code was dazu zu finden, aber bisher erfolglos. Auch die DCA Konfiguration - die ich gefunden habe - sagt mir nichts Neues.
    Geändert von Ernestopheles (16.05.2020 um 17:08 Uhr)

  37. #37
    Contao-Fan Avatar von Ernestopheles
    Registriert seit
    25.10.2019.
    Ort
    Hamburg
    Beiträge
    293
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Jetzt habe ich etwas gefunden, was vielleicht helfen könnte.
    Umwandlung von formatiertem datum in timestamp, das scheint es zu sein. Bricht nur leider ab, sobald versucht wird, eine Instanz von Date zu holen... Schätze, die Date Klasse muss ich irgendwie noch deklarieren, habe dazu nichts gefunden.

    PHP-Code:
            $arrData $GLOBALS['TL_DCA']['tl_member']['fields']['dateOfBirth'];
            
    $varValue $objMember->dateOfBirth;
    // dump($arrData, $objMember->dateOfBirth, $varValue ); 

    //         Convert date formats into timestamps
    //         if ($varValue !== null && $varValue !== '' && \in_array($arrData['eval']['rgxp'], array('date', 'time', 'datim')))
    //         {
                
    $objDate = new Date($varValueDate::getFormatFromRgxp($arrData['eval']['rgxp']));
    dump($objDate$varValue ); die();
                
    $varValue $objDate->tstamp;
    //         }
    dump($objDate$varValue ); 
            
    $objMember $varValue

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
  •