New: Add a module to select email targets from a file in email module

This commit is contained in:
Laurent Destailleur
2008-08-01 20:59:33 +00:00
parent 90c45ac373
commit 40418d0d38
14 changed files with 238 additions and 64 deletions

View File

@@ -128,6 +128,8 @@ if ($_POST["button_removefilter"])
$search_email='';
}
/*
* Liste des destinataires
*/
@@ -164,7 +166,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0)
print '<tr><td width="25%">'.$langs->trans("MailTitle").'</td><td colspan="3">'.$mil->titre.'</td></tr>';
print '<tr><td width="25%">'.$langs->trans("MailFrom").'</td><td colspan="3">'.htmlentities($mil->email_from).'</td></tr>';
print '<tr><td width="25%">'.$langs->trans("Status").'</td><td colspan="3">'.$mil->getLibStatut(4).'</td></tr>';
print '<tr><td width="25%">'.$langs->trans("TotalNbOfDistinctRecipients").'</td><td colspan="3">'.($mil->nbemail?$mil->nbemail:'<font class="error">'.$langs->trans("NoTargetYet").'</font>').'</td></tr>';
print '<tr><td width="25%">'.$langs->trans("TotalNbOfDistinctRecipients").'</td><td colspan="3">'.($mil->nbemail?$mil->nbemail:'0').'</td></tr>';
print '</table>';
print "</div>";
@@ -183,7 +185,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0)
if ($user->admin) print ' '.info_admin($langs->trans("YouCanAddYourOwnPredefindedListHere"),1);
print '</td>';
print '<td align="center">'.$langs->trans("NbOfUniqueEMails").'</td>';
print '<td align="center">'.$langs->trans("Filter").'</td>';
print '<td align="left">'.$langs->trans("Filter").'</td>';
print '<td align="center" width="120">&nbsp;</td>';
print "</tr>\n";
@@ -231,7 +233,7 @@ if ($mil->fetch($_REQUEST["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">';
if ($mil->statut == 0) print '<form name="'.$modulename.'" action="cibles.php?action=add&rowid='.$mil->id.'&module='.$modulename.'" method="POST" enctype="multipart/form-data">';
print '<td>';
if (! $obj->picto) $obj->picto='generic';
@@ -255,13 +257,13 @@ if ($mil->fetch($_REQUEST["id"]) >= 0)
}
print '</td>';
print '<td align="center">';
print '<td align="left">';
$filter=$obj->formFilter();
if ($filter) print $filter;
else print $langs->trans("None");
print '</td>';
print '<td align="center">';
print '<td align="right">';
if ($mil->statut == 0)
{
print '<input type="submit" class="button" value="'.$langs->trans("Add").'">';
@@ -287,7 +289,12 @@ if ($mil->fetch($_REQUEST["id"]) >= 0)
print '<br>';
print '<form action="cibles.php?action=clear&rowid='.$mil->id.'" method="POST">';
print_titre($langs->trans("ToClearAllRecipientsClickHere").'<br><input type="submit" class="button" value="'.$langs->trans("TargetsReset").'">');
print_titre($langs->trans("ToClearAllRecipientsClickHere"));
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print '<td align="right"><input type="submit" class="button" value="'.$langs->trans("TargetsReset").'"></td>';
print '</tr>';
print '</table>';
print '</form>';
print '<br>';
}
@@ -319,7 +326,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0)
if ($search_nom) $addu.= "&amp;search_nom=".urlencode($search_nom);
if ($search_prenom) $addu.= "&amp;search_prenom=".urlencode($search_prenom);
if ($search_email) $addu.= "&amp;search_email=".urlencode($search_email);
print_barre_liste($langs->trans("MailSelectedRecipients"),$page,$_SERVER["PHP_SELF"],$addu,$sortfield,$sortorder,"",$num);
print_barre_liste($langs->trans("MailSelectedRecipients"),$page,$_SERVER["PHP_SELF"],$addu,$sortfield,$sortorder,"",$num,$mil->nbemail);
if ($page) $addu.= "&amp;page=".$page;
print '<table class="noborder" width="100%">';

View File

@@ -350,6 +350,10 @@ class Conf
// Module ECM
$this->ecm->enabled=defined("MAIN_MODULE_ECM")?MAIN_MODULE_ECM:0;
$this->ecm->dir_output=DOL_DATA_ROOT."/ecm";
// Module emailing
$this->mailings->enabled=defined("MAIN_MODULE_MAILING")?MAIN_MODULE_MAILING:0;
$this->mailings->dir_temp=DOL_DATA_ROOT."/mailings/temp";
/*
* Modification de quelques variable de conf en fonction des Constantes

View File

@@ -28,7 +28,8 @@ class mailing_example extends MailingTargets
{
// CHANGE THIS: Put here a name not already used
var $name='example';
// CHANGE THIS: Put here a description of your selector module
// CHANGE THIS: Put here a description of your selector module.
// This label is used if no translation for MailingModuleDescXXX where XXX=name is found
var $desc='Put here a description';
// CHANGE THIS: Set to 1 if selector is available for admin users only
var $require_admin=0;

View File

@@ -15,21 +15,6 @@
* 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/
*
*
* L'utilisation d'adresses de courriers <20>lectroniques dans les op<6F>rations
* de prospection commerciale est subordonn<6E>e au recueil du consentement
* pr<70>alable des personnes concern<72>es.
*
* Le dispositif juridique applicable a <20>t<EFBFBD> introduit par l'article 22 de
* la loi du 21 juin 2004 pour la confiance dans l'<27>conomie num<75>rique.
*
* Les dispositions applicables sont d<>finies par les articles L. 34-5 du
* code des postes et des t<>l<EFBFBD>communications et L. 121-20-5 du code de la
* consommation. L'application du principe du consentement pr<70>alable en
* droit fran<61>ais r<>sulte de la transposition de l'article 13 de la Directive
* europ<6F>enne du 12 juillet 2002 <20> Vie priv<69>e et communications <20>lectroniques <20>.
*
*/
/**
@@ -159,7 +144,7 @@ class mailing_fraise extends MailingTargets
$i = 0;
$j = 0;
dolibarr_syslog("fraisemodules.php: mailing $num cibles trouv<75>es");
dolibarr_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
$old = '';
while ($i < $num)

View File

@@ -169,7 +169,7 @@ class MailingTargets
}
}
dolibarr_syslog("mailing-prepare: mailing $j cibles ajout<75>es");
dolibarr_syslog("MailingTargets::add_to_target: mailing ".$j." targets added");
$this->update_nb($mailing_id);

View File

@@ -0,0 +1,201 @@
<?php
/* 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/
*/
/**
\file htdocs/includes/modules/mailings/peche.modules.php
\ingroup mailing
\brief Fichier de la classe permettant de g<>n<EFBFBD>rer la liste de destinataires Peche
\version $Id$
*/
include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php';
/**
\class mailing_pomme
\brief Classe permettant de g<>n<EFBFBD>rer la liste des destinataires Pomme
*/
class mailing_peche extends MailingTargets
{
var $name='EmailsFromFile'; // Identifiant du module mailing
var $desc='EMails issus d\'un fichier'; // Libell<6C> utilis<69> si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv<75>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='generic';
var $db;
function mailing_peche($DB)
{
$this->db=$DB;
}
function getSqlArrayForStats()
{
global $langs;
$langs->load("users");
$statssql=array();
return $statssql;
}
/*
* \brief Return here number of distinct emails returned by your selector.
* For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500.
* \return int '' means NA
*/
function getNbOfRecipients()
{
return '';
}
/**
* \brief Renvoie url lien vers fiche de la source du destinataire du mailing
* \return string Url lien
*/
function url($id)
{
global $langs;
return $langs->trans('LineInFile',$id);
//' - '.$langs->trans("File").' '.dolibarr_trunc( ,12);
}
/**
* \brief Affiche formulaire de filtre qui apparait dans page de selection
* des destinataires de mailings
* \return string Retourne zone select
*/
function formFilter()
{
global $langs;
$s='';
$s.='<input type="file" name="username" class="flat">';
return $s;
}
/**
* \brief Ajoute destinataires dans table des cibles
* \param mailing_id Id du mailing concern<72>
* \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())
{
global $conf,$langs,$_FILES;
$cibles = array();
$upload_dir=$conf->mailings->dir_temp;
// Save file
if (! is_dir($upload_dir)) create_exdir($upload_dir);
if (is_dir($upload_dir))
{
$result = dol_move_uploaded_file($_FILES['username']['tmp_name'], $upload_dir . "/" . $_FILES['username']['name'], 1);
if ($result > 0)
{
$cpt=0;
//$mesg = '<div class="ok">'.$langs->trans("FileTransferComplete").'</div>';
//print_r($_FILES);
$handle = @fopen($upload_dir . "/" . $_FILES['username']['name'], "r");
if ($handle)
{
$i = 0;
$j = 0;
$old = '';
while (!feof($handle))
{
$cpt++;
$buffer = trim(fgets($handle));
$tab=split(';',$buffer);
$email=$tab[0];
$name=$tab[1];
$firstname=$tab[2];
if (! empty($buffer))
{
//print 'xx'.strlen($buffer).empty($buffer)."<br>\n";
$id=$cpt;
if (ValidEMail($email))
{
if ($old <> $email)
{
$cibles[$j] = array(
'email' => $email,
'name' => $name,
'firstname' => $firstname,
'url' => $this->url($id)
);
$old = $email;
$j++;
}
}
else
{
$i++;
$langs->load("errors");
$this->error = $langs->trans("ErrorFoundBadEmailInFile",$i,$cpt,$email);
}
}
}
fclose($handle);
if ($i > 0)
{
return -$i;
}
}
else
{
$this->error = $langs->trans("ErrorFaildToOpenFile");
return -1;
}
dolibarr_syslog(get_class($this)."::add_to_target mailing ".$cpt." targets found");
}
else if ($result < 0)
{
// Echec transfert (fichier depassant la limite ?)
$this->error = $langs->trans("ErrorFileNotUploaded");
// print_r($_FILES);
return -1;
}
else
{
// Fichier infecte par un virus
$this->error = $langs->trans("ErrorFileIsInfectedWith",$result);
return -1;
}
}
return parent::add_to_target($mailing_id, $cibles);
}
}
?>

View File

@@ -16,20 +16,6 @@
* 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/
*
*
* L'utilisation d'adresses de courriers <20>lectroniques dans les op<6F>rations
* de prospection commerciale est subordonn<6E>e au recueil du consentement
* pr<70>alable des personnes concern<72>es.
*
* Le dispositif juridique applicable a <20>t<EFBFBD> introduit par l'article 22 de
* la loi du 21 juin 2004 pour la confiance dans l'<27>conomie num<75>rique.
*
* Les dispositions applicables sont d<>finies par les articles L. 34-5 du
* code des postes et des t<>l<EFBFBD>communications et L. 121-20-5 du code de la
* consommation. L'application du principe du consentement pr<70>alable en
* droit fran<61>ais r<>sulte de la transposition de l'article 13 de la Directive
* europ<6F>enne du 12 juillet 2002 <20> Vie priv<69>e et communications <20>lectroniques <20>.
*/
/**
@@ -204,7 +190,7 @@ class mailing_poire extends MailingTargets
$i = 0;
$j = 0;
dolibarr_syslog("poire.modules.php: mailing $num cibles trouv<75>es");
dolibarr_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
$old = '';
while ($i < $num)

View File

@@ -15,20 +15,6 @@
* 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/
*
*
* L'utilisation d'adresses de courriers <20>lectroniques dans les op<6F>rations
* de prospection commerciale est subordonn<6E>e au recueil du consentement
* pr<70>alable des personnes concern<72>es.
*
* Le dispositif juridique applicable a <20>t<EFBFBD> introduit par l'article 22 de
* la loi du 21 juin 2004 pour la confiance dans l'<27>conomie num<75>rique.
*
* Les dispositions applicables sont d<>finies par les articles L. 34-5 du
* code des postes et des t<>l<EFBFBD>communications et L. 121-20-5 du code de la
* consommation. L'application du principe du consentement pr<70>alable en
* droit fran<61>ais r<>sulte de la transposition de l'article 13 de la Directive
* europ<6F>enne du 12 juillet 2002 <20> Vie priv<69>e et communications <20>lectroniques <20>.
*/
/**
@@ -129,7 +115,7 @@ class mailing_pomme extends MailingTargets
$i = 0;
$j = 0;
dolibarr_syslog("pomme.modules.php: mailing $num cibles trouv<75>es");
dolibarr_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
$old = '';
while ($i < $num)

View File

@@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2005-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2008 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
@@ -15,13 +15,12 @@
* 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.
*
* $Id$
*/
/**
\defgroup mailing Module mailing
\brief Module pour gerer les mailings
\version $Id$
*/
/**
@@ -37,7 +36,6 @@ include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
\class modMailing
\brief Classe de description et activation du module Mailing
*/
class modMailing extends DolibarrModules
{

View File

@@ -17,6 +17,7 @@ ErrorSupplierCodeRequired=Supplier code required
ErrorSupplierCodeAlreadyUsed=Supplier code already used
ErrorBadParameters=Bad parameters
ErrorFailedToWriteInDir=Failed to write in directory %s
ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
UserCannotBeDelete=User can not be deleted. May be it is associated on Dolibarr entities.
ErrorFieldsRequired=Some required fields were not filled.
ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).

View File

@@ -61,7 +61,9 @@ NoAttachedFiles=No attached files
MailingModuleDescContactCompanies=Unique contacts of all third parties
MailingModuleDescDolibarrUsers=All Dolibarr users with emails
MailingModuleDescFundationMembers=Fundation members with emails
MailingModuleDescEmailsFromFile=EMails from a file
LineInFile=Line %s in file
RecipientSelectionModules=Defined requests for recipients' selection
MailSelectedRecipients=Selected recipients
MailingArea=EMailings area

View File

@@ -17,6 +17,7 @@ ErrorSupplierCodeRequired=Code fournisseur obligatoire
ErrorSupplierCodeAlreadyUsed=Code fournisseur deja utilise
ErrorBadParameters=Parametres incorrects
ErrorFailedToWriteInDir=Impossible d'<27>crire dans le r<>pertoire %s
ErrorFoundBadEmailInFile=Syntaxe de mail incorrecte trouv<75>e pour %s lignes dans le fichier (exemple line %s avec email=%s)
UserCannotBeDelete=L'utilisateur ne peut pas etre supprim<69>e. Peut-<2D>tre est-il associ<63> <20> des <20>l<EFBFBD>ments de Dolibarr.
ErrorFieldsRequired=Des champs obligatoires n'ont pas <20>t<EFBFBD> renseign<67>s
ErrorFailedToCreateDir=Echec a la creation d'un repertoire. Verifiez que le user du serveur Web a bien les droits d'ecriture dans les repertoires documents de Dolibarr. Si le parametre <b>safe_mode</b> a <20>t<EFBFBD> activ<69> sur ce PHP, v<>rifier que les fichiers php dolibarr appartiennent <20> l'utilisateur du serveur Web.

View File

@@ -59,9 +59,11 @@ NoAttachedFiles=Aucun fichier joint
# Libelle des modules de liste de destinataires mailing
MailingModuleDescContactCompanies=Contacts des tiers (prospects, clients, fournisseurs...)
MailingModuleDescDolibarrUsers=Utilisateurs de Dolibarr ayant un e-mail
MailingModuleDescFundationMembers=Adh<64>rents ayant un e-mail
MailingModuleDescDolibarrUsers=Utilisateurs de Dolibarr avec e-mail
MailingModuleDescFundationMembers=Adh<64>rents avec e-mail
MailingModuleDescEmailsFromFile=EMails issus d'un fichier
LineInFile=Ligne %s du fichier
RecipientSelectionModules=Modules de s<>lection des destinataires
MailSelectedRecipients=Destinataires s<>lectionn<6E>s
MailingArea=Espace mailings

View File

@@ -1620,7 +1620,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
}
else
{
dolibarr_syslog("Functions.lib::dol_move_uploaded_file Failed to mode ".$src_file." to ".$file_name, LOG_ERR);
dolibarr_syslog("Functions.lib::dol_move_uploaded_file Failed to move ".$src_file." to ".$file_name, LOG_ERR);
return -3;
}
}