Hallo Andreas,
ich habe mir jetzt mal einen php-Debugger installiert und das Problem genauer unter die Lupe genommen. Ausgangspunkt war compileRecipients in der von Dir erwähnten String-Klasse.
Versionen:
Contao 3.2.20
notification_centre 1.2.3 Build 2
isotope 2.1.13
php 5.6.9
Parameter für compileRecipients sind
Code:
$strRecipients: xxx@myserver.localdomain,##recipient_email##
$arrTokens /* größeres Array */
Es gilt $arrTokens["recipientEmail"] == "Max Frisch" <yyy@myserver.localdomain>
Soweit sieht das alles korrekt aus. In der Methode compileRecipients wird dann der String nach Komma aufgesplittet und für jeden dabei entstehenden String wird static::recursiveReplaceTokensAndTags aufgerufen. Das ergibt keine Veränderung für xxx@myserver.localdomain, spannend wird es bei der Verarbeitung von ##recipient_email##.
Parameter für recursiveReplaceTokensAndTags ist dann ##recipient_email## und $arrTokens von oben, zusätzlich gibt es noch $intTextFlags, was hier offensichtlich den Wert 3 hat. In recursiveReplaceTokensAndTags wird $arrTokens modifiziert:
PHP-Code:
$arrTokens = static::convertToText($arrTokens, $intTextFlags);
Nach dieser Modifikation gilt:
Code:
$arrTokens["recipientEmail"] == "Max Frisch"
(* und das scheint mir auch genau das Problem zu sein, der interessante Teil ist verschwunden *)
Beim anschließenden Versuch ##recipient_email## aufzulösen (via static::recursiveReplaceTokensAndTags) wird dann letztlich als Ergebnis $arrTokens["recipientEmail"] zurückgegeben und das ist einfach falsch. Der ursprüngliche Wert in $arrTokens["recipientEmail"] vor der Modifikation war aber korrekt, daher scheint mir der Fehler im Ausführen der obigen Zeile zu liegen:
PHP-Code:
$arrTokens = static::convertToText($arrTokens, $intTextFlags);
Die Funktion convertToText enthält u.a. die Zeile
PHP-Code:
// Remove HTML tags but keep line breaks for <br> and <p>
if ($options & static::NO_TAGS) {
$varValue = strip_tags(preg_replace('{(?!^)<(br|p|/p).*?/?>\n?(?!$)}is', "\n", $varValue));
}
Hier werden (wie der Kommentar andeutet) HTML-Tags eliminiert, und da "Max Frisch" <yyy@myserver.localdomain> einen Teil enthält, der in spitze Klammern eingefasst ist, bleibt bei der Ersetzung lediglich "Max Frisch" übrig.
Ich verstehe ehrlich gesagt nicht, warum das nur bei mir Probleme macht.
Viele Grüße, Zmann
Lesezeichen