From 8bda5c7e7ddb02bc2fc6795fa478c29a3cc6a12e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 12 Feb 2005 17:41:13 +0000 Subject: [PATCH] =?UTF-8?q?New:=20Gros=20avancements=20sur=20l'outil=20de?= =?UTF-8?q?=20mailing.=20Il=20est=20possible=20maintenant=20de=20cr=E9er?= =?UTF-8?q?=20un=20mailing,=20le=20supprimer,=20editer,=20valider=20et=20d?= =?UTF-8?q?e=20choisir=20les=20destinataires=20parmi=20des=20listes=20pr?= =?UTF-8?q?=E9d=E9finis=20dans=20des=20modules.=20Qual:=20Les=20modules=20?= =?UTF-8?q?poire=20et=20cerise=20de=20s=E9lection=20de=20destinataire=20on?= =?UTF-8?q?t=20=E9t=E9=20revue=20pour=20respoecter=20la=20norme=20objet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/comm/mailing/cibles.php | 52 +++++-- htdocs/comm/mailing/index.php | 92 +++++++----- htdocs/comm/mailing/mailing.class.php | 2 +- .../modules/mailings/cerise.modules.php | 104 +++---------- .../modules/mailings/modules_mailings.php | 139 +++++++++++++++++- .../modules/mailings/poire.modules.php | 101 +++---------- 6 files changed, 277 insertions(+), 213 deletions(-) diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 283a86fa9fc..7cb2382b902 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -53,6 +53,19 @@ if ($_GET["action"] == 'add') Header("Location: cibles.php?id=".$_GET["rowid"]); } +if ($_GET["action"] == 'clear') +{ + // Chargement de la classe + $file = $dir."/modules_mailings.php"; + $classname = "MailingTargets"; + require_once($file); + + $obj = new $classname($db); + $obj->clear_target($_GET["rowid"]); + + Header("Location: cibles.php?id=".$_GET["rowid"]); +} + /* @@ -90,15 +103,22 @@ if ($mil->fetch($_GET["id"]) == 0) print ''.$langs->trans("MailTitle").''.$mil->titre.''; print ''.$langs->trans("MailFrom").''.htmlentities($mil->email_from).''; print ''.$langs->trans("TotalNbOfDistinctRecipients").''.($mil->nbemail?$mil->nbemail:''.$langs->trans("NoTargetYet").'').''; + print ''.$langs->trans("Status").''.$mil->statuts[$mil->statut].''; print '
'; - // Ajout d'une liste de sélection + print ""; + + + // Affiche les listes de sélection print ''; print ''; print ''; - //print ''; print ''; - print ''; + print ''; print "\n"; clearstatcache(); @@ -110,8 +130,8 @@ if ($mil->fetch($_GET["id"]) == 0) { if (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') { - $var = !$var; if (eregi("(.*)\.(.*)\.(.*)",$file,$reg)) { + $var = !$var; $modulename=$reg[1]; // Chargement de la classe @@ -132,18 +152,32 @@ if ($mil->fetch($_GET["id"]) == 0) print ""; */ print ''; - print ''; + + print ''; } print "\n"; } } closedir($handle); + + if ($mil->statut == 0) { + print ''; + print ''; + print ''; + } print '
'.$langs->trans("RecipientSelectionModules").''.$langs->trans("Name").''.$langs->trans("NbOfRecipients").' '; + if ($mil->statut == 0) { + print $langs->trans("Actions"); + } + print '
'.$obj->getNbOfRecipients().''.img_edit_add($langs->trans("AddRecipients")).''; + if ($mil->statut == 0) { + print '
'; + } + else { + //print $langs->trans("MailNoChangePossible"); + print " "; + } + print '
  

'; - - - print ""; - + + + // Liste des destinataires électionnés $NBMAX=100; $sql = "SELECT mc.nom, mc.prenom, mc.email"; diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php index 5eb5d389de9..4f6f2324052 100644 --- a/htdocs/comm/mailing/index.php +++ b/htdocs/comm/mailing/index.php @@ -44,60 +44,76 @@ llxHeader('','Mailing'); */ print_titre($langs->trans("MailingArea")); +print '
'; -print ''; +print '
'; print '
'; -/* - * Dernières actions commerciales effectuées - * - */ +// Affiche stats de tous les modules de destinataires mailings +print ''; +print ''; -$sql = "SELECT count(*), client"; -$sql .= " FROM ".MAIN_DB_PREFIX."societe"; -$sql .= " WHERE client in (1,2)"; -$sql .= " GROUP BY client"; +$dir=DOL_DOCUMENT_ROOT."/includes/modules/mailings"; +$handle=opendir($dir); - - -if ( $db->query($sql) ) +$var=True; +while (($file = readdir($handle))!==false) { - $num = $db->num_rows(); - - print '
'.$langs->trans("TargetsStatistics").'
'; - print ''; - $i = 0; - - while ($i < $num ) + if (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') { - $row = $db->fetch_row(); - - $st[$row[1]] = $row[0]; + if (eregi("(.*)\.(.*)\.(.*)",$file,$reg)) { + $var = !$var; - $i++; + $modulename=$reg[1]; + + // Chargement de la classe + $file = $dir."/".$modulename.".modules.php"; + $classname = "mailing_".$modulename; + require_once($file); + $obj = new $classname($db); + + foreach ($obj->statssql as $sql) + { + print ''; + + $result=$db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + + $i = 0; + + while ($i < $num ) + { + $obj = $db->fetch_object($result); + print ''; + } } - - $var = true; - print "".'"; - $var=!$var; - print "".'"; - - print "
'.$langs->trans("Statistics").'
'.$obj->label.''.$obj->nb.''; + $i++; + } + + $db->free(); + } + else + { + dolibarr_print_error($db); + } + } + + print '
'.$langs->trans("Customers").''.($st[1]?$st[1]:"0")."
'.$langs->trans("Prospects").''.($st[2]?$st[2]:"0")."

"; - - $db->free(); -} -else -{ - dolibarr_print_error($db); } +closedir($handle); + + + +print "

"; print ''; /* - * - * + * Liste des derniers mailings */ $sql = "SELECT m.rowid, m.titre, m.nbemail, m.statut"; diff --git a/htdocs/comm/mailing/mailing.class.php b/htdocs/comm/mailing/mailing.class.php index c481a33480d..41af629e8c4 100644 --- a/htdocs/comm/mailing/mailing.class.php +++ b/htdocs/comm/mailing/mailing.class.php @@ -258,7 +258,7 @@ class Mailing $this->db->query($sql); return 1; } - + } ?> diff --git a/htdocs/includes/modules/mailings/cerise.modules.php b/htdocs/includes/modules/mailings/cerise.modules.php index 56b0e7f8aeb..7d02862f012 100644 --- a/htdocs/includes/modules/mailings/cerise.modules.php +++ b/htdocs/includes/modules/mailings/cerise.modules.php @@ -1,5 +1,6 @@ + * Copyright (C) 2005 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,17 +51,29 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php' class mailing_cerise extends MailingTargets { - var $name="ContactProspects"; - var $desc='Tous les contacts associés aux prospects'; - var $require_module=array("prospet"); - + var $name="ContactProspects"; // Identifiant du module mailing + var $desc='Tous les contacts associés aux prospects'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée + var $require_module=array("commercial"); // Module mailing actif si modules require_module actifs + + var $db; + var $statssql=array(); + + function mailing_cerise($DB) { + global $langs; + $langs->load("commercial"); + $this->db=$DB; + + // Liste des tableaux des stats espace mailing + $this->statssql[0]="SELECT '".$langs->trans("Prospects")."' label, count(*) nb FROM ".MAIN_DB_PREFIX."societe WHERE client = 2"; + $this->statssql[1]="SELECT '".$langs->trans("NbOfProspectsContacts")."' label, count(distinct(c.email)) nb FROM ".MAIN_DB_PREFIX."socpeople as c, ".MAIN_DB_PREFIX."societe as s WHERE s.idp = c.fk_soc AND s.client = 2 AND c.email IS NOT NULL"; } function getNbOfRecipients() { + // La requete doit retourner: nb $sql = "SELECT count(distinct(c.email)) nb"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as c"; $sql .= ", ".MAIN_DB_PREFIX."societe as s"; @@ -68,94 +81,21 @@ class mailing_cerise extends MailingTargets $sql .= " AND s.client = 2"; $sql .= " AND c.email IS NOT NULL"; - if ( $this->db->query($sql) ) - { - $obj = $this->db->fetch_object(); - return $obj->nb; - } - return 0; + return parent::getNbOfRecipients($sql); } function add_to_target($mailing_id) { - $cibles = array(); - - $sql = "SELECT distinct(c.email), c.idp, c.name, c.firstname, s.nom "; + // La requete doit retourner: email, fk_contact, name, firstname + $sql = "SELECT c.email email, c.idp fk_contact, c.name name, c.firstname firstname"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as c"; $sql .= ", ".MAIN_DB_PREFIX."societe as s"; $sql .= " WHERE s.idp = c.fk_soc"; $sql .= " AND s.client = 2"; $sql .= " AND c.email IS NOT NULL"; - $sql .= " ORDER BY c.email ASC"; - - if ( $this->db->query($sql) ) - { - $num = $this->db->num_rows(); - $i = 0; - $j = 0; - - dolibarr_syslog("mailing-prepare: mailing $num cibles trouvées"); - - $olde = ''; - - while ($i < $num) - { - $row = $this->db->fetch_row(); - - if ($olde <> $row[0]) - { - $cibles[$j] = $row; - $olde = $row[0]; - $j++; - } - - $i++; - } - } - else - { - dolibarr_syslog($this->db->error()); - } - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles"; - $sql .= " WHERE fk_mailing = ".$mailing_id; - - if (!$this->db->query($sql)) - { - dolibarr_syslog($this->db->error()); - } - - $num = sizeof($cibles); - - for ($i = 0 ; $i < $num ; $i++) - { - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."mailing_cibles"; - $sql .= " (fk_mailing, fk_contact, nom, prenom, email)"; - $sql .= " VALUES (".$mailing_id.","; - $sql .= $cibles[$i][1] .","; - $sql .= "'".$cibles[$i][2] ."',"; - $sql .= "'".$cibles[$i][3] ."',"; - $sql .= "'".$cibles[$i][0] ."')"; - - if (!$this->db->query($sql)) - { - dolibarr_syslog($this->db->error()); - } - } - - dolibarr_syslog("mailing-prepare: mailing $i cibles ajoutées"); - - $sql = "UPDATE ".MAIN_DB_PREFIX."mailing"; - $sql .= " SET nbemail = ".$i." WHERE rowid = ".$mailing_id; - - if (!$this->db->query($sql)) - { - dolibarr_syslog($this->db->error()); - } - - return 0; + $sql .= " ORDER BY c.email"; + return parent::add_to_target($mailing_id, $sql); } } diff --git a/htdocs/includes/modules/mailings/modules_mailings.php b/htdocs/includes/modules/mailings/modules_mailings.php index e72e499f914..25d39872cfc 100644 --- a/htdocs/includes/modules/mailings/modules_mailings.php +++ b/htdocs/includes/modules/mailings/modules_mailings.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004 Laurent Destailleur + * Copyright (C) 2004-2005 Laurent Destailleur * Copyright (C) 2004 Eric Seigne * * This program is free software; you can redistribute it and/or modify @@ -36,8 +36,14 @@ class MailingTargets { + var $db=''; var $error=''; + function MailingTargets($DB) + { + $this->db=$DB; + } + /** \brief Renvoi un exemple de numérotation * \return string Retourne la traduction de la clé MailingModuleDescXXX ou XXX nom du module, ou $this->desc si non trouvé */ @@ -57,6 +63,137 @@ class MailingTargets { return 0; } + + /** + * \brief Retourne nombre de destinataires + * \param sql Requete sql de comptage + * \return int Nb de destinataires + */ + function getNbOfRecipients($sql) + { + $result=$this->db->query($sql); + if ($result) + { + $obj = $this->db->fetch_object($result); + return $obj->nb; + } + return 0; + } + + /** + * \brief Met a jour nombre de destinataires + * \param mailing_id Id du mailing concerné + * \return int < 0 si erreur, nb destinataires si ok + */ + function update_nb($mailing_id) + { + // Mise a jour nombre de destinataire dans table des mailings + $sql = "SELECT COUNT(*) nb FROM ".MAIN_DB_PREFIX."mailing_cibles"; + $sql .= " WHERE fk_mailing = ".$mailing_id; + $result=$this->db->query($sql); + if ($result) + { + $obj=$this->db->fetch_object($result); + $nb=$obj->nb; + + $sql = "UPDATE ".MAIN_DB_PREFIX."mailing"; + $sql .= " SET nbemail = ".$nb." WHERE rowid = ".$mailing_id; + if (!$this->db->query($sql)) + { + dolibarr_syslog($this->db->error()); + return -1; + } + } + else { + return -1; + } + return $nb; + } + + /** + * \brief Ajoute destinataires dans table des cibles + * \param mailing_id Id du mailing concerné + * \param sql Requete sql de selection des destinataires + * \return int < 0 si erreur, nb ajout si ok + */ + function add_to_target($mailing_id, $sql) + { + $cibles = array(); + + // Stocke destinataires dans cibles + $result=$this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $i = 0; + $j = 0; + + dolibarr_syslog("mailing-prepare: mailing $num cibles trouvées"); + + $old = ''; + while ($i < $num) + { + $obj = $this->db->fetch_object($result); + if ($old <> $obj->email) + { + $cibles[$j] = array($obj->email,$obj->fk_contact,$obj->name,$obj->firstname); + $old = $obj->email; + $j++; + } + + $i++; + } + } + else + { + dolibarr_syslog($this->db->error()); + return -1; + } + + // Insère destinataires de cibles dans table + $num = sizeof($cibles); + for ($i = 0 ; $i < $num ; $i++) + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."mailing_cibles"; + $sql .= " (fk_mailing, "; + if ($cibles[$i][1]) $sql .= "fk_contact, "; + $sql .= "nom, prenom, email)"; + $sql .= " VALUES (".$mailing_id.","; + if ($cibles[$i][1]) $sql .= $cibles[$i][1] .","; + $sql .= "'".$cibles[$i][2] ."',"; + $sql .= "'".$cibles[$i][3] ."',"; + $sql .= "'".$cibles[$i][0] ."')"; + if (!$this->db->query($sql)) + { + dolibarr_syslog($this->db->error()); + return -1; + } + } + + dolibarr_syslog("mailing-prepare: mailing $num cibles ajoutées"); + + $this->update_nb($mailing_id); + + return $num; + } + + /** + * \brief Supprime tous les destinataires de la table des cibles + * \param mailing_id Id du mailing concerné + */ + function clear_target($mailing_id) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles"; + $sql .= " WHERE fk_mailing = ".$mailing_id; + + if (! $this->db->query($sql)) + { + dolibarr_syslog($this->db->error()); + } + + $this->update_nb($mailing_id); + } + } ?> diff --git a/htdocs/includes/modules/mailings/poire.modules.php b/htdocs/includes/modules/mailings/poire.modules.php index 22bf2b0cb78..97dfa4ce1ec 100644 --- a/htdocs/includes/modules/mailings/poire.modules.php +++ b/htdocs/includes/modules/mailings/poire.modules.php @@ -50,19 +50,29 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php' class mailing_poire extends MailingTargets { - var $name='ContactCustomers'; - var $desc='Tous les contacts associés aux clients'; - var $require_module=array("customer"); + var $name='ContactCustomers'; // Identifiant du module mailing + var $desc='Tous les contacts associés aux clients'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée + var $require_module=array("commercial"); // Module mailing actif si modules require_module actifs var $db; + var $statssql=array(); + function mailing_poire($DB) { + global $langs; + $langs->load("commercial"); + $this->db=$DB; + + // Liste des tableaux des stats espace mailing + $this->statssql[0]="SELECT '".$langs->trans("Customers")."' label, count(*) nb FROM ".MAIN_DB_PREFIX."societe WHERE client = 1"; + $this->statssql[1]="SELECT '".$langs->trans("NbOfCustomersContacts")."' label, count(distinct(c.email)) nb FROM ".MAIN_DB_PREFIX."socpeople as c, ".MAIN_DB_PREFIX."societe as s WHERE s.idp = c.fk_soc AND s.client = 1 AND c.email IS NOT NULL"; } function getNbOfRecipients() { + // La requete doit retourner: nb $sql = "SELECT count(distinct(c.email)) nb"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as c"; $sql .= ", ".MAIN_DB_PREFIX."societe as s"; @@ -70,94 +80,21 @@ class mailing_poire extends MailingTargets $sql .= " AND s.client = 1"; $sql .= " AND c.email IS NOT NULL"; - if ( $this->db->query($sql) ) - { - $obj = $this->db->fetch_object(); - return $obj->nb; - } - return 0; + return parent::getNbOfRecipients($sql); } function add_to_target($mailing_id) { - $cibles = array(); - - $sql = "SELECT distinct(c.email), c.idp, c.name, c.firstname, s.nom "; + // La requete doit retourner: email, fk_contact, name, firstname + $sql = "SELECT c.email email, c.idp fk_contact, c.name name, c.firstname firstname"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as c"; $sql .= ", ".MAIN_DB_PREFIX."societe as s"; $sql .= " WHERE s.idp = c.fk_soc"; $sql .= " AND s.client = 1"; $sql .= " AND c.email IS NOT NULL"; - $sql .= " ORDER BY c.email ASC"; - - if ( $this->db->query($sql) ) - { - $num = $this->db->num_rows(); - $i = 0; - $j = 0; - - dolibarr_syslog("mailing-prepare: mailing $num cibles trouvées"); - - $olde = ''; - - while ($i < $num) - { - $row = $this->db->fetch_row(); - - if ($olde <> $row[0]) - { - $cibles[$j] = $row; - $olde = $row[0]; - $j++; - } - - $i++; - } - } - else - { - dolibarr_syslog($this->db->error()); - } - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles"; - $sql .= " WHERE fk_mailing = ".$mailing_id; - - if (!$this->db->query($sql)) - { - dolibarr_syslog($this->db->error()); - } - - $num = sizeof($cibles); - - for ($i = 0 ; $i < $num ; $i++) - { - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."mailing_cibles"; - $sql .= " (fk_mailing, fk_contact, nom, prenom, email)"; - $sql .= " VALUES (".$mailing_id.","; - $sql .= $cibles[$i][1] .","; - $sql .= "'".$cibles[$i][2] ."',"; - $sql .= "'".$cibles[$i][3] ."',"; - $sql .= "'".$cibles[$i][0] ."')"; - - if (!$this->db->query($sql)) - { - dolibarr_syslog($this->db->error()); - } - } - - dolibarr_syslog("mailing-prepare: mailing $i cibles ajoutées"); - - $sql = "UPDATE ".MAIN_DB_PREFIX."mailing"; - $sql .= " SET nbemail = ".$i." WHERE rowid = ".$mailing_id; - - if (!$this->db->query($sql)) - { - dolibarr_syslog($this->db->error()); - } - - return 0; - + $sql .= " ORDER BY c.email"; + + return parent::add_to_target($mailing_id, $sql); } }