Ergebnis 1 bis 6 von 6

Thema: Info Mail bei Profil Update durch Mitglied (ähnlich registration_info_mailer)

  1. #1
    Contao-Nutzer
    Registriert seit
    04.09.2009.
    Beiträge
    174

    Standard Info Mail bei Profil Update durch Mitglied (ähnlich registration_info_mailer)

    Hallo zusammen

    Der Kunde möchte per Mail informiert werden, wenn ein Mitglied seine persönlichen Daten anpasst. Er möchte dabei aber nur wissen, welche Daten geändert wurden.

    Also eine Kombination aus:



    Ähnlich wie hier https://www.contao-community.de/show...che-Daten-quot
    aber mit Abgleich der alten und neuen Daten?

    Wie lösen wir da am besten? Wir könnten die alten Werte in die Session schreiben und nach Absenden des Formular mit den neuen vergleichen. Ist das sinnvoll?

    Vielen Dank für Eure Vorschläge.
    Geändert von scribble (27.09.2012 um 10:35 Uhr)

  2. #2
    Contao-Fan Avatar von Wichteldesign
    Registriert seit
    23.06.2009.
    Ort
    Nürtingen
    Beiträge
    353

    Standard

    Code:
    if (isset($GLOBALS['TL_HOOKS']['updatePersonalData']) && is_array($GLOBALS['TL_HOOKS']['updatePersonalData']))
    {
        foreach ($GLOBALS['TL_HOOKS']['updatePersonalData'] as $callback)
        {
          $this->import($callback[0]);
          $this->$callback[0]->$callback[1]($this->User, $_SESSION['FORM_DATA']);
        }
    }
    Wenn ich das richtig sehe, dann bekommt der Hook nur die Session Daten zum Formular. Damit könntest du dir die Daten des aktuellen Users noch aus der Db holen und gegen diese vergleichen (Hash usw.) und darauf reagieren.
    Besten Gruß, Felix Peters
    Wichteldesign // Github // @wichteldesign // @el_wichtel

  3. #3
    Contao-Nutzer
    Registriert seit
    04.09.2009.
    Beiträge
    174

    Standard

    Zitat Zitat von Wichteldesign Beitrag anzeigen
    Code:
    if (isset($GLOBALS['TL_HOOKS']['updatePersonalData']) && is_array($GLOBALS['TL_HOOKS']['updatePersonalData']))
    {
        foreach ($GLOBALS['TL_HOOKS']['updatePersonalData'] as $callback)
        {
          $this->import($callback[0]);
          $this->$callback[0]->$callback[1]($this->User, $_SESSION['FORM_DATA']);
        }
    }
    Wenn ich das richtig sehe, dann bekommt der Hook nur die Session Daten zum Formular. Damit könntest du dir die Daten des aktuellen Users noch aus der Db holen und gegen diese vergleichen (Hash usw.) und darauf reagieren.
    Hallo Wichteldesign

    Vielen Dank für Deine Antwort.

    Leider wurde zu diesem Zeitpunkt die DB schon aktualisiert (siehe um Zeile 221), d.h. der Hook wird vor der Weiterleitung auf die jumpTo ausgeführt, wenn die DB-Queries schon durch sind.

    PHP-Code:
    $this->Database->prepare("UPDATE tl_member SET " $field "=? WHERE id=?")->execute($varSave$this->User->id); 
    Wir haben es nun mit einer zweiten Tabelle tl_member_team gelöst. So können wir über die ID die Daten der Mitglieder vergleichen und nachher
    den Datensatz in der Vergleichstabelle neu anlegen.
    PHP-Code:
        $this->Database->prepare("DELETE FROM tl_member_team WHERE id=?")->execute($objUser->id);
        
    $this->Database->prepare("INSERT INTO tl_member_team SELECT * FROM tl_member WHERE id=?")->execute($objUser->id); 

  4. #4
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Genau das müsste ich auch haben

    Die Lösung mit den zweiten Tabellen ist ein guter Workaround. Gibt es jetzt mit Contao 3.2 aber vielleicht nicht schon eine andere, bessere Lösung?

    Gruss
    Marco

  5. #5
    Contao-Nutzer
    Registriert seit
    14.03.2013.
    Beiträge
    11

    Standard

    Zitat Zitat von marcos Beitrag anzeigen
    Genau das müsste ich auch haben

    Die Lösung mit den zweiten Tabellen ist ein guter Workaround. Gibt es jetzt mit Contao 3.2 aber vielleicht nicht schon eine andere, bessere Lösung?

    Gruss
    Marco
    Ich schließe mich mal an

    Aber wenn ich nichts übersehen habe wird die Datenbank nach wie vor aktualisiert bevor der Hook aufgerufen wird.

    Die Lösung mit der zweiten Tabelle ist mir aktuell noch ein wenig zu umständlich.
    Geändert von malitze (09.04.2014 um 15:35 Uhr)

  6. #6
    Contao-Nutzer
    Registriert seit
    17.05.2010.
    Beiträge
    17

    Standard

    Unter contao 4.10 habe ich das Thema für mich gelöst durch einen einfachen Hook - mittlerweile muss man dazu nur noch eine Datei erstellen - mehr nicht!
    Für den Vergleich nutze ich die Contao Version Klasse. Das meiste in dem Code ist der Versuch, ein Styling hinzubekommen - funktioniert aber nicht wirklich.

    PHP-Code:
    <?php 

    // src/EventListener/UpdatePersonalDataListener.php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Module;
    use 
    Contao\FrontendUser;
    use 
    Contao\Email;
    use 
    Contao\Versions;

    /**
     * @Hook("updatePersonalData")
     */
    class UpdatePersonalDataListener
    {
        public function 
    __invoke(FrontendUser $member, array $dataModule $module): void
        
    {
        
            
    //Objekt für den Versionsvergleich 
            
    $strTable         $member->getTable();
            
    $objVersions     = new Versions($strTable$member->id);
            
            
            
    //Verschicken einer Email: 
            //Allgemeine Vorbereitung
            
    $objEmail = new Email();
            
    $objEmail->from $GLOBALS['TL_ADMIN_EMAIL'];
            
    $objEmail->fromName 'Contao mailer';

            
    //Betreff
            
    $objEmail->subject "Änderung Mitglied Nr. " $member->id " (" implode(', '$member->groups) . ")";

            
    //Text - Einleitung
            
    $strText =             "<!DOCTYPE html><html><head>
                                <meta http-equiv="
    Content-Type" content="text/htmlcharset=utf-8"><title>" $objEmail->subject "</title>

                                <meta name="
    viewport" content="width=device-widthinitial-scale=1">
                                <meta http-equiv="
    X-UA-Compatible" content="IE=edge">
                                <style type="
    text/css">
                                #outlook a{padding:0;} /* Force Outlook to provide a "
    view in browser" message */
                                .ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail to display emails at full width */
                                .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing */
                                body, table, td, a{-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;} /* Prevent WebKit and Windows mobile changing default text sizes */
                                table, td{mso-table-lspace:0pt; mso-table-rspace:0pt;} /* Remove spacing between tables in Outlook 2007 and up */
                                img{-ms-interpolation-mode:bicubic;} /* Allow smoother rendering of resized image in Internet Explorer */

                                body {
                                    background:#fff;
                                    padding:12px;
                                }

                                /* Elements */
                                h2 {
                                    margin:0;
                                    padding:4px 6px;
                                    background:#eee;
                                    border-bottom:1px solid #ddd;
                                    font-size:.875rem;
                                }
                                .formbody {
                                    margin:12px 0 18px;
                                    text-align:right;
                                }
                                .formbody .tl_select {
                                    width:42%;
                                    max-width:280px;
                                }
                                .formbody .tl_submit {
                                    padding-top:5px;
                                    padding-bottom:6px;
                                }
                                .formbody .arrow {
                                    vertical-align:middle;
                                }
                                .formbody .static-version {
                                    margin-right:3px;
                                }

                                .tl_info {
                                    padding:6px 6px 6px 28px;
                                    border-radius:2px;
                                    color:#006494;
                                    line-height:1.2;
                                }

                                #diff .change {
                                    margin-bottom:1em;
                                    border:1px solid #ddd;
                                    background:#fcfcfc;
                                    border-radius:2px;
                                }
                                #diff .replace.left,#diff .delete.left {
                                    background: #fdd;
                                }
                                #diff .replace.right,#diff .insert.right {
                                    background: #dfd;
                                }
                                #diff .replace ins {
                                    color:#060;
                                    background: #bfb;
                                }
                                #diff .replace del {
                                    color:#a00;
                                    background: #fbb;
                                }
                                #diff ins,#diff del {
                                    text-decoration: none;
                                }
                                #diff dl {
                                    margin:0;
                                    padding:0;
                                    font:.75rem "
    Roboto Mono",monospace;
                                }
                                #diff dt,#diff dd {
                                    margin:0;
                                    padding:0 6px;
                                    line-height:1.25;
                                }
                                #diff dl dt:first-of-type,#diff dl dd:first-of-type {
                                    padding-top:3px;
                                }
                                #diff dl dt:last-of-type,#diff dl dd:last-of-type {
                                    padding-bottom:3px;
                                }
                                </style>
                                </head>
                                <body style="
    margin0padding0;" dir="ltr">";

            
    $strText .=         "<p>Guten Tag, <br><br>" .
                                
    "einige Informationen zu Mitglied " $member->id" (" $member->lastname ", " $member->firstname ") haben sich geändert.<br>" .
                                
    "Im Folgenden finden Sie die aktuellen Daten: </p>";
            
            
    //Tabelle mit aktuellen Daten:
            
    $strText .=         "<table cellpadding="2" cellspacing="2" border="0" bordercolor="white" width="100%">";
            foreach(
    $data as $key => $value){
                
    $strText .=     "<tr><td bgcolor="#f4f4f4"><b>" . $GLOBALS['TL_DCA']['tl_member']['fields'][$key]['label'][0] ."</b></td><td> ".$value ."</td></tr>\n";
            
    }
            
    $strText .=         "</table><br><br>";
            
            
    //Contao Compare ausgeben
            
    $strText .=         "<p>Die letzten Änderungen sind hier beschrieben: </p>";        
            
    $strText .=         "<div id="diff">" $objVersions->compare(true) . "</div>";
            
            
    //Grußformel
            
    $strText .=         "<p>Viele Grüße,<br><b>Webmaster</b></p></body></html>";

            
    //Verschicken der Email
            
    $objEmail->html $strText;
            
    $objEmail->sendTo($GLOBALS['TL_ADMIN_EMAIL']);
            
            
            
    $_SESSION['TL_EMAIL_SENT'] = true;
        }
    }

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
  •