Die Integration von HerrBs Newsletter in die 4.6er C-Version sieht ja schon mal ganz gut aus, funktioniert auch einwandfrei. Einziger Mangel ist, dass das Senden eines HTML-Newsletter (noch) nicht möglich ist, deshalb habe ich mich entschlossen den Newsletter mit dieser Funktionalität zu erweitern. Ziel war es, alternativ zum Textfeld, ein weiteres Feld mit dem WYSIWYG Editor anzuzeigen, um neben dem Text-Newsletter auch einen HTML-Newsletter zu verfassen.
Die beiden Formate werden, dann im selben eMail versandt und je nach Einstellungen des Client wird entweder die HTML- oder die Text-Version angezeigt.
Anbei die Änderungen die dazu vorgenommen werden müssen:
Die DB-Tabelle (prefix)_news muss mit einer Spalte erweitert werden:
Code: Alles auswählen
ALTER TABLE `!PREFIX!_news` ADD `messageHTML` TEXT AFTER `message`;
Dann in der Datei contenido/includes/include.newsletter_edit.php
Nach folgender Zeile (53)
Code: Alles auswählen
$message = stripslashes($message);
Code: Alles auswählen
$messageHTML = stripslashes($messageHTML);
Nach folgender Zeile (83)
Code: Alles auswählen
$newsletter->set("message", $message);
Code: Alles auswählen
$newsletter->set("messageHTML", $messageHTML);
Nach folgender Zeile (130)
Code: Alles auswählen
$form->add(i18n("Message"), $message->render());
Code: Alles auswählen
$editor_content = $newsletter->get("messageHTML");
include ($cfg["path"]["wysiwyg"] . 'editornewsletter.php');
$form->add(i18n("HTML message"), $content);
Dann in der Datei contenido/classes/class.newletter.php
Nach folgender Zeile (242)
Code: Alles auswählen
$message = $this->get("message");
Code: Alles auswählen
$messageHTML = $this->get("messageHTML");
Nach folgender Zeile (254)
Code: Alles auswählen
$message = str_replace("MAIL_TIME", "$time", $message);
Code: Alles auswählen
$messageHTML = str_replace("MAIL_NUMBER", "$recipientcount", $messageHTML);
$messageHTML = str_replace("MAIL_DATE", "$dateday", $messageHTML);
$messageHTML = str_replace("MAIL_TIME", "$time", $messageHTML);
$messageHTML = str_replace("\"upload", "\"".$cfgClient[$client]["htmlpath"]["frontend"]."/upload", $messageHTML);
$messageHTML = "<body><head><link type=\"text/css\" href=\"".$cfgClient[$client]["htmlpath"]["frontend"]."/css/editor_style.css\" /></head><body>".$messageHTML;
Folgende Zeilen (298 - 310)
Code: Alles auswählen
$mail = new phpmailer();
$mail->From = $from;
$mail->FromName = $from;
$mail->AddAddress($to);
$mail->Mailer = "mail";
$mail->Subject = $subject;
$mail->Body = $message2."\n\n".$foot;
// $mail->AltBody = $body;
if (!$mail->Send()) {
$result[] = $name . " (" . $to . "): " . sprintf(i18n("Newsletter to %s could not be sent"), $to);
} else {
$result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
}
Code: Alles auswählen
$messageHTML2 = str_replace("MAIL_NAME", "$name", $messageHTML);
$messageHTML2 = str_replace("MAIL_UNSUBSCRIBE", "<a href=\"".$path."unsubscribe=".$key."\">".$path."unsubscribe=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_CHANGE", "<a href=\"".$path."change=".$key."\">".$path."change=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_STOP", "<a href=\"".$path."stop=".$key."\">".$path."stop=".$key."</a>", $messageHTML2);
$messageHTML2 = str_replace("MAIL_GOON", "<a href=\"".$path."goon=".$key."\">".$path."goon=".$key."</a>", $messageHTML2);
$boundary = md5(uniqid(time()));
$headers = 'From: ' . $from . "\n";
$headers .= 'To: ' . $to . "\n";
$headers .= 'Return-Path: ' . $from . "\n";
$headers .= 'MIME-Version: 1.0' ."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\n\n";
$headers .= $message2."\n\n".$foot . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/plain; charset=ISO-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $message2."\n\n".$foot . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $messageHTML2."<p>".$foot."</p></body></html>\n";
$headers .= '--' . $boundary . "--\n";
$mailOk=mail('', $subject,'', $headers);
if ($mailOk) {
$result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
} else {
$result[] = $name . " (" . $to . "): " . sprintf(i18n("Newsletter to %s could not be sent"), $to);
}
Dann muss im Verzeichnis contenido/external/wysiwyg/tinymce2 eine Datei namens editornewsletter.php mit folgendem Inhalt erstellt werden:
Code: Alles auswählen
<?php
// ================================================
// TINYMCE 1.45rc1 PHP WYSIWYG editor control
// used for the HTML Newsletter
// ================================================
// Main editor file for CONTENIDO
// ================================================
// www.dayside.net
// ================================================
// Author: Martin Horwath, horwath@dayside.net
// Modified by: Simon Käser raptus.com
// TINYMCE 1.45rc1 Fileversion , 2005-06-10 v0.0.3
// ================================================
// include editor config/combat file
include (dirname(__FILE__).DIRECTORY_SEPARATOR."config.php"); // CONTENIDO
cInclude("external", "wysiwyg/tinymce2/editorclass.php");
// name of textarea element
$editor_name = "messageHTML";
$editor_content = htmlspecialchars($editor_content);
$cTinyMCEEditor = new cTinyMCEEditor($editor_name, $editor_content);
$currentuser = new User;
$currentuser->loadUserByUserID($auth->auth["uid"]);
if ($currentuser->getField("wysi") == 1)
{
$content = $cTinyMCEEditor->getScripts();
$content.= $cTinyMCEEditor->getEditor();
}
?>
Damit die Übersetzung funktioniert müssen in der Datei contenido/locale/de_DE/LC_MESSAGES/contenido.po folgende Zeilen hinzugefügt werden:
Code: Alles auswählen
#: contenido/includes/include.newsletter_edit.php:133
msgid "HTML message"
msgstr "HTML Nachricht"
Das ganze habe ich nur mit der Version 4.6.0 getestet.
Viel Spass postet bitte Bugs oder Verbesserungsvorschläge.