Für den Vergleich nutze ich die Contao Version Klasse.
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 $data, Module $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> </head>
<body style="margin: 0; padding: 0;" 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;
}
}
Lesezeichen