Ergebnis 1 bis 21 von 21

Thema: Nach Absenden eines Formulas das Mitgliederkonto schliessen?

  1. #1
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard Nach Absenden eines Formulas das Mitgliederkonto schliessen?

    Hallo liebe Community,

    ich habe in einem geschützten Bereich ein Formular eingebunden.
    Nach dem Absenden des Formulars soll das Mitgliederkonto deaktiviert / geschlossen werden. Wie stelle ich das am besten an?
    Ich denke mit dem processFormData Hook wäre dies möglich, oder?

    Kann mit jemand einen Tipp geben, wie ich mittels processFormData Hook das Mitgliederkonto deaktiveren kann?

    Grüsse,
    Dirk

  2. #2
    Contao-Fan Avatar von fusch
    Registriert seit
    25.03.2012.
    Ort
    München
    Beiträge
    498
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Dirk,

    wir haben neulich auch bei Absenden eines Formulars mittels Hook die Datenbank verändert. Evlt. kannst Du das für Dich nutzen, ist hier dokumentiert:
    https://www.contao-bayern.de/newsrea...on-center.html
    Wir haben allerdings den prepareFormData-Hook genommen, das hat den Vorteil, dass Du per Post dann auch gleich das Ergebnis ausgeben kannst.
    Statt der Anmeldenummer im Beispiel müsstest Du halt "disable" auf 1 setzen, aber ich könnte mir vorstellen, dass das so klappt.

    Und den Teil mit dem Notification-Center brauchst Du evlt. auch nicht, außer Du willst jemanden über die Deaktivierung benachrichtigen.

    Gruß
    Hella
    Mitglied des Contao User Treffen München
    Aktuelle Termine erfährst Du immer unter www.contao-bayern.de
    Komm' doch mal vorbei!

  3. #3
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Hallo Hella,

    vielen Dank für Deine Hilfe bzw. die Dokumentation. Das hilft mir schon ein Stückchen weiter.
    Kann es sein, dass die Datei MyHooks.php im Verzeichnis Contao-Verzeichnis/src/AppBundle/ gespeichert werden muss und nicht einfach unter Contao-Verzeichnis/src/ wie in der Doku beschrieben?

    Leider habe ich mit der Datenbankabfrage noch so meine Probleme.
    So sieht der Code derzeit aus:

    Code:
    <?php
    
    namespace AppBundle;
    
    
    use Contao\Database;
    use Contao\Input;
    
    class MyHooks {
    
        public function memberDeactivate(&$arrSubmitted, $arrLabels, $objForm)
        {   
    
            $sql = "SELECT disable FROM tl_member WHERE id=?";
            $result = Database::getInstance()->prepare($sql)->execute();
            $arrSubmitted['disable'] = 1;
        }
    }
    LG,
    Dirk

  4. #4
    Contao-Fan Avatar von fusch
    Registriert seit
    25.03.2012.
    Ort
    München
    Beiträge
    498
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Dirk,

    mit dem Pfad hast Du natürlich recht, danke für den Hinweis, das ändere ich gleich.

    Die Abfrage brauchst Du m.E. so nicht, weil Dich ja gar nicht interessiert, was im Feld disable drin steht (das braucht es in dem Beispiel ja nur zum rechnen). Du willst ja lediglich den Wert disable=1 übergeben.

    Wie Du zur ID des member kommst, steht z.B. hier

    Code:
    FrontendUser::getInstance()->id;
    Gruß
    Hella
    Mitglied des Contao User Treffen München
    Aktuelle Termine erfährst Du immer unter www.contao-bayern.de
    Komm' doch mal vorbei!

  5. #5
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Also müsste ich einfach nur folgendes eintragen ?
    Code:
    $arrSubmitted['disable'] = FrontendUser::getInstance()->1;

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

    Standard

    Nein, eher


    Code:
    $user = FrontendUser::getInstance();
    $user->disable = 1;
    $user->save();


    Code:
    $member = MemberModel::findById(FrontendUser::getInstance()->id);
    $member->disable = 1;
    $member->save();
    Edit: Code korrigiert

    Edit 2: "prepareFormData" ist m.E. nicht geeignet, da dies ausgeführt wird, "after a form has been submitted, but before it is processed". Wenn nun beim Verarbeiten des Formulars befunden wird, daß die Eingaben ungültig waren, wäre so das Mitglied dennoch bereits deaktiviert. Von daher klingt für mich "storeFormData" geeigneter, denn es werden keine nicht validen Formulardaten gespeichert -- der Hook wird also in so einem Fall nicht ausgeführt.
    Geändert von fiedsch (14.10.2018 um 07:11 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  7. #7
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Ja, das klingt logisch. Leider funktioniert die Deaktivierung noch nicht so ganz.

    Mein Code sieht derzeit so aus.

    In der config.php steht:
    Code:
    <?php
    $GLOBALS['TL_HOOKS']['storeFormData'][] = array('AppBundle\MyHooks', 'memberDeactivate');
    In der MyHooks.php steht:
    Code:
    <?php
    
    namespace AppBundle;
    
    use Contao\Database;
    
    class MyHooks {
    
        public function memberDeactivate($arrSet, $objForm)
        {   
    		$member = MemberModel::findById(FrontendUser::getInstance()->id);
    		$member->disable = 1;
    		$member->save();
        }
    }

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

    Standard

    Zitat Zitat von dirksche Beitrag anzeigen
    Ja, das klingt logisch. Leider funktioniert die Deaktivierung noch nicht so ganz.
    Was heißt denn "nicht so ganz"? Was passiert denn?

    Code:
    <?php
    
    namespace AppBundle;
    
    use Contao\Database;
    
    class MyHooks {
    
        public function memberDeactivate($arrSet, $objForm)
        {   
    		$member = MemberModel::findById(FrontendUser::getInstance()->id);
    		$member->disable = 1;
    		$member->save();
        }
    }
    Ich würde mal sagen, Dir fehlt noch

    PHP-Code:
    use Contao\MemberModel;
    use 
    Contao\FrontendUser
    und
    PHP-Code:
    use Contao\Database
    kann entfallen, da Du Database ja nirgends benutzt.

    Edit: Außerdem musst Du noch zwei Sachen beachten:

    1. hat der Hook einen Rückgabewert https://docs.contao.org/books/api/ex...eFormData.html
    D.h. Dir fehlt am Ende von memberDeactivate() noch ein return $arrSet;

    2. wird das so für alle Formulare angewandt. Das ist wahrscheinlich nicht das, was Du willst. D.h. Du musst noch prüfen, ob es das Formular ist, bei dem Du das Mitglied deaktivieren willst. Ich würde Dir dringend empfehlen, diese Prüfung einzubauen, selbst wenn Du aktuell nur dieses eine Formular haben solltest. Irgendwann kommt ein zweites hinzu und dann "passieren komische Sachen" ...
    Geändert von fiedsch (14.10.2018 um 09:43 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  9. #9
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Hab es angepasst:
    Code:
    <?php
    
    namespace AppBundle;
    
    use Contao\MemberModel; 
    use Contao\FrontendUser;
    
    class MyHooks {
    
    
        public function memberDeactivate($arrSet, $objForm)
        {   
    		$member= MemberModel::findById(FrontendUser::getInstance()->id);
    		$member->disable = 1;
    		$member->save();
                    return $arrSet;
        }
    }
    Das Mitglied ist nach dem Absenden leider immer noch aktiv :-(
    Es kommt keine Fehlermeldung und auch im Log ist kein Eintrag.

    Edit:
    Das return $arrSet; habe ich eingebunden. Das Mitglied ist aber immer noch aktiv.
    Liegt es vielleicht an der $member Variable?
    Sollte vielleicht $arrSet['member'] verwendet werden?
    Geändert von dirksche (14.10.2018 um 10:07 Uhr)

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

    Standard

    Zitat Zitat von dirksche Beitrag anzeigen
    Liegt es vielleicht an der $member Variable?
    Sollte vielleicht $arrSet['member'] verwendet werden?
    Ich denke nicht, daß es daran liegt. Du missbrauchst ja gewisserweise den Hook dazu etwas ganz anders zu machen: Du bekommst die Daten in $arrSet, deaktivierst das Mitglied und gibts $arrSet unverändert zurück. Bzgl. der Daten in $arrSet verhält es sich also so, als gäbe es gar keinen registrierten Hook.

    Evtl. musst Du

    PHP-Code:
    $member->disable '1'
    schreiben, denn die SQL-Definition von disable in dca/tl_member.php ist "char(1) NOT NULL default ''".
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  11. #11
    Contao-Fan Avatar von Stefko
    Registriert seit
    25.10.2012.
    Ort
    Karlsruhe
    Beiträge
    774
    User beschenken
    Wunschliste

    Standard

    Hallo,

    ich habe den Thread gerade eben erst gefunden.
    Auf die ursprüngliche Frage hätte ich geantwortet:
    Nach Formular absenden Weiterleitung auf eine Seite in welcher das Modul Auto-Logout eingebunden ist.
    Oder denke ich hier zu einfach? [emoji848]


    Gesendet von iPhone mit Tapatalk Pro
    Grüße, Stefko

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

    Standard

    So, wie ich es verstanden habe, geht es um deaktivieren und nicht abmelden des Mitglieds.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  13. #13
    Contao-Fan Avatar von Stefko
    Registriert seit
    25.10.2012.
    Ort
    Karlsruhe
    Beiträge
    774
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    So, wie ich es verstanden habe, geht es um deaktivieren und nicht abmelden des Mitglieds.
    Stimmt, jetzt sehe ich es auch
    Grüße, Stefko

  14. #14
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Code:
    $member->disable = '1';
    hat leider auch nicht den gewünschten Effekt erzielt :-( Keine Fehlermeldung aber das Mitglied bleibt aktiv.

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

    Standard

    Dann habe ich jetzt auch keine Idee mehr :-(

    Vielleicht noch per Eintrag in den Systemlog prüfen, daß der Code überhaupt ausgeführt wird:

    PHP-Code:
    \System::log("Deine Log-Meldung",  __METHOD__TL_GENERAL); 
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  16. #16
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    An welcher Stelle in der myHooks.php Datei muss ich den Sytem Log Eintag einfügen?

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

    Standard

    Irgendwo innerhalb memberDeactivate(). Dann wird der befehl ausgeführt, wenn memberDeactivate() ausgeführt wird und Bingo: Du weißt, daß memberDeactivate() ausgeführt wurde.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  18. #18
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Code:
    <?php
    
    namespace AppBundle;
    
    use Contao\MemberModel; 
    use Contao\FrontendUser;
    
    class MyHooks {
    
    
        public function memberDeactivate($arrSet, $objForm)
        {   
    		\System::log("Test",  __METHOD__, TL_GENERAL);
    		$member = MemberModel::findById(FrontendUser::getInstance()->id);
    		$member->disable = '1';
    		$member->save();
    		
    		return $arrSet;
        }
    }
    Ich hab den Log Befehl eingebunden. Leider scheint dieser auch nicht zu funktionieren. Er taucht im Log nicht auf :-(

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

    Standard

    Zitat Zitat von dirksche Beitrag anzeigen
    Ich hab den Log Befehl eingebunden. Leider scheint dieser auch nicht zu funktionieren. Er taucht im Log nicht auf :-(
    Dann wird Dein Code nicht aufgerufen. Du musst herausfinden, warum.

    Hast Du den Eintrag zum Aufruf des Hooks in der config.php wie im verlinkten Artikel von Hella (siehe #2) gemacht? Name des Hooks natürlich entsprechend angepasst.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  20. #20
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    643

    Standard

    Es funktioniert !!!!
    Allerdings mit dem processFormData Hook.

    Code:
    <?php
    
    namespace AppBundle;
    
    use Contao\MemberModel; 
    use Contao\FrontendUser;
    
    class MyHooks {
    
    
        public function memberDeactivate($arrPost, $arrForm, $arrFiles)
        {   
    		\System::log("Test",  __METHOD__, TL_GENERAL);
    		$member = MemberModel::findById(FrontendUser::getInstance()->id);
    		$member->disable = '1';
    		$member->save();
        }
    }
    Mit den storeFormData komme ich auf keinen grünen Zweig.
    Kann es evtl. an der Erweiterung Contao Leads liegen? Ich speichere die Formulardaten in einer Datenbank.

    Den processFormData Hook kann ich doch auch problemlos verwenden, oder?

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

    Standard

    Zitat Zitat von dirksche Beitrag anzeigen
    Den processFormData Hook kann ich doch auch problemlos verwenden, oder?
    Du musst halt probieren, was passiert, wenn die Formularvalidierung fehlschlägt, das Formular dem Member also erneut vorgelegt wird. Ich nehme an, daß Du in deisem Fall das Member noch nicht deaktivieren willst.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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
  •