Nachdem mir bereits hier im Forum viel geholfen wurde, möchte ich nun auch einmal etwas liefern.
Das Newslettermodul, wie hier beschrieben wurde von mir um folgende Punke erweitert.
1. Versand von
Multipart-Mails, d.h. der Newsletter kann mit HTML formatiert werden. Dieser wird dann beim Versand zusätzlich in ein Textformat umgewandelt und ebenfalls verschickt. Kann oder will der Empfänger keine HTML-eMails, dann kann er zumindest auf die
Text-Wariante zugreifen. (Achtung: Bitte bei der HTML-Formatierung berücksichtigen, dass in einer Text-Ausgabe nicht alles gezeigt werden kann. Die Umwandlung ist nicht sehr "intelligent". Es werden alle HTML-Tags entfernt und Zeilenumrüche erzeugt.
2.
Integration des HTMLArea2 zur Formatierung.
Achtung: Funktioniert, wie hier beschrieben nur, wenn dieser HTML-Editor nicht als Standard-Editor benutzt wird.
3. Angabe eines Namens für den Absender (bei der Erstellung des NL)-Hierzu wird im Feld Absender, der Name einfach durch Semikolon getrennt angefügt (Bsp:
newsletter@ll-consult.de;LL Consult News)
Folgende Änderungen sind notwendig:
1.
config.php im Verzeichnis: contenido/includes
Code: Alles auswählen
$cfg['path']['htmlarea2_html'] = 'http://212.227.216.122/CMS/contenido/external/wysiwyg/htmlarea2/';
//an eignenen Pfad anpassen, einfach $cfg['path'][wysiwyg_html'] koipieren und spaw durch html-area ersetzen!
2.editor.php im verzeichnis contenido/external/wysiwyg\htmlarea2
ca.Zeile 1175:
Code: Alles auswählen
_editor_url = "<?php print $cfg["path"]["wysiwyg_html"] ?>";
ersetzen durch
_editor_url ="../external/wysiwyg/htmlarea2/";
ca. Zeile 1182: auskommentieren
Code: Alles auswählen
//echo "<td bgcolor=\"$bg\"><textarea name=\"CMS_HTML\" rows=\"20\" cols=\"52\" style=\"width:650\">".urldecode($a_content[$type][$typenr])."</textarea></td>\n";
ca. Zeile 1211 auskommentieren:
Code: Alles auswählen
/*if(document.all) editor_generate('<?php print 'CMS_HTML' ?>',config);*/
3.
include.newsletter_edit.php in contenido/includes ersetzen durch folgenden Code:
(es wird am Anfang die editor.php eingebunden und am Ende der HTML Editior aufgerufen)
Code: Alles auswählen
<?php
/******************************************
* File : include.newsletter_edit.php
* Project : Contenido
* Descr : Newsletter Editor
*
* Author : Timo A. Hummel
* Created : 09.05.2003
* Modified : 29.09.2004 LL Consult
*
* © four for business AG
*****************************************/
include_once ($cfg["path"]["contenido"] . $cfg["path"]["classes"] . "class.user.php");
include ($cfg["path"]["htmlarea2"]."editor.php"); //HTML-Area einbimdem LL Consult
$userclass = new User();
$db2 = new DB_Contenido;
if(!$perm->have_perm_area_action($area))
{
$notification->displayNotification("error", i18n("No permission"));
} else {
if ( !isset($newsid) && $action != "news_createnewsletter" )
{
$tpl->reset();
$tpl->set('s', 'CONTENTS', '');
$tpl->generate($cfg['path']['templates'] . $cfg['templates']['blank']);
} else {
if ($action == "news_createnewsletter" && $finalstep == 1)
{
$newsid = $db->nextid($cfg["tab"]["news"]);
$timestamp = date("Y-m-d H:i:s");
$sql = 'INSERT INTO
'.$cfg["tab"]["news"].'
SET
name="'.$name.'",
subject="'.$subject.'",
message="'.$message.'",
newsfrom="'.$newsfrom.'",
author="'.$auth->auth["uid"].'",
newsdate="'.$timestamp.'",
idclient="'.$client.'",
idlang="'.$lang.'",
idnews = "'.$newsid.'"';
$db->query($sql);
$notification->displayNotification("info", i18n("Changes saved"));
}
if (($action == "news_editnewsletter") && ($perm->have_perm_area_action($area, $action)))
{
$sql = 'UPDATE
'.$cfg["tab"]["news"].'
SET
name="'.$name.'",
subject="'.$subject.'",
message="'.$message.'",
newsfrom="'.$newsfrom.'"
WHERE
idnews = "'.$newsid.'"';
$db->query($sql);
$notification->displayNotification("info", i18n("Changes saved"));
}
$tpl->reset();
$sql = "SELECT
idnews, name, subject, message, newsfrom, newsdate, author
FROM
".$cfg["tab"]["news"]."
WHERE
idnews = '".$newsid."'";
$db->query($sql);
if ($action != "news_createnewsletter")
{
$form = '<form name="news_edit" method="post" action="'.$sess->url("main.php?").'">
'.$sess->hidden_session().'
<input type="hidden" name="area" value="'.$area.'">
<input type="hidden" name="action" value="news_editnewsletter">
<input type="hidden" name="frame" value="'.$frame.'">
<input type="hidden" name="newsid" value="'.$newsid.'">
<input type="hidden" name="idlang" value="'.$lang.'">';
} else {
$form = '<form name="news_edit" method="post" action="'.$sess->url("main.php?").'">
'.$sess->hidden_session().'
<input type="hidden" name="area" value="'.$area.'">
<input type="hidden" name="action" value="news_createnewsletter">
<input type="hidden" name="finalstep" value="1">
<input type="hidden" name="frame" value="'.$frame.'">
<input type="hidden" name="newsid" value="'.$newsid.'">
<input type="hidden" name="idlang" value="'.$lang.'">';
}
$db->next_record();
$tpl->set('s', 'JAVASCRIPT', $javascript);
$tpl->set('s', 'FORM', $form);
$tpl->set('s', 'BORDERCOLOR', $cfg["color"]["table_border"]);
$tpl->set('s', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('s', 'SUBMITTEXT', i18n("Save changes"));
$tpl->set('s', 'CANCELTEXT', i18n("Discard changes"));
$tpl->set('s', 'CANCELLINK', $sess->url("main.php?area=$area&frame=4&newsid=$userid"));
$tpl->set('d', 'CLASS', 'textw_medium');
$tpl->set('d', 'CATNAME', i18n("Property"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_header"]);
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', i18n("Value"));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Name"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateField ("text", "name", $db->f("name"), 40, 255));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("From"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateField ("text", "newsfrom", $db->f("newsfrom"), 40, 255));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Subject"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateField ("textbox", "subject", $db->f("subject"), 80, 3));
$tpl->next();
if ($action != "news_createnewsletter")
{
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Created"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', $db->f("newsdate"));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Author"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD',
$userclass->getUsername($db->f("author")).
" (".
$userclass->getRealname($db->f("author")).
")");
$tpl->next();
}
$messageHelp = "<br><br><b>". i18n("Special Message Tags (will be replaced when sending)").":</b><br>".
"MAIL_NAME: ".i18n("Name of the recipient")."<br>".
"MAIL_DATE: ".i18n("Date of when the mail has been sent")."<br>".
"MAIL_TIME: ".i18n("Time of when the mail has been sent")."<br>".
"MAIL_NUMBER: ".i18n("Number of recipients")."<br>".
"MAIL_UNSUBSCRIBE: ".i18n("Link to unsubscribe")."<br>".
"MAIL_STOP: ".i18n("Link to pause the subscription")."<br>".
"MAIL_GOON: ".i18n("Link to resume the subscription")."<br>";
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Message"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateField ("textbox", "message", $db->f("message"), 80, 20) . $messageHelp);
$tpl->next();
# Generate template
$tpl->generate($cfg['path']['templates'] . $cfg['templates']['newsletter_edit']);
}
}
?>
<!-- HTML Area aufrufen -->
<script type="text/javascript">
editor_generate('message');
</script>
4.
include.newsletter_send.php in contenido/includes
(Änderungen: Einbindung von Klasse phpmailer- wird von Contenido z.B. für den BUG-Report genutzt. )
Code: Alles auswählen
<?
/******************************************
* File : include.newsletter_send.php
* Project : Contenido
* Descr : Newsletter Send Function
*
* Author : Timo A. Hummel
* Created : 10.05.2003
* Modified : 29.09.2004, LL Consult
*
* © four for business AG
*****************************************/
cInclude("classes","class.phpmailer.php");
if(!$perm->have_perm_area_action($area))
{
$notification->displayNotification("error", i18n("Permission denied"));
} else {
if (!isset($newsid))
{
} else {
include_once ($cfgClient[$client]["path"]["frontend"]."config.php"); // HerrB: getting $newsletteridcatart...
$sql = "SELECT * FROM ".$cfg["tab"]["news"]." WHERE idnews='$newsid'";
$db->query($sql);
$db->next_record();
$from = $db->f("newsfrom");
$subject = $db->f("subject");
$message = $db->f("message");
$date = $db->f("newsdate");
$dateday = $date[8].$date[9].".".$date[5].$date[6].".".$date[0].$date[1].$date[2].$date[3];
$time = $date[11].$date[12].":".$date[14].$date[15].":".$date[17].$date[18];
$sql = "SELECT * FROM ".$cfg["tab"]["news_rcp"]." WHERE deactivated='0' AND confirmed='1' AND idlang='$lang' AND idclient='$client'";
$db->query($sql);
$i = 0;
$number = $db->num_rows();
$message = str_replace("MAIL_NUMBER", "$number", $message);
$message = str_replace("MAIL_DATE", "$dateday", $message);
$message = str_replace("MAIL_TIME", "$time", $message);
$sql = "SELECT idclient, frontendpath, htmlpath, errsite_cat, errsite_art FROM ".$cfg["tab"]["clients"] ." WHERE idclient='$client'";
$db2 = new DB_Contenido;
$db2->query($sql);
$db2->next_record();
//$path = $db2->f("htmlpath"). "news.php?"; // HerrB: Updated, now including language and newsletter arcticle id
$path = $db2->f("htmlpath"). "front_content.php?changelang=".$lang."&idcatart=".$newsletteridcatart."&";
while ($db->next_record()) {
$encoded_email = $db->f("email"); /* HerrB: getting urlencoded email from db */
$to = urldecode($encoded_email); /* HerrB: $db->f("email") -> urldecode($encoded_email) */
$name = urldecode($db->f("name")); /* HerrB: decoding urlencoded name */
/* HerrB: If no name given, use e-mail as name */
if (!($name)) {
$name = $to;
}
$messageRaw = str_replace("MAIL_NAME", $name, $message);
//HTML-Version
$messageHTML = str_replace("MAIL_UNSUBSCRIBE", "<a href=\"".$path."unsubscribe=".md5($encoded_email)."\">Zusendung einstellen und Daten löschen</a>", $messageRaw); /* HerrB: $to -> md5($encoded_email) */
$messageHTML = str_replace("MAIL_STOP", "<a href=\"".$path."stop=".md5($encoded_email)."\">Newsletter stoppen</a>", $messageHTML); /* HerrB: see above */
$messageHTML = str_replace("MAIL_GOON", "<a href=\"".$path."goon=".md5($encoded_email)."\">Newsletterversand erneut aktivieren</a>", $messageHTML); /* HerrB: see above */
//Text-Version
$messageTxt = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".md5($encoded_email), $messageRaw); /* HerrB: $to -> md5($encoded_email) */
$messageTxt = str_replace("MAIL_STOP", $path."stop=".md5($encoded_email), $messageTxt); /* HerrB: see above */
$messageTxt = str_replace("MAIL_GOON", $path."goon=".md5($encoded_email), $messageTxt); /* HerrB: see above */
$messageTxt = str_replace("<BR>","\n",$messageTxt); // einfacher Zeilenumbruch
$messageTxt = str_replace("</P>","</P>\n",$messageTxt); // Absatzumbruch
$mail = new phpmailer();
$absender = explode(";",$from);
if (count($absender)>1) {
$mail->From = $absender[0];
$mail->FromName = $absender[1];
}else{
$mail->From = $from;
$mail->FromName = $from;
}
$mail->AddAddress($to, $name);
/* set mail function to use */
$mail->Mailer = "mail"; //use php mail function
/* generate subject & body */
$mail->Subject = $subject;
$mail->Body =$messageHTML;
$mail->AltBody =strip_tags(html_entity_decode($messageTxt));
if (!$mail->send())
{
$notsend .= $lngNews["mailcouldnotbesend1"].$to.$lngNews["mailcouldnotbesend2"]."<br>";
} else {
$i = $i + 1;
}
}
$notification->displayNotification("info", $notsend.sprintf(i18n("Newsletter was sent to %s recipient(s)"), $i)."<br>");
}
}
?>
5. im Modul
Newsletter_blackbox den Bereich, beginnend mit
if ($welcome_title != "")(versendet die Willkommen-Mail) durch folgenden Code ersetzen:
Code: Alles auswählen
if ($welcome_title != "") {
$sql = "SELECT * FROM ".$cfg["tab"]["news"]." WHERE idclient='$client' AND idlang='$lang' AND name='$welcome_title'";
$db->query($sql);
if ($db->next_record()) {
$from = $db->f("newsfrom");
$subject = $db->f("subject");
$message = $db->f("message");
$date = $db->f("newsdate");
$dateday = $date[8].$date[9].".".$date[5].$date[6].".".$date[0].$date[1].$date[2].$date[3];
$time = $date[11].$date[12].":".$date[14].$date[15].":".$date[17].$date[18];
$sql = "SELECT idclient, htmlpath FROM ".$cfg["tab"]["clients"]." WHERE idclient='$client'";
$db->query($sql);
$db->next_record();
$path = $db->f("htmlpath")."front_content.php?changelang=".$lang."&idcatart=".$newsletteridcatart."&";
$message = str_replace("MAIL_NUMBER", "1", $message); /* $number wird mit 1 gesetzt, da nur ein Empfänger */
$message = str_replace("MAIL_DATE", "$dateday", $message);
$message = str_replace("MAIL_TIME", "$time", $message);
$message = str_replace("MAIL_NAME", $name, $message);
//HTML-Version
$messageHTML = str_replace("MAIL_UNSUBSCRIBE", "<a href=\"".$path."unsubscribe=".md5($encoded_email)."\">Zusendung einstellen und Daten löschen</a>", $message); /* HerrB: $to -> md5($encoded_email) */
$messageHTML = str_replace("MAIL_STOP", "<a href=\"".$path."stop=".md5($encoded_email)."\">Newsletter stoppen</a>", $messageHTML); /* HerrB: see above */
$messageHTML = str_replace("MAIL_GOON", "<a href=\"".$path."goon=".md5($encoded_email)."\">Newsletterversand erneut aktivieren</a>", $messageHTML); /* HerrB: see above */
//Text-Version
$messageTxt = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".md5($encoded_email), $message); /* HerrB: $to -> md5($encoded_email) */
$messageTxt = str_replace("MAIL_STOP", $path."stop=".md5($encoded_email), $messageTxt); /* HerrB: see above */
$messageTxt = str_replace("MAIL_GOON", $path."goon=".md5($encoded_email), $messageTxt); /* HerrB: see above */
$messageTxt = str_replace("<BR>","\n",$messageTxt); // einfacher Zeilenumbruch
$messageTxt = str_replace("</P>","</P>\n",$messageTxt); // Absatzumbruch
$mail = new phpmailer();
$absender = explode(";",$from);
if (count($absender)>1) {
$mail->From = $absender[0];
$mail->FromName = $absender[1];
}else{
$mail->From = $from;
$mail->FromName = $from;
}
$mail->AddAddress($to, $name);
/* set mail function to use */
$mail->Mailer = "mail"; //use php mail function
/* generate subject & body */
$mail->Subject = $subject;
$mail->Body =$messageHTML;
$mail->AltBody =strip_tags(html_entity_decode($messageTxt));
if ($mail->send()) {
echo $msg["htmlOKConfirmWelcome"];
}
}
}
} else {
echo $msg["htmlErrConfirm"];
}
TIPP: Für den Fall, dass der HTMLArea bereits verwendet wird, kann die editor.php kopiert und unter anderem Namen gespeichert werden (sauberer wäre es natürlich den Java-Script Part auzulagern und in php dann einzubinden, da sonst der JS-Code doppelt vorliegt). In der include.newsletter_edit.php muss dann die entsprechende zeile angepasst werden.
Nicht vergessen die alten dateien zu sichern.
Das Ergebnis sollte dann so aussehen: