';
-/*
- * Dernières actions commerciales effectuées
- *
- */
+// Affiche stats de tous les modules de destinataires mailings
+print '';
+print '| '.$langs->trans("TargetsStatistics").' | ';
-$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 '';
- print '| '.$langs->trans("Statistics").' | ';
- $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 '| '.$obj->label.' | '.$obj->nb.' | ';
+ $i++;
+ }
+
+ $db->free();
+ }
+ else
+ {
+ dolibarr_print_error($db);
+ }
+ }
+
+ print ' | ';
+ }
}
-
- $var = true;
- print "".'| '.$langs->trans("Customers").' | '.($st[1]?$st[1]:"0")." | ";
- $var=!$var;
- print "".'| '.$langs->trans("Prospects").' | '.($st[2]?$st[2]:"0")." | ";
-
- print " ";
-
- $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);
}
}
|