Amélioration de la gestion des destinataires de mailing.

Les modules qui proposent des cibles peuvent offrir des variantes.
Ajout d'un lien sur la fiche du destinataire.
This commit is contained in:
Laurent Destailleur 2005-09-15 22:44:29 +00:00
parent e7ca38a3ea
commit 9ff2a4c377
14 changed files with 224 additions and 176 deletions

View File

@ -68,12 +68,16 @@ if ($_GET["action"] == 'add')
$classname = "mailing_".$modulename; $classname = "mailing_".$modulename;
require_once($file); require_once($file);
$filtersarray=array();
if (isset($_POST["filter"])) $filtersarray[0]=$_POST["filter"];
$obj = new $classname($db); $obj = new $classname($db);
$result=$obj->add_to_target($_GET["rowid"]); $result=$obj->add_to_target($_GET["rowid"],$filtersarray);
if ($result > 0) if ($result > 0)
{ {
Header("Location: cibles.php?id=".$_GET["rowid"]); Header("Location: cibles.php?id=".$_GET["rowid"]);
exit;
} }
if ($result == 0) if ($result == 0)
{ {
@ -164,11 +168,13 @@ if ($mil->fetch($_GET["id"]) == 0)
if ($mesg) print "$mesg<br>\n"; if ($mesg) print "$mesg<br>\n";
// Affiche les listes de sélection // Affiche les listes de sélection
if ($mil->statut == 0) { if ($mil->statut == 0)
{
print '<table class="noborder" width=\"100%\">'; print '<table class="noborder" width=\"100%\">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td>'.$langs->trans("RecipientSelectionModules").'</td>'; print '<td>'.$langs->trans("RecipientSelectionModules").'</td>';
print '<td align="center">'.$langs->trans("NbOfUniqueEMails").'</td>'; print '<td align="center">'.$langs->trans("NbOfUniqueEMails").'</td>';
print '<td align="center">'.$langs->trans("Parameters").'</td>';
print '<td align="center" width="120">'; print '<td align="center" width="120">';
if ($mil->statut == 0) { if ($mil->statut == 0) {
print $langs->trans("Actions"); print $langs->trans("Actions");
@ -212,6 +218,8 @@ if ($mil->fetch($_GET["id"]) == 0)
$var = !$var; $var = !$var;
print '<tr '.$bc[$var].'>'; print '<tr '.$bc[$var].'>';
if ($mil->statut == 0) print '<form action="cibles.php?action=add&rowid='.$mil->id.'&module='.$modulename.'" method="POST">';
print '<td>'; print '<td>';
print img_object('',$obj->picto).' '.$obj->getDesc(); print img_object('',$obj->picto).' '.$obj->getDesc();
print '</td>'; print '</td>';
@ -221,12 +229,16 @@ if ($mil->fetch($_GET["id"]) == 0)
print $modulename; print $modulename;
print "</td>"; print "</td>";
*/ */
print '<td align="center">'.$obj->getNbOfRecipients().'</td>'; print '<td align="center">'.($obj->getNbOfRecipients()).'</td>';
print '<td align="center">';
print $obj->formFilter();
print '</td>';
print '<td align="center">'; print '<td align="center">';
if ($mil->statut == 0) if ($mil->statut == 0)
{ {
print '<form action="cibles.php?action=add&rowid='.$mil->id.'&module='.$modulename.'" method="POST"><input type="submit" class="button" value="'.$langs->trans("Add").'"></form>'; print '<input type="submit" class="button" value="'.$langs->trans("Add").'">';
} }
else else
{ {
@ -235,6 +247,8 @@ if ($mil->fetch($_GET["id"]) == 0)
} }
print '</td>'; print '</td>';
if ($mil->statut == 0) print '</form>';
print "</tr>\n"; print "</tr>\n";
} }
} }
@ -244,7 +258,7 @@ if ($mil->fetch($_GET["id"]) == 0)
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'>'; print '<tr '.$bc[$var].'>';
print '<td>&nbsp;</td><td>&nbsp;</td><td align="center"><form action="cibles.php?action=clear&rowid='.$mil->id.'" method="POST"><input type="submit" class="button" value="'.$langs->trans("TargetsReset").'"></form></td>'; print '<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td align="center"><form action="cibles.php?action=clear&rowid='.$mil->id.'" method="POST"><input type="submit" class="button" value="'.$langs->trans("TargetsReset").'"></form></td>';
print '</tr>'; print '</tr>';
print '</table><br>'; print '</table><br>';
@ -252,7 +266,7 @@ if ($mil->fetch($_GET["id"]) == 0)
// Liste des destinataires sélectionnés // Liste des destinataires sélectionnés
$sql = "SELECT mc.rowid, mc.nom, mc.prenom, mc.email, mc.statut, mc.date_envoi"; $sql = "SELECT mc.rowid, mc.nom, mc.prenom, mc.email, mc.statut, mc.date_envoi, mc.url";
$sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc"; $sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
$sql .= " WHERE mc.fk_mailing=".$mil->id; $sql .= " WHERE mc.fk_mailing=".$mil->id;
if ($sortfield) { $sql .= " ORDER BY $sortfield $sortorder"; } if ($sortfield) { $sql .= " ORDER BY $sortfield $sortorder"; }
@ -271,6 +285,7 @@ if ($mil->fetch($_GET["id"]) == 0)
print_liste_field_titre($langs->trans("Lastname"),"cibles.php","mc.nom",$addu,"","",$sortfield); print_liste_field_titre($langs->trans("Lastname"),"cibles.php","mc.nom",$addu,"","",$sortfield);
print_liste_field_titre($langs->trans("Firstname"),"cibles.php","mc.prenom",$addu,"","",$sortfield); print_liste_field_titre($langs->trans("Firstname"),"cibles.php","mc.prenom",$addu,"","",$sortfield);
print_liste_field_titre($langs->trans("EMail"),"cibles.php","mc.email",$addu,"","",$sortfield); print_liste_field_titre($langs->trans("EMail"),"cibles.php","mc.email",$addu,"","",$sortfield);
print '<td align="center">&nbsp;</td>';
print '<td align="center">'.$langs->trans("Status").'</td>'; print '<td align="center">'.$langs->trans("Status").'</td>';
if ($mil->statut == 0) if ($mil->statut == 0)
{ {
@ -284,7 +299,7 @@ if ($mil->fetch($_GET["id"]) == 0)
$var = true; $var = true;
$i = 0; $i = 0;
while ($i < $num ) while ($i < $num)
{ {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
$var=!$var; $var=!$var;
@ -293,6 +308,7 @@ if ($mil->fetch($_GET["id"]) == 0)
print '<td>'.stripslashes($obj->nom).'</td>'; print '<td>'.stripslashes($obj->nom).'</td>';
print '<td>'.stripslashes($obj->prenom).'</td>'; print '<td>'.stripslashes($obj->prenom).'</td>';
print '<td>'.$obj->email.'</td>'; print '<td>'.$obj->email.'</td>';
print '<td>'.$obj->url.'</td>';
if ($mil->statut == 0) if ($mil->statut == 0)
{ {
print '<td align="center">'.$langs->trans("MailingStatusNotSent").'</td>'; print '<td align="center">'.$langs->trans("MailingStatusNotSent").'</td>';

View File

@ -99,22 +99,30 @@ if ($_POST["action"] == 'send')
// Action ajout mailing // Action ajout mailing
if ($_POST["action"] == 'add') if ($_POST["action"] == 'add')
{ {
$message='';
$mil = new Mailing($db); $mil = new Mailing($db);
$mil->email_from = $_POST["from"]; $mil->email_from = trim($_POST["from"]);
$mil->titre = $_POST["titre"]; $mil->titre = trim($_POST["titre"]);
$mil->sujet = $_POST["sujet"]; $mil->sujet = trim($_POST["sujet"]);
$mil->body = $_POST["body"]; $mil->body = trim($_POST["body"]);
if (! $mil->titre) $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTitle"));
if (! $mil->sujet) $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTopic"));
if (! $message)
{
if ($mil->create($user) >= 0) if ($mil->create($user) >= 0)
{ {
Header("Location: fiche.php?id=".$mil->id); Header("Location: fiche.php?id=".$mil->id);
exit;
} }
else $message=$mil->error;
{ }
$message='<div class="error">'.$mil->error.'</div>';
$message='<div class="error">'.$message.'</div>';
$_GET["action"]="create"; $_GET["action"]="create";
}
} }
// Action mise a jour mailing // Action mise a jour mailing
@ -229,7 +237,13 @@ if ($_GET["action"] == 'create')
print '<tr><td width="25%">'.$langs->trans("MailFrom").'</td><td><input class="flat" name="from" size="40" value="'.$conf->mailing->email_from.'"></td></tr>'; print '<tr><td width="25%">'.$langs->trans("MailFrom").'</td><td><input class="flat" name="from" size="40" value="'.$conf->mailing->email_from.'"></td></tr>';
print '<tr><td width="25%">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value=""></td></tr>'; print '<tr><td width="25%">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value=""></td></tr>';
print '<tr><td width="25%">'.$langs->trans("MailTopic").'</td><td><input class="flat" name="sujet" size="60" value=""></td></tr>'; print '<tr><td width="25%">'.$langs->trans("MailTopic").'</td><td><input class="flat" name="sujet" size="60" value=""></td></tr>';
print '<tr><td width="25%" valign="top">'.$langs->trans("MailMessage").'</td><td><textarea cols="70" rows="10" name="body"></textarea></td></tr>'; print '<tr><td width="25%" valign="top">'.$langs->trans("MailMessage").'<br>';
print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>';
print '__EMAIL__ = '.$langs->trans("EMail").'<br>';
print '__LASTNAME__ = '.$langs->trans("Lastname").'<br>';
print '__FIRSTNAME__ = '.$langs->trans("Firstname").'<br>';
print '</td>';
print '<td><textarea cols="70" rows="10" name="body"></textarea></td></tr>';
print '<tr><td colspan="2" align="center"><input type="submit" class="button" value="'.$langs->trans("CreateMailing").'"></td></tr>'; print '<tr><td colspan="2" align="center"><input type="submit" class="button" value="'.$langs->trans("CreateMailing").'"></td></tr>';
print '</table>'; print '</table>';
print '</form>'; print '</form>';

View File

@ -118,7 +118,7 @@ while (($file = readdir($handle))!==false)
while ($i < $num ) while ($i < $num )
{ {
$obj = $db->fetch_object($result); $obj = $db->fetch_object($result);
print '<td>'.img_object('',$mailmodule->picto).' '.$obj->label.'</td><td>'.$obj->nb.'<td>'; print '<td>'.img_object('',$mailmodule->picto).' '.$obj->label.'</td><td align="right">'.$obj->nb.'<td>';
$i++; $i++;
} }
@ -156,7 +156,7 @@ if ($result)
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td colspan="2">'.$langs->trans("LastMailings",10).'</td>'; print '<td colspan="2">'.$langs->trans("LastMailings",10).'</td>';
print '<td align="right">'.$langs->trans("NbOfEMails").'</td>'; print '<td align="center">'.$langs->trans("NbOfEMails").'</td>';
print '<td align="center">'.$langs->trans("Status").'</td></tr>'; print '<td align="center">'.$langs->trans("Status").'</td></tr>';
$num = $db->num_rows($result); $num = $db->num_rows($result);
@ -173,7 +173,7 @@ if ($result)
print "<tr $bc[$var]>"; print "<tr $bc[$var]>";
print '<td><a href="fiche.php?id='.$obj->rowid.'">'.img_object($langs->trans("ShowEMail"),"email").' '.$obj->rowid.'</a></td>'; print '<td><a href="fiche.php?id='.$obj->rowid.'">'.img_object($langs->trans("ShowEMail"),"email").' '.$obj->rowid.'</a></td>';
print '<td>'.$obj->titre.'</td>'; print '<td>'.$obj->titre.'</td>';
print '<td align="right">'.($obj->nbemail?$obj->nbemail:"0").'</td>'; print '<td align="center">'.($obj->nbemail?$obj->nbemail:"0").'</td>';
$mail=new Mailing($db); $mail=new Mailing($db);
print '<td align="center">'.$mail->statuts[$obj->statut].'</td>'; print '<td align="center">'.$mail->statuts[$obj->statut].'</td>';
print '</tr>'; print '</tr>';

View File

@ -1,107 +0,0 @@
<?php
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* or see http://www.gnu.org/
*
* $Id$
* $Source$
*
*
* L'utilisation d'adresses de courriers électroniques dans les opérations
* de prospection commerciale est subordonnée au recueil du consentement
* préalable des personnes concernées.
*
* Le dispositif juridique applicable a été introduit par l'article 22 de
* la loi du 21 juin 2004 pour la confiance dans l'économie numérique.
*
* Les dispositions applicables sont définies par les articles L. 34-5 du
* code des postes et des télécommunications et L. 121-20-5 du code de la
* consommation. L'application du principe du consentement préalable en
* droit français résulte de la transposition de l'article 13 de la Directive
* européenne du 12 juillet 2002 « Vie privée et communications électroniques ».
*
*/
/**
\file htdocs/includes/modules/mailings/cerise.modules.php
\ingroup mailing
\brief Fichier de la classe permettant de générer la liste de destinataires Cerise
\version $Revision$
*/
include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php';
/**
\class mailing_cerise
\brief Classe permettant de générer la liste des destinataires Cerise
*/
class mailing_cerise extends MailingTargets
{
var $name="ContactProspects"; // Identifiant du module mailing
var $desc='Tous les contacts emails uniques de toutes les sociétés 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 $require_admin=0; // Module mailing actif pour user admin ou non
var $picto='contact';
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")."' as label, count(*) as nb FROM ".MAIN_DB_PREFIX."societe WHERE client = 2";
$this->statssql[1]="SELECT '".$langs->trans("NbOfProspectsContacts")."' as label, count(distinct(c.email)) as 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)) as nb";
$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";
return parent::getNbOfRecipients($sql);
}
function add_to_target($mailing_id)
{
// La requete doit retourner: email, fk_contact, name, firstname
$sql = "SELECT c.email as email, c.idp as fk_contact, c.name as name, c.firstname as 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";
return parent::add_to_target($mailing_id, $sql);
}
}
?>

View File

@ -52,8 +52,8 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php'
class mailing_fraise extends MailingTargets class mailing_fraise extends MailingTargets
{ {
var $name='MembersValidated'; // Identifiant du module mailing var $name='FundationMembers'; // Identifiant du module mailing
var $desc='Tous les membres à jour'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée var $desc='Membres de l\'association'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée
var $require_module=array('adherent'); // Module mailing actif si modules require_module actifs var $require_module=array('adherent'); // Module mailing actif si modules require_module actifs
var $require_admin=0; // Module mailing actif pour user admin ou non var $require_admin=0; // Module mailing actif pour user admin ou non
var $picto='user'; var $picto='user';
@ -70,7 +70,7 @@ class mailing_fraise extends MailingTargets
$this->db=$DB; $this->db=$DB;
// Liste des tableaux des stats espace mailing // Liste des tableaux des stats espace mailing
$this->statssql[0]="SELECT '".$langs->trans("MembersStatusValidated")."' as label, count(*) as nb FROM ".MAIN_DB_PREFIX."adherent where statut = 1"; $this->statssql[0]="SELECT '".$langs->trans("FundationMembers")."' as label, count(*) as nb FROM ".MAIN_DB_PREFIX."adherent where statut = 1";
} }
function getNbOfRecipients() function getNbOfRecipients()
@ -83,13 +83,53 @@ class mailing_fraise extends MailingTargets
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }
function add_to_target($mailing_id) /**
* \brief Affiche formulaire de filtre qui apparait dans page de selection
* des destinataires de mailings
* \return string Retourne zone select
*/
function formFilter()
{ {
// La requete doit retourner: email, fk_contact, name, firstname global $langs;
$sql = "SELECT a.email as email, null as fk_contact, a.nom as name, a.prenom as firstname"; $s='';
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a"; $s.='<select name="filter" class="flat">';
$sql .= " WHERE a.email IS NOT NULL AND a.statut=1"; $s.='<option value="-1">'.$langs->trans("ToValidate").'</option>';
$sql .= " ORDER BY a.email"; $s.='<option value="1" selected="true">'.$langs->trans("Validated").'</option>';
$s.='<option value="0">'.$langs->trans("Resiliated").'</option>';
$s.='</select>';
return $s;
}
/**
* \brief Renvoie url lien vers fiche de la source du destinataire du mailing
* \return string Url lien
*/
function url($id)
{
return '<a href="'.DOL_URL_ROOT.'/adherents/fiche.php?rowid='.$id.'">'.img_object('',"user").'</a>';
}
/**
* \brief Ajoute destinataires dans table des cibles
* \param mailing_id Id du mailing concerné
* \param filterarray Requete sql de selection des destinataires
* \return int < 0 si erreur, nb ajout si ok
*/
function add_to_target($mailing_id,$filtersarray=array())
{
// La requete doit retourner: id, email, fk_contact, name, firstname
$sql = "SELECT a.rowid as id, a.email as email, null as fk_contact, a.nom as name, a.prenom as firstname";
$sql.= " FROM ".MAIN_DB_PREFIX."adherent as a";
$sql.= " WHERE a.email IS NOT NULL";
foreach($filtersarray as $key)
{
if ($key == -1) $sql.= " AND a.statut=-1";
if ($key == 0) $sql.= " AND a.statut=0";
if ($key == 1) $sql.= " AND a.statut=1";
}
$sql.= " ORDER BY a.email";
return parent::add_to_target($mailing_id, $sql); return parent::add_to_target($mailing_id, $sql);
} }

View File

@ -79,11 +79,22 @@ class MailingTargets
$obj = $this->db->fetch_object($result); $obj = $this->db->fetch_object($result);
return $obj->nb; return $obj->nb;
} }
else { else
{
return -1; return -1;
} }
} }
/**
* \brief Affiche formulaire de filtre qui apparait dans page de selection
* des destinataires de mailings
* \return string Retourne zone select
*/
function formFilter()
{
return '&nbsp;';
}
/** /**
* \brief Met a jour nombre de destinataires * \brief Met a jour nombre de destinataires
* \param mailing_id Id du mailing concerné * \param mailing_id Id du mailing concerné
@ -141,7 +152,7 @@ class MailingTargets
$obj = $this->db->fetch_object($result); $obj = $this->db->fetch_object($result);
if ($old <> $obj->email) if ($old <> $obj->email)
{ {
$cibles[$j] = array($obj->email,$obj->fk_contact,$obj->name,$obj->firstname); $cibles[$j] = array($obj->email,$obj->fk_contact,$obj->name,$obj->firstname,$this->url($obj->id));
$old = $obj->email; $old = $obj->email;
$j++; $j++;
} }
@ -156,6 +167,8 @@ class MailingTargets
return -1; return -1;
} }
$this->db->begin();
// Insère destinataires de cibles dans table // Insère destinataires de cibles dans table
$j = 0; $j = 0;
$num = sizeof($cibles); $num = sizeof($cibles);
@ -164,12 +177,14 @@ class MailingTargets
$sql = "INSERT INTO ".MAIN_DB_PREFIX."mailing_cibles"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."mailing_cibles";
$sql .= " (fk_mailing, "; $sql .= " (fk_mailing, ";
if ($cibles[$i][1]) $sql .= "fk_contact, "; if ($cibles[$i][1]) $sql .= "fk_contact, ";
$sql .= "nom, prenom, email)"; $sql .= "nom, prenom, email, url)";
$sql .= " VALUES (".$mailing_id.","; $sql .= " VALUES (".$mailing_id.",";
if ($cibles[$i][1]) $sql .= $cibles[$i][1] .","; if ($cibles[$i][1]) $sql .= $cibles[$i][1] .",";
$sql .= "'".$cibles[$i][2] ."',"; $sql .= "'".addslashes($cibles[$i][2])."',";
$sql .= "'".$cibles[$i][3] ."',"; $sql .= "'".addslashes($cibles[$i][3])."',";
$sql .= "'".$cibles[$i][0] ."')"; $sql .= "'".addslashes($cibles[$i][0])."',";
$sql .= "'".addslashes($cibles[$i][4])."')";
$result=$this->db->query($sql); $result=$this->db->query($sql);
if ($result) if ($result)
{ {
@ -177,10 +192,12 @@ class MailingTargets
} }
else else
{ {
if ($this->db->errno() != DB_ERROR_RECORD_ALREADY_EXISTS) if ($this->db->errno() != 'DB_ERROR_RECORD_ALREADY_EXISTS')
{ {
// Si erreur autre que doublon // Si erreur autre que doublon
dolibarr_syslog($this->db->error()); dolibarr_syslog($this->db->error());
$this->error=$this->db->error();
$this->db->rollback();
return -1; return -1;
} }
} }
@ -190,6 +207,7 @@ class MailingTargets
$this->update_nb($mailing_id); $this->update_nb($mailing_id);
$this->db->commit();
return $j; return $j;
} }

View File

@ -53,8 +53,8 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php'
class mailing_poire extends MailingTargets class mailing_poire extends MailingTargets
{ {
var $name='ContactCustomers'; // Identifiant du module mailing var $name='ContactCompanies'; // Identifiant du module mailing
var $desc='Tous les contacts uniques de toutes les sociétés clientes'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée var $desc='Contacts des sociétés'; // 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 $require_module=array("commercial"); // Module mailing actif si modules require_module actifs
var $require_admin=0; // Module mailing actif pour user admin ou non var $require_admin=0; // Module mailing actif pour user admin ou non
var $picto='contact'; var $picto='contact';
@ -71,8 +71,8 @@ class mailing_poire extends MailingTargets
$this->db=$DB; $this->db=$DB;
// Liste des tableaux des stats espace mailing // Liste des tableaux des stats espace mailing
$this->statssql[0]="SELECT '".$langs->trans("Customers")."' as label, count(*) as nb FROM ".MAIN_DB_PREFIX."societe WHERE client = 1"; //$this->statssql[0]="SELECT '".$langs->trans("Customers")."' as label, count(*) as nb FROM ".MAIN_DB_PREFIX."societe WHERE client = 1";
$this->statssql[1]="SELECT '".$langs->trans("NbOfCustomersContacts")."' as label, count(distinct(c.email)) as 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 != ''"; $this->statssql[0]="SELECT '".$langs->trans("NbOfCompaniesContacts")."' as label, count(distinct(c.email)) as 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 != ''";
} }
function getNbOfRecipients() function getNbOfRecipients()
@ -88,15 +88,58 @@ class mailing_poire extends MailingTargets
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }
function add_to_target($mailing_id) /**
* \brief Affiche formulaire de filtre qui apparait dans page de selection
* des destinataires de mailings
* \return string Retourne zone select
*/
function formFilter()
{ {
// La requete doit retourner: email, fk_contact, name, firstname global $langs;
$sql = "SELECT c.email as email, c.idp as fk_contact, c.name as name, c.firstname as firstname"; $langs->load("commercial");
$langs->load("suppliers");
$s='';
$s.='<select name="filter" class="flat">';
$s.='<option value="all">'.$langs->trans("All").'</option>';
$s.='<option value="prospects">'.$langs->trans("Prospects").'</option>';
$s.='<option value="customers">'.$langs->trans("Customers").'</option>';
$s.='<option value="suppliers">'.$langs->trans("Suppliers").'</option>';
$s.='</select>';
return $s;
}
/**
* \brief Renvoie url lien vers fiche de la source du destinataire du mailing
* \return string Url lien
*/
function url($id)
{
return '<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$id.'">'.img_object('',"contact").'</a>';
}
/**
* \brief Ajoute destinataires dans table des cibles
* \param mailing_id Id du mailing concerné
* \param filterarray Requete sql de selection des destinataires
* \return int < 0 si erreur, nb ajout si ok
*/
function add_to_target($mailing_id,$filtersarray=array())
{
// La requete doit retourner: id, email, fk_contact, name, firstname
$sql = "SELECT s.idp as id, c.email as email, c.idp as fk_contact, c.name as name, c.firstname as firstname";
$sql .= " FROM ".MAIN_DB_PREFIX."socpeople as c"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as c";
$sql .= ", ".MAIN_DB_PREFIX."societe as s"; $sql .= ", ".MAIN_DB_PREFIX."societe as s";
$sql .= " WHERE s.idp = c.fk_soc"; $sql .= " WHERE s.idp = c.fk_soc";
$sql .= " AND s.client = 1";
$sql .= " AND c.email != ''"; $sql .= " AND c.email != ''";
foreach($filtersarray as $key)
{
if ($key == 'prospects') $sql.= " AND s.client=2";
if ($key == 'customers') $sql.= " AND s.client=1";
if ($key == 'suppliers') $sql.= " AND s.fournisseur=1";
}
$sql .= " ORDER BY c.email"; $sql .= " ORDER BY c.email";
return parent::add_to_target($mailing_id, $sql); return parent::add_to_target($mailing_id, $sql);

View File

@ -53,7 +53,7 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php'
class mailing_pomme extends MailingTargets class mailing_pomme extends MailingTargets
{ {
var $name='DolibarrUsers'; // Identifiant du module mailing var $name='DolibarrUsers'; // Identifiant du module mailing
var $desc='Tous les utilisateurs avec emails de Dolibarr'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée var $desc='Utilisateurs de Dolibarr avec emails'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée
var $require_module=array(); // Module mailing actif si modules require_module actifs var $require_module=array(); // Module mailing actif si modules require_module actifs
var $require_admin=1; // Module mailing actif pour user admin ou non var $require_admin=1; // Module mailing actif pour user admin ou non
var $picto='user'; var $picto='user';
@ -86,10 +86,27 @@ class mailing_pomme extends MailingTargets
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }
function add_to_target($mailing_id)
/**
* \brief Renvoie url lien vers fiche de la source du destinataire du mailing
* \return string Url lien
*/
function url($id)
{ {
// La requete doit retourner: email, fk_contact, name, firstname return '<a href="'.DOL_URL_ROOT.'/user/fiche.php?id='.$id.'">'.img_object('',"user").'</a>';
$sql = "SELECT u.email as email, null as fk_contact, u.name as name, u.firstname as firstname"; }
/**
* \brief Ajoute destinataires dans table des cibles
* \param mailing_id Id du mailing concerné
* \param filterarray Requete sql de selection des destinataires
* \return int < 0 si erreur, nb ajout si ok
*/
function add_to_target($mailing_id,$filtersarray=array())
{
// La requete doit retourner: id, email, fk_contact, name, firstname
$sql = "SELECT u.rowid as id, u.email as email, null as fk_contact, u.name as name, u.firstname as firstname";
$sql .= " FROM ".MAIN_DB_PREFIX."user as u"; $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
$sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test
$sql .= " ORDER BY u.email"; $sql .= " ORDER BY u.email";

View File

@ -14,7 +14,7 @@ MailCC=Copy to
MailTopic=EMail topic MailTopic=EMail topic
MailText=Message MailText=Message
MailFile=Attach a file MailFile=Attach a file
MailMessage=Message MailMessage=EMail body
ListOfEMailings=Liste of emailings ListOfEMailings=Liste of emailings
NewMailing=New emailing NewMailing=New emailing
EditMailing=Edit emailing EditMailing=Edit emailing
@ -48,18 +48,17 @@ TotalNbOfDistinctRecipients=Number of distinct recipients
NoTargetYet=No recipients defined yet NoTargetYet=No recipients defined yet
AddRecipients=Add recipients AddRecipients=Add recipients
RemoveRecipient=Remove recipient RemoveRecipient=Remove recipient
CommonSubstitutions=Common substitutions
# Libelle des modules de liste de destinataires mailing # Libelle des modules de liste de destinataires mailing
MailingModuleDescContactProspects=All unique contact emails for all prospect companies MailingModuleDescContactCompanies=Unique contacts with emails in all companies
MailingModuleDescContactCustomers=All unique contact emails for all customer companies
MailingModuleDescDolibarrUsers=All Dolibarr users with emails MailingModuleDescDolibarrUsers=All Dolibarr users with emails
MailingModuleDescMembersValidated=All validated members MailingModuleDescFundationMembers=Fundation members
RecipientSelectionModules=EMailing modules for recipients' selection RecipientSelectionModules=EMailing modules for recipients' selection
MailSelectedRecipients=Selected recipients MailSelectedRecipients=Selected recipients
MailingArea=EMailings area MailingArea=EMailings area
LastMailings=Last %s emailings LastMailings=Last %s emailings
TargetsStatistics=Targets statistics TargetsStatistics=Targets statistics
NbOfProspectsContacts=Unique contacts for all prospects NbOfCompaniesContacts=Unique contacts of companies
NbOfCustomersContacts=Unique contacts for all customers
MailNoChangePossible=Recipients for validated emailing can't be changed MailNoChangePossible=Recipients for validated emailing can't be changed
SearchAMailing=Search mailing SearchAMailing=Search mailing
SendMailing=Send emailing SendMailing=Send emailing

View File

@ -2,6 +2,7 @@
MemberCard=Member card MemberCard=Member card
Member=Member Member=Member
Members=Members Members=Members
FundationMembers=Fundation members
Attributs=Attributes Attributs=Attributes
Person=Person Person=Person
ErrorMemberTypeNotDefined=Member type not defined ErrorMemberTypeNotDefined=Member type not defined
@ -61,3 +62,5 @@ ConfirmResiliateMember=Are you sure you want to resiliate this member ?
DeleteMember=Delete a member DeleteMember=Delete a member
ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a memeber will delete all his subscription) ? ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a memeber will delete all his subscription) ?
Filehtpasswd=htpasswd file Filehtpasswd=htpasswd file
ValidateMember=Validate a member
ConfirmValidateMember=Are you sure you want to validate this member ?

View File

@ -14,7 +14,7 @@ MailCC=Copie
MailTopic=Sujet du mail MailTopic=Sujet du mail
MailText=Message MailText=Message
MailFile=Joindre un fichier MailFile=Joindre un fichier
MailMessage=Message MailMessage=Message du mail
ListOfEMailings=Liste des mailings ListOfEMailings=Liste des mailings
NewMailing=Nouveau mailing NewMailing=Nouveau mailing
EditMailing=Éditer mailing EditMailing=Éditer mailing
@ -48,18 +48,17 @@ TotalNbOfDistinctRecipients=Nombre de destinataires uniques
NoTargetYet=Aucun destinataire défini NoTargetYet=Aucun destinataire défini
AddRecipients=Ajout de destinataires AddRecipients=Ajout de destinataires
RemoveRecipient=Supprime destinataire RemoveRecipient=Supprime destinataire
CommonSubstitutions=Substitutions communes
# Libelle des modules de liste de destinataires mailing # Libelle des modules de liste de destinataires mailing
MailingModuleDescContactProspects=Tous les contacts de toutes les sociétés en prospection MailingModuleDescContactCompanies=Contacts avec e-mail des sociétés (prospects, clients, fournisseurs...)
MailingModuleDescContactCustomers=Tous les contacts de toutes les sociétés clientes MailingModuleDescDolibarrUsers=Utilisateurs de Dolibarr ayant un e-mail
MailingModuleDescDolibarrUsers=Tous les utilisateurs de Dolibarr ayant un e-mail MailingModuleDescFundationMembers=Adhérents ayant e-mail
MailingModuleDescMembersValidated=Tous les adhérents validés
RecipientSelectionModules=Modules de sélection des destinataires RecipientSelectionModules=Modules de sélection des destinataires
MailSelectedRecipients=Destinataires sélectionnés MailSelectedRecipients=Destinataires sélectionnés
MailingArea=Espace mailings MailingArea=Espace mailings
LastMailings=Les %s derniers mailings LastMailings=Les %s derniers mailings
TargetsStatistics=Statistiques destinataires TargetsStatistics=Statistiques destinataires
NbOfProspectsContacts=Contacts uniques tous prospects NbOfCompaniesContacts=Contacts uniques des sociétés
NbOfCustomersContacts=Contacts uniques tous clients
MailNoChangePossible=Destinataires d'un mailing validé non modifiables MailNoChangePossible=Destinataires d'un mailing validé non modifiables
SearchAMailing=Rechercher un mailing SearchAMailing=Rechercher un mailing
SendMailing=Envoi mailing SendMailing=Envoi mailing

View File

@ -2,6 +2,7 @@
MemberCard=Fiche adhérent MemberCard=Fiche adhérent
Member=Adhérent Member=Adhérent
Members=Adhérents Members=Adhérents
FundationMembers=Membres de l'association
Attributs=Attributs Attributs=Attributs
Person=Personne Person=Personne
ErrorMemberTypeNotDefined=Le type d'adhérent n'est pas choisi ErrorMemberTypeNotDefined=Le type d'adhérent n'est pas choisi
@ -61,3 +62,5 @@ ConfirmResiliateMember=Etes-vous s
DeleteMember=Effacer un membre DeleteMember=Effacer un membre
ConfirmDeleteMember=Etes-vous sûr de vouloir effacer ce membre (Effacer un membre efface aussi toutes ses cotisations) ? ConfirmDeleteMember=Etes-vous sûr de vouloir effacer ce membre (Effacer un membre efface aussi toutes ses cotisations) ?
Filehtpasswd=Fichier htpasswd Filehtpasswd=Fichier htpasswd
ValidateMember=Valider un adhérent
ConfirmValidateMember=Etes-vous sûr de vouloir valider cet adhérent ?

View File

@ -620,6 +620,8 @@ create table llx_mailing_cibles
)type=innodb; )type=innodb;
alter table llx_mailing_cibles ADD url varchar(160);
alter table llx_mailing_cibles ADD UNIQUE uk_mailing_cibles (fk_mailing, email); alter table llx_mailing_cibles ADD UNIQUE uk_mailing_cibles (fk_mailing, email);
-- --

View File

@ -31,6 +31,7 @@ create table llx_mailing_cibles
prenom varchar(160), prenom varchar(160),
email varchar(160) NOT NULL, email varchar(160) NOT NULL,
statut smallint NOT NULL DEFAULT 0, statut smallint NOT NULL DEFAULT 0,
url varchar(160),
date_envoi datetime date_envoi datetime
)type=innodb; )type=innodb;