diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index bbc827e3213..accfda48656 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -128,6 +128,8 @@ if ($_POST["button_removefilter"]) $search_email=''; } + + /* * Liste des destinataires */ @@ -164,7 +166,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) print ''.$langs->trans("MailTitle").''.$mil->titre.''; print ''.$langs->trans("MailFrom").''.htmlentities($mil->email_from).''; print ''.$langs->trans("Status").''.$mil->getLibStatut(4).''; - print ''.$langs->trans("TotalNbOfDistinctRecipients").''.($mil->nbemail?$mil->nbemail:''.$langs->trans("NoTargetYet").'').''; + print ''.$langs->trans("TotalNbOfDistinctRecipients").''.($mil->nbemail?$mil->nbemail:'0').''; print ''; print ""; @@ -183,7 +185,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) if ($user->admin) print ' '.info_admin($langs->trans("YouCanAddYourOwnPredefindedListHere"),1); print ''; print ''.$langs->trans("NbOfUniqueEMails").''; - print ''.$langs->trans("Filter").''; + print ''.$langs->trans("Filter").''; print ' '; print "\n"; @@ -231,7 +233,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) $var = !$var; print ''; - if ($mil->statut == 0) print '
'; + if ($mil->statut == 0) print ''; print ''; if (! $obj->picto) $obj->picto='generic'; @@ -255,13 +257,13 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) } print ''; - print ''; + print ''; $filter=$obj->formFilter(); if ($filter) print $filter; else print $langs->trans("None"); print ''; - print ''; + print ''; if ($mil->statut == 0) { print ''; @@ -287,8 +289,13 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) print '
'; print ''; - print_titre($langs->trans("ToClearAllRecipientsClickHere").'
'); - print '
'; + print_titre($langs->trans("ToClearAllRecipientsClickHere")); + print ''; + print ''; + print ''; + print ''; + print '
'; + print ''; print '
'; } @@ -319,7 +326,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) if ($search_nom) $addu.= "&search_nom=".urlencode($search_nom); if ($search_prenom) $addu.= "&search_prenom=".urlencode($search_prenom); if ($search_email) $addu.= "&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.= "&page=".$page; print ''; diff --git a/htdocs/conf/conf.class.php b/htdocs/conf/conf.class.php index ece7e106d66..78241010031 100644 --- a/htdocs/conf/conf.class.php +++ b/htdocs/conf/conf.class.php @@ -350,7 +350,11 @@ 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 */ diff --git a/htdocs/includes/modules/mailings/example.modules.php b/htdocs/includes/modules/mailings/example.modules.php index 2da5b99a69b..1e417796ad0 100644 --- a/htdocs/includes/modules/mailings/example.modules.php +++ b/htdocs/includes/modules/mailings/example.modules.php @@ -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; diff --git a/htdocs/includes/modules/mailings/fraise.modules.php b/htdocs/includes/modules/mailings/fraise.modules.php index 65f9101917b..a69d8c4bfcb 100644 --- a/htdocs/includes/modules/mailings/fraise.modules.php +++ b/htdocs/includes/modules/mailings/fraise.modules.php @@ -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 é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 ». - * */ /** @@ -159,7 +144,7 @@ class mailing_fraise extends MailingTargets $i = 0; $j = 0; - dolibarr_syslog("fraisemodules.php: mailing $num cibles trouvées"); + dolibarr_syslog(get_class($this)."::add_to_target mailing ".$num." targets found"); $old = ''; while ($i < $num) diff --git a/htdocs/includes/modules/mailings/modules_mailings.php b/htdocs/includes/modules/mailings/modules_mailings.php index 12b0a77060a..3055ce5ac56 100644 --- a/htdocs/includes/modules/mailings/modules_mailings.php +++ b/htdocs/includes/modules/mailings/modules_mailings.php @@ -169,7 +169,7 @@ class MailingTargets } } - dolibarr_syslog("mailing-prepare: mailing $j cibles ajoutées"); + dolibarr_syslog("MailingTargets::add_to_target: mailing ".$j." targets added"); $this->update_nb($mailing_id); diff --git a/htdocs/includes/modules/mailings/peche.modules.php b/htdocs/includes/modules/mailings/peche.modules.php new file mode 100644 index 00000000000..a76dbafb9c8 --- /dev/null +++ b/htdocs/includes/modules/mailings/peche.modules.php @@ -0,0 +1,201 @@ + + * + * 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é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é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é 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='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.=''; + return $s; + } + + /** + * \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()) + { + 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 = '
'.$langs->trans("FileTransferComplete").'
'; + //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)."
\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); + } + +} + +?> diff --git a/htdocs/includes/modules/mailings/poire.modules.php b/htdocs/includes/modules/mailings/poire.modules.php index 28ed1b0ec32..496b146a41d 100644 --- a/htdocs/includes/modules/mailings/poire.modules.php +++ b/htdocs/includes/modules/mailings/poire.modules.php @@ -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 é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 ». */ /** @@ -204,7 +190,7 @@ class mailing_poire extends MailingTargets $i = 0; $j = 0; - dolibarr_syslog("poire.modules.php: mailing $num cibles trouvées"); + dolibarr_syslog(get_class($this)."::add_to_target mailing ".$num." targets found"); $old = ''; while ($i < $num) diff --git a/htdocs/includes/modules/mailings/pomme.modules.php b/htdocs/includes/modules/mailings/pomme.modules.php index ac89a9ce8d2..88fbeb0bcb6 100644 --- a/htdocs/includes/modules/mailings/pomme.modules.php +++ b/htdocs/includes/modules/mailings/pomme.modules.php @@ -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 é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 ». */ /** @@ -129,7 +115,7 @@ class mailing_pomme extends MailingTargets $i = 0; $j = 0; - dolibarr_syslog("pomme.modules.php: mailing $num cibles trouvées"); + dolibarr_syslog(get_class($this)."::add_to_target mailing ".$num." targets found"); $old = ''; while ($i < $num) diff --git a/htdocs/includes/modules/modMailing.class.php b/htdocs/includes/modules/modMailing.class.php index 247c623e9df..8aa8361cc86 100644 --- a/htdocs/includes/modules/modMailing.class.php +++ b/htdocs/includes/modules/modMailing.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2005-2007 Laurent Destailleur + * Copyright (C) 2005-2008 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -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 { diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 0fe6b34c5de..1a4ebf77235 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -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 safe_mode is enabled on this PHP, check that Dolibarr php files owns to web server user (or group). diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index 43d1a7bcf6d..fdc3694c50c 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -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 diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index e90165f583d..256e9230b44 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -17,6 +17,7 @@ ErrorSupplierCodeRequired=Code fournisseur obligatoire ErrorSupplierCodeAlreadyUsed=Code fournisseur deja utilise ErrorBadParameters=Parametres incorrects ErrorFailedToWriteInDir=Impossible d'écrire dans le répertoire %s +ErrorFoundBadEmailInFile=Syntaxe de mail incorrecte trouvée pour %s lignes dans le fichier (exemple line %s avec email=%s) UserCannotBeDelete=L'utilisateur ne peut pas etre supprimée. Peut-être est-il associé à des éléments de Dolibarr. ErrorFieldsRequired=Des champs obligatoires n'ont pas été renseigné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 safe_mode a été activé sur ce PHP, vérifier que les fichiers php dolibarr appartiennent à l'utilisateur du serveur Web. diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang index be3bce2990a..c80cfd7dea9 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -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érents ayant un e-mail +MailingModuleDescDolibarrUsers=Utilisateurs de Dolibarr avec e-mail +MailingModuleDescFundationMembers=Adhé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és MailingArea=Espace mailings diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php index fe83c66017d..35a7790884a 100644 --- a/htdocs/lib/functions.lib.php +++ b/htdocs/lib/functions.lib.php @@ -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; } }