Amlioration 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;
require_once($file);
$filtersarray=array();
if (isset($_POST["filter"])) $filtersarray[0]=$_POST["filter"];
$obj = new $classname($db);
$result=$obj->add_to_target($_GET["rowid"]);
$result=$obj->add_to_target($_GET["rowid"],$filtersarray);
if ($result > 0)
{
Header("Location: cibles.php?id=".$_GET["rowid"]);
exit;
}
if ($result == 0)
{
@ -164,11 +168,13 @@ if ($mil->fetch($_GET["id"]) == 0)
if ($mesg) print "$mesg<br>\n";
// Affiche les listes de sélection
if ($mil->statut == 0) {
if ($mil->statut == 0)
{
print '<table class="noborder" width=\"100%\">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("RecipientSelectionModules").'</td>';
print '<td align="center">'.$langs->trans("NbOfUniqueEMails").'</td>';
print '<td align="center">'.$langs->trans("Parameters").'</td>';
print '<td align="center" width="120">';
if ($mil->statut == 0) {
print $langs->trans("Actions");
@ -211,7 +217,9 @@ if ($mil->fetch($_GET["id"]) == 0)
{
$var = !$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 img_object('',$obj->picto).' '.$obj->getDesc();
print '</td>';
@ -221,12 +229,16 @@ if ($mil->fetch($_GET["id"]) == 0)
print $modulename;
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">';
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
{
@ -235,6 +247,8 @@ if ($mil->fetch($_GET["id"]) == 0)
}
print '</td>';
if ($mil->statut == 0) print '</form>';
print "</tr>\n";
}
}
@ -244,7 +258,7 @@ if ($mil->fetch($_GET["id"]) == 0)
$var=!$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 '</table><br>';
@ -252,7 +266,7 @@ if ($mil->fetch($_GET["id"]) == 0)
// 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 .= " WHERE mc.fk_mailing=".$mil->id;
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("Firstname"),"cibles.php","mc.prenom",$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>';
if ($mil->statut == 0)
{
@ -284,7 +299,7 @@ if ($mil->fetch($_GET["id"]) == 0)
$var = true;
$i = 0;
while ($i < $num )
while ($i < $num)
{
$obj = $db->fetch_object($resql);
$var=!$var;
@ -293,6 +308,7 @@ if ($mil->fetch($_GET["id"]) == 0)
print '<td>'.stripslashes($obj->nom).'</td>';
print '<td>'.stripslashes($obj->prenom).'</td>';
print '<td>'.$obj->email.'</td>';
print '<td>'.$obj->url.'</td>';
if ($mil->statut == 0)
{
print '<td align="center">'.$langs->trans("MailingStatusNotSent").'</td>';

View File

@ -99,22 +99,30 @@ if ($_POST["action"] == 'send')
// Action ajout mailing
if ($_POST["action"] == 'add')
{
$mil = new Mailing($db);
$message='';
$mil = new Mailing($db);
$mil->email_from = $_POST["from"];
$mil->titre = $_POST["titre"];
$mil->sujet = $_POST["sujet"];
$mil->body = $_POST["body"];
$mil->email_from = trim($_POST["from"]);
$mil->titre = trim($_POST["titre"]);
$mil->sujet = trim($_POST["sujet"]);
$mil->body = trim($_POST["body"]);
if ($mil->create($user) >= 0)
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)
{
Header("Location: fiche.php?id=".$mil->id);
if ($mil->create($user) >= 0)
{
Header("Location: fiche.php?id=".$mil->id);
exit;
}
$message=$mil->error;
}
else
{
$message='<div class="error">'.$mil->error.'</div>';
$message='<div class="error">'.$message.'</div>';
$_GET["action"]="create";
}
}
// 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("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%" 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 '</table>';
print '</form>';

View File

@ -118,7 +118,7 @@ while (($file = readdir($handle))!==false)
while ($i < $num )
{
$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++;
}
@ -156,7 +156,7 @@ if ($result)
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
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>';
$num = $db->num_rows($result);
@ -173,7 +173,7 @@ if ($result)
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>'.$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);
print '<td align="center">'.$mail->statuts[$obj->statut].'</td>';
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,10 +52,10 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php'
class mailing_fraise extends MailingTargets
{
var $name='MembersValidated'; // Identifiant du module mailing
var $desc='Tous les membres à jour'; // 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_admin=0; // Module mailing actif pour user admin ou non
var $name='FundationMembers'; // Identifiant du module mailing
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_admin=0; // Module mailing actif pour user admin ou non
var $picto='user';
var $db;
@ -70,7 +70,7 @@ class mailing_fraise extends MailingTargets
$this->db=$DB;
// 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()
@ -83,13 +83,53 @@ class mailing_fraise extends MailingTargets
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
$sql = "SELECT 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 AND a.statut=1";
$sql .= " ORDER BY a.email";
global $langs;
$s='';
$s.='<select name="filter" class="flat">';
$s.='<option value="-1">'.$langs->trans("ToValidate").'</option>';
$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);
}

View File

@ -79,11 +79,22 @@ class MailingTargets
$obj = $this->db->fetch_object($result);
return $obj->nb;
}
else {
else
{
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
* \param mailing_id Id du mailing concerné
@ -141,7 +152,7 @@ class MailingTargets
$obj = $this->db->fetch_object($result);
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;
$j++;
}
@ -156,6 +167,8 @@ class MailingTargets
return -1;
}
$this->db->begin();
// Insère destinataires de cibles dans table
$j = 0;
$num = sizeof($cibles);
@ -164,12 +177,14 @@ class MailingTargets
$sql = "INSERT INTO ".MAIN_DB_PREFIX."mailing_cibles";
$sql .= " (fk_mailing, ";
if ($cibles[$i][1]) $sql .= "fk_contact, ";
$sql .= "nom, prenom, email)";
$sql .= "nom, prenom, email, url)";
$sql .= " VALUES (".$mailing_id.",";
if ($cibles[$i][1]) $sql .= $cibles[$i][1] .",";
$sql .= "'".$cibles[$i][2] ."',";
$sql .= "'".$cibles[$i][3] ."',";
$sql .= "'".$cibles[$i][0] ."')";
$sql .= "'".addslashes($cibles[$i][2])."',";
$sql .= "'".addslashes($cibles[$i][3])."',";
$sql .= "'".addslashes($cibles[$i][0])."',";
$sql .= "'".addslashes($cibles[$i][4])."')";
$result=$this->db->query($sql);
if ($result)
{
@ -177,10 +192,12 @@ class MailingTargets
}
else
{
if ($this->db->errno() != DB_ERROR_RECORD_ALREADY_EXISTS)
if ($this->db->errno() != 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
// Si erreur autre que doublon
dolibarr_syslog($this->db->error());
$this->error=$this->db->error();
$this->db->rollback();
return -1;
}
}
@ -190,6 +207,7 @@ class MailingTargets
$this->update_nb($mailing_id);
$this->db->commit();
return $j;
}

View File

@ -53,8 +53,8 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php'
class mailing_poire extends MailingTargets
{
var $name='ContactCustomers'; // 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 $name='ContactCompanies'; // Identifiant du module mailing
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_admin=0; // Module mailing actif pour user admin ou non
var $picto='contact';
@ -71,8 +71,8 @@ class mailing_poire extends MailingTargets
$this->db=$DB;
// 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[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("Customers")."' as label, count(*) as nb FROM ".MAIN_DB_PREFIX."societe WHERE client = 1";
$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()
@ -88,15 +88,58 @@ class mailing_poire extends MailingTargets
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
$sql = "SELECT c.email as email, c.idp as fk_contact, c.name as name, c.firstname as firstname";
global $langs;
$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 .= ", ".MAIN_DB_PREFIX."societe as s";
$sql .= " WHERE s.idp = c.fk_soc";
$sql .= " AND s.client = 1";
$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";
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
{
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_admin=1; // Module mailing actif pour user admin ou non
var $picto='user';
@ -85,11 +85,28 @@ class mailing_pomme extends MailingTargets
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
$sql = "SELECT u.email as email, null as fk_contact, u.name as name, u.firstname as firstname";
return '<a href="'.DOL_URL_ROOT.'/user/fiche.php?id='.$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 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 .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test
$sql .= " ORDER BY u.email";

View File

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

View File

@ -2,6 +2,7 @@
MemberCard=Member card
Member=Member
Members=Members
FundationMembers=Fundation members
Attributs=Attributes
Person=Person
ErrorMemberTypeNotDefined=Member type not defined
@ -60,4 +61,6 @@ ResiliateMember=Resiliate a member
ConfirmResiliateMember=Are you sure you want to resiliate this member ?
DeleteMember=Delete a member
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
MailText=Message
MailFile=Joindre un fichier
MailMessage=Message
MailMessage=Message du mail
ListOfEMailings=Liste des mailings
NewMailing=Nouveau mailing
EditMailing=Éditer mailing
@ -48,18 +48,17 @@ TotalNbOfDistinctRecipients=Nombre de destinataires uniques
NoTargetYet=Aucun destinataire défini
AddRecipients=Ajout de destinataires
RemoveRecipient=Supprime destinataire
CommonSubstitutions=Substitutions communes
# Libelle des modules de liste de destinataires mailing
MailingModuleDescContactProspects=Tous les contacts de toutes les sociétés en prospection
MailingModuleDescContactCustomers=Tous les contacts de toutes les sociétés clientes
MailingModuleDescDolibarrUsers=Tous les utilisateurs de Dolibarr ayant un e-mail
MailingModuleDescMembersValidated=Tous les adhérents validés
MailingModuleDescContactCompanies=Contacts avec e-mail des sociétés (prospects, clients, fournisseurs...)
MailingModuleDescDolibarrUsers=Utilisateurs de Dolibarr ayant un e-mail
MailingModuleDescFundationMembers=Adhérents ayant e-mail
RecipientSelectionModules=Modules de sélection des destinataires
MailSelectedRecipients=Destinataires sélectionnés
MailingArea=Espace mailings
LastMailings=Les %s derniers mailings
TargetsStatistics=Statistiques destinataires
NbOfProspectsContacts=Contacts uniques tous prospects
NbOfCustomersContacts=Contacts uniques tous clients
NbOfCompaniesContacts=Contacts uniques des sociétés
MailNoChangePossible=Destinataires d'un mailing validé non modifiables
SearchAMailing=Rechercher un mailing
SendMailing=Envoi mailing

View File

@ -2,6 +2,7 @@
MemberCard=Fiche adhérent
Member=Adhérent
Members=Adhérents
FundationMembers=Membres de l'association
Attributs=Attributs
Person=Personne
ErrorMemberTypeNotDefined=Le type d'adhérent n'est pas choisi
@ -60,4 +61,6 @@ ResiliateMember=R
ConfirmResiliateMember=Etes-vous sûr de vouloir résilier cet adhérent ?
DeleteMember=Effacer un membre
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;
alter table llx_mailing_cibles ADD url varchar(160);
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),
email varchar(160) NOT NULL,
statut smallint NOT NULL DEFAULT 0,
url varchar(160),
date_envoi datetime
)type=innodb;