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:
parent
e7ca38a3ea
commit
9ff2a4c377
@ -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> </td><td> </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> </td><td> </td><td> </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"> </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>';
|
||||
|
||||
@ -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>';
|
||||
|
||||
@ -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>';
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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 ' ';
|
||||
}
|
||||
|
||||
/**
|
||||
* \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;
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 ?
|
||||
@ -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
|
||||
|
||||
@ -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 ?
|
||||
|
||||
@ -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);
|
||||
|
||||
--
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user