(Die warscheinlich in der Version 4.5 dann nicht mehr nötig sein wird ...?)
Inhalt der Erweiterung ist das Filtern nach bestimmten Merkmalen der Newsletter-Empfänger, z.B. männlich, weiblich, Ort, Kundengruppe, Alter usw. (natürlich vorbehaltlich, daß man diese Angaben hat.)
Die Erweiterung ist in sich stimmig, soll hier aber nur als Beispiel dienen.
(Also Feldnamen/-Inhalte jeweils anpassen!)
[Edit: HerrB] Achtung! Das folgende SQL-Skript löscht die Empfänger-Tabelle aus der Datenbank! Vorhandene Empfänger gehen verloren!
Erweitert wird die Tabelle con_news_rcp
Code: Alles auswählen
DROP TABLE IF EXISTS con_news_rcp;
CREATE TABLE con_news_rcp (
idnewsrcp int(10) NOT NULL default '0',
idclient int(10) NOT NULL default '0',
idlang int(10) NOT NULL default '0',
email varchar(255) default NULL,
name varchar(255) default NULL,
firstname varchar(100) default NULL,
titel varchar(100) default NULL,
anrede varchar(10) default NULL,
company varchar(255) default NULL,
address varchar(255) default NULL,
postcode varchar(25) default NULL,
city varchar(100) default NULL,
land varchar(150) default NULL,
fon varchar(25) default NULL,
fax varchar(25) default NULL,
filter1 varchar(50) default NULL,
filter2 varchar(50) default NULL,
filter3 varchar(50) default NULL,
deactivated int(1) NOT NULL default '0',
author varchar(32) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
lastmodified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (idnewsrcp)
) TYPE=MyISAM;
.... die include.recipients_edit.php
Code: Alles auswählen
<?php
/******************************************
* File : include.recipient_edit.php
* Project : Contenido
* Descr : edit recipient properties
*
* Author : Timo A. Hummel © four for business AG
* angepaßt : Ines Müller
* Created : 30.04.2003
* last Modified : Jan. 2005
*
*
*****************************************/
include_once ($cfg["path"]["contenido"] . $cfg["path"]["classes"] . "class.user.php");
$userclass = new User();
$db2 = new DB_Contenido;
if(!$perm->have_perm_area_action($area,$action))
{
$notification->displayNotification("error", i18n("Permission denied"));
} else {
if ( !isset($newsrcpid) && $action != "recipients_createrecipient" )
{
$tpl->reset();
$tpl->set('s', 'CONTENTS', '');
$tpl->generate($cfg['path']['templates'] . $cfg['templates']['blank']);
} else {
if ($action == "recipients_createrecipient" && $final == 1)
{
$sql = "SELECT max(idnewsrcp) as oldidnewsrcp FROM ".$cfg["tab"]["news_rcp"];
$db->query($sql);
$db->next_record();
$oldidnewsrcp = $db->f("oldidnewsrcp") ;
$idnewsrcp =$oldidnewsrcp + 1;
//print $idnewsrcp;
if ($deactivated == "deactivated")
{
$deactivated = 1;
} else {
$deactivated = 0;
}
$newsrcpid = $db->nextid($cfg["tab"]["news_rcp"]);
$timestamp = date("Y-m-d H:i:s");
$sql = 'INSERT INTO
'.$cfg["tab"]["news_rcp"].'
SET
name="'.$name.'",
firstname="'.$firstname.'",
titel ="'.$titel.'",
anrede ="'.$anrede.'",
company="'.$company.'",
address="'.$address.'",
postcode ="'.$postcode.'",
city ="'.$city.'",
land ="'.$land.'",
fon ="'.$fon.'",
fax ="'.$fax.'",
filter1 ="'.$filter1.'",
filter2 ="'.$filter2.'",
filter3 ="'.$filter3.'",
email="'.$email.'",
deactivated="'.$deactivated.'",
author="'.$auth->auth["uid"].'",
created="'.$timestamp.'",
lastmodified="'.$timestamp.'",
idclient="'.$client.'",
idlang="'.$lang.'",
idnewsrcp = "'.$idnewsrcp.'"';
//print $sql;
$db->query($sql);
$notification->displayNotification("info", i18n("Changes saved"));
}
if (($action == "recipients_editrecipient") && ($perm->have_perm_area_action($area, $action)))
{
if ($deactivated == "deactivated")
{
$deactivated = 1;
} else {
$deactivated = 0;
}
$lastmodified = date("Y-m-d H:i:s");
$sql = 'UPDATE
'.$cfg["tab"]["news_rcp"].'
SET
name="'.$name.'",
firstname="'.$firstname.'",
titel ="'.$titel.'",
anrede ="'.$anrede.'",
company="'.$company.'",
address="'.$address.'",
postcode ="'.$postcode.'",
city ="'.$city.'",
land ="'.$land.'",
fon ="'.$fon.'",
fax ="'.$fax.'",
filter1 ="'.$filter1.'",
filter2 ="'.$filter2.'",
filter3 ="'.$filter3.'",
email="'.$email.'",
deactivated="'.$deactivated.'",
lastmodified="'.$lastmodified.'"
WHERE
idnewsrcp = "'.$newsrcpid.'"';
$db->query($sql);
$notification->displayNotification("info", i18n("Changes saved"));
}
$tpl->reset();
if ($action != "recipients_createrecipient"){
$sql = "SELECT idnewsrcp, name, firstname, titel, anrede, company,
address, postcode, city, land, fon, fax, filter1, filter2,
filter3, email, deactivated, created, lastmodified, author
FROM
".$cfg["tab"]["news_rcp"]."
WHERE
idnewsrcp = '".$newsrcpid."'";
$db->query($sql);
$db->next_record();
$action_str = "recipients_editrecipient" ;
$zusatz = "";
$formname = "newsrcp_edit";
}
else{
$sql = "SELECT max(idnewsrcp) as oldidnewsrcp FROM ".$cfg["tab"]["news_rcp"];
$db->query($sql);
$db->next_record();
$oldidnewsrcp = $db->f("oldidnewsrcp") ;
$newsrcpid =$oldidnewsrcp + 1;
//print "x".$newsrcpid;
$action_str = "recipients_createrecipient" ;
$zusatz = '<input type="hidden" name="final" value="1"> ';
$formname = "newsrcp_create";
}
$form = '<form name="newsrcp_edit" method="post" action="'.$sess->url("main.php?").'">
'.$sess->hidden_session().'
<input type="hidden" name="area" value="'.$area.'">
<input type="hidden" name="action" value="'.$action_str.'">
<input type="hidden" name="frame" value="'.$frame.'">
<input type="hidden" name="newsrcpid" value="'.$newsrcpid.'">
<input type="hidden" name="idlang" value="'.$lang.'">';
$form .= $zusatz;
$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&newsrcpid=$newsrcpid"));
$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("E-Mail"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateField ("text", "email", $db->f("email"), 40, 255));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Deactivated"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateCheckbox ("deactivated", "deactivated", $db->f("deactivated")));
$tpl->next();
$textfields = array("","titel","anrede","name", "firstname","company", "address", "postcode",
"city", "land", "fon", "fax", "filter1", "filter2", "filter3");
$textfields_label = array("","Titel","Anrede","Name", "Vorname", "Firma", "Anschrift", "PLZ",
"Ort", "Land", "Telefon", "Telefax", "Merkmal 1", "Merkmal 2", "Merkmal 3");
for($t=1;$t<count($textfields); $t++){
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', $textfields_label[$t]);
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', formGenerateField ("text", $textfields[$t], $db->f( $textfields[$t]), 40, 255));
$tpl->next();
}
if ($action != "recipients_createrecipient")
{
$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("created"));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Changed"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_dark"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD', $db->f("lastmodified"));
$tpl->next();
$tpl->set('d', 'CLASS', 'text_medium');
$tpl->set('d', 'CATNAME', i18n("Author"));
$tpl->set('d', 'BGCOLOR', $cfg["color"]["table_light"]);
$tpl->set('d', "BORDERCOLOR", $cfg["color"]["table_border"]);
$tpl->set('d', 'CATFIELD',
$userclass->getUsername($db->f("author")).
" (".
$userclass->getRealname($db->f("author")).
")");
$tpl->next();
}
# Generate template
$tpl->generate($cfg['path']['templates'] . $cfg['templates']['recipient_edit']);
}
}
?>
... include.newsletter_send.php
Code: Alles auswählen
<?
/******************************************
* File : include.newsletter_send.php
* Project : Contenido
* Descr : Newsletter Send Function
*
* Author : Ines Müller auf Grundlage des Scripts
* von Timo A. Hummel
*
* last Modified : Jan.2005
*
*****************************************/
function dropdown($fname,$values,$selected_item,$class="Dropdown",$lables){
print "<select name='$fname' class='$class'>\n";
for ($i=0;$i< count($lables);$i++){
if ($values[$i] == $selected_item){
$selected_str="selected";
}
else {
$selected_str="";
}
print "<option value='$values[$i]' $selected_str>$lables[$i]</option>\n";
}
print "</select>\n";
}
function input_button($fname="submit", $value="ok",$class="Input_Button") {
print "<input name='$fname' type='submit' value='$value' class='$class'>\n";
}
//Filter evt. ergänzen oder streichen (Felder aus Tabelle [pre]_news_rcp)
$filters = array("","filter1", "filter2", "filter3","anrede","city");
if(!$perm->have_perm_area_action($area))
{
$notification->displayNotification("error", i18n("Permission denied"));
} else {
if ( !isset($newsid))
{
} else {
//$askforpermission - neu eingeführter Parameter
//sorgt dafür, daß der Newsletter nicht gleich versendet
//wird, sondern erst einmal die Anzahl der Empfänger
//ermittelt wird.
//
if (isset($newssend) or isset($askforpermission)) {
$sql1 = "SELECT * FROM ".$cfg["tab"]["news"] ." WHERE idnews='$newsid'";
$db->query($sql1);
$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];
//Empfänger-Filter wird gebildet
$where_str = "" ;
for($f=1;$f<count($filters);$f++){
if ( trim($_POST[$filters[$f]]) != ""){
$where_str .= " and ".$filters[$f]." = '".$_POST[$filters[$f]]."'" ;
if(isset($askforpermission)){
$hidden_fields_str .= "<input type='hidden' name='".$filters[$f]."' value='".$_POST[$filters[$f]]."'>\n";
}
}
}
if (!isset($sql2)){
$sql2 = "SELECT DISTINCT email, firstname, name, anrede FROM ". $cfg["tab"]["news_rcp"] ." WHERE deactivated=0 AND idclient='$client' ". $where_str;
}
//SQL-String zur Kontrolle noch mal anzeigen
print "<font size='2'>Filter:<br> ".$sql2."<br><br>";
$db->query($sql2);
$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);
//$path = $c
$sql = "SELECT
idclient,
frontendpath,
htmlpath,
errsite_cat,
errsite_art
FROM
".$cfg["tab"]["clients"] ." WHERE idclient='$client'";
if (isset($askforpermission)){
print "Zahl der ermittelten Empfänger <b>".$number;
print "\n</b></font><br><br><form method='post' action='' >\n";
print $hidden_fields_str;
input_button("newssend","Newsletter abschicken","Input_Button");
print " ";
input_button("break","Filter neu setzen","Input_Button");
print "</form>";
}
//Newsletter senden
if (!isset($askforpermission)){
$db2 = new DB_Contenido;
$db2->query($sql);
$db2->next_record();
$path = $db2->f("htmlpath"). "news.php?";
while ($db->next_record()) {
$to = $db->f("email");
$firstname = $db->f("firstname");
$name = $db->f("name");
$fullname = $firstname." ".$name;
if (trim($fullname) != ""){
if ($db->f("anrede") != "Auswahl" and trim($db->f("anrede")) != ""){
$anrede_str = $db->f("anrede")." ".$fullname;
}
else{
$anrede_str = $fullname;
}
}
else {
if ($db->f("anrede") == "Frau"){
$anrede_str = "liebe Kundin";
}
elseif($db->f("anrede") == "Herr"){
$anrede_str = "lieber Kunde";
}
else{
$anrede_str = "liebe Kunden";
}
}
$message2 = str_replace("MAIL_NAME", "$anrede_str", $message);
$message3 = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".md5($to), $message2);
$message4 = str_replace("MAIL_STOP", $path."stop=".md5($to), $message3);
$message5 = str_replace("MAIL_GOON", $path."goon=".md5($to), $message4);
if (!mail("$to", "$subject", "$message5\n\n$foot", 'From: '.$from."\n"."X-Mailer: Contenido [PHP/" . phpversion()."\nContent-Type:text/html; charset=iso-8859-1\n")) {
$notsend .= $lngNews["mailcouldnotbesend1"].$to.$lngNews["mailcouldnotbesend2"] . "<br>";
} else {
$i = $i +1;
//print $to."<br>";
}
}
$notification->displayNotification("info", $notsend . sprintf(i18n("Newsletter was sent to %s recipient(s)"), $i)."<br>");
} //end if not askforpermission
}
else{
//Empfänger-Merkmale als Dropdowns anzeigen. Hier kann nun ausgewählt werden,
//an welche Empfänger-Gruppe ein Newsletter geschickt werden soll. Die Filter wirken
//additiv
$notification->displayNotification("info", "Bitte auswählen, an wen der Newsletter verschickt werden soll. Filter wirken additiv");
print "<form method='post' action='' >";
for($f=1;$f<count($filters);$f++){
$sql = "SELECT DISTINCT ".$filters[$f]." FROM ".$cfg["tab"]["news_rcp"] ;
$db->query($sql);
$labels[0] = " ";
$values[0] = "";
while ($db->next_record()) {
if (trim($db->f($filters[$f]))<> ""){
$values[] = $db->f($filters[$f]);
$labels[] = $db->f($filters[$f]);
}
}
print $filters[$f]." ";
dropdown($filters[$f],$values,"","Dropdown",$labels);
print "<br><br>";
$values= "";
$labels = "";
}
input_button("askforpermission","Empfänger ermitteln","Input_Button");
print "</form>";
}
}
}
?>