Newsletter an Empfängergruppen schicken

Gesperrt
imu
Beiträge: 26
Registriert: Fr 24. Dez 2004, 22:06
Kontaktdaten:

Newsletter an Empfängergruppen schicken

Beitrag von imu »

Da ich hier im Forum nichts dazu gefunden habe (für die Version 4.4.4) stelle ich hier mal eine kleine Erweiterung zum Newsletter-Versand vor.
(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 "&nbsp;&nbsp;";
         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]."&nbsp;&nbsp;";
   	dropdown($filters[$f],$values,"","Dropdown",$labels);
   	print "<br><br>";
   	$values= "";
   	$labels = "";
   }


   input_button("askforpermission","Empfänger ermitteln","Input_Button");
   print "</form>";
}
}
}
?>
nicht besonders schick, aber es tuts.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Habe einen Hinweis ergänzt.
(Die warscheinlich in der Version 4.5 dann nicht mehr nötig sein wird ...?)
Yep.

Link zur Newsletter-Überarbeitung für V4.5.x: hier

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Gesperrt