diff --git a/htdocs/includes/modules/mailings/myrtille.modules.php b/htdocs/includes/modules/mailings/myrtille.modules.php new file mode 100644 index 0000000000000000000000000000000000000000..e335da94760e3d8d495c89442cb58257b8264260 --- /dev/null +++ b/htdocs/includes/modules/mailings/myrtille.modules.php @@ -0,0 +1,183 @@ +<?php +/* Copyright (C) 2011 François Cerbelle <francois@cerbelle.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/myrtille.modules.php + * \ingroup mailing + * \brief Provides a list of recipients for mailing module + * \version $Revision$ + */ + +include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php'; + + +/** + * \class mailing_myrtille + * \brief Class to manage a list of personalised recipients for mailing feature + */ +class mailing_myrtille extends MailingTargets +{ + var $name='ContactsByFunction'; + // This label is used if no translation is found for key MailingModuleDescXXX where XXX=name is found + var $desc='Add contacts by function'; + var $require_admin=0; + + var $require_module=array(); + var $picto='contact'; + var $db; + + + function mailing_myrtille($DB) + { + $this->db=$DB; + } + + + /** + * This is the main function that returns the array of emails + * @param mailing_id Id of mailing. No need to use it. + * @param filterarray Function + * @return int <0 if error, number of emails added if ok + */ + function add_to_target($mailing_id,$filtersarray=array()) + { + global $conf; + + $target = array(); + + $sql = "SELECT sp.rowid, sp.email, sp.name, sp.firstname"; + $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; + $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')"; + $sql.= " AND (sp.poste IS NOT NULL AND sp.poste != '')"; + $sql.= " AND sp.entity = ".$conf->entity; + if ($filtersarray[0]<>'all') $sql.= " AND sp.poste ='".$filtersarray[0]."'"; + $sql.= " ORDER BY sp.name, sp.firstname"; + + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $obj= $this->db->fetch_object($resql); + $target[] = array( + 'email' => $obj->email, + 'name' => $obj->name, + 'firstname' => $obj->firstname, + 'other' => $other, + 'url' => '<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$obj->rowid.'">'.img_object('',"contact").'</a>' + ); + $i++; + } + } + + return parent::add_to_target($mailing_id, $target); + } + + + /** + * On the main mailing area, there is a box with statistics. + * If you want to add a line in this report you must provide an + * array of SQL request that returns two field: + * One called "label", One called "nb". + * @return array + */ + function getSqlArrayForStats() + { + global $conf; + + $statssql=array(); + for ($i=0; $i<5; $i++) { + $statssql[$i] = "SELECT sp.poste as label"; + $statssql[$i].= ", count(distinct(sp.email)) as nb"; + $statssql[$i].= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; + $statssql[$i].= " WHERE (sp.email IS NOT NULL AND sp.email != '')"; + $statssql[$i].= " AND (sp.poste IS NOT NULL AND sp.poste != '')"; + $statssql[$i].= " AND sp.entity = ".$conf->entity; + $statssql[$i].= " GROUP BY label"; + $statssql[$i].= " ORDER BY nb DESC"; + $statssql[$i].= " LIMIT $i,1"; + } + + return $statssql; + } + + + /** + * Return here number of distinct emails returned by your selector. + * @return int + */ + function getNbOfRecipients() + { + global $conf; + + $sql = "SELECT count(distinct(sp.email)) as nb"; + $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; + $sql.= " WHERE sp.entity = ".$conf->entity; + $sql.= " AND (sp.email IS NOT NULL AND sp.email != '')"; + $sql.= " AND (sp.poste IS NOT NULL AND sp.poste != '')"; + + // La requete doit retourner un champ "nb" pour etre comprise + // par parent::getNbOfRecipients + return parent::getNbOfRecipients($sql); + } + + /** + * This is to add a form filter to provide variant of selector + * If used, the HTML select must be called "filter" + * @return string A html select zone + */ + function formFilter() + { + global $conf, $langs; + + $langs->load("companies"); + + $sql = "SELECT sp.poste, count(distinct(sp.email)) AS nb"; + $sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp"; + $sql.= " WHERE sp.entity = ".$conf->entity; + $sql.= " AND (sp.email IS NOT NULL AND sp.email != '')"; + $sql.= " AND (sp.poste IS NOT NULL AND sp.poste != '')"; + $sql.= " GROUP BY sp.poste"; + $sql.= " ORDER BY sp.poste"; + + $resql = $this->db->query($sql); + + $s=''; + $s.='<select name="filter" class="flat">'; + $s.='<option value="all">'.$langs->trans("ContactsAllShort").'</option>'; + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + $s.='<option value="'.$obj->poste.'">'.$obj->poste.' ('.$obj->nb.')</option>'; + $i++; + } + } + $s.='</select>'; + return $s; + } + +} + +?> \ No newline at end of file diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index c831a5a129bf2a620edb2a14f01df0d1e8650ca0..0f4db70fc5674153f3eb98a08579cf9e7cf4965a 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -79,6 +79,7 @@ MailingModuleDescContactsCategories=Third parties with emails (by category) MailingModuleDescDolibarrContractsLinesExpired=Third parties with expired contract's lines MailingModuleDescContactsByCompanyCategory=Contacts with emails by third parties category MailingModuleDescMembersCategories=Foundation members with emails (by categories) +MailingModuleDescContactsByFunction=Contacts by position/function LineInFile=Line %s in file RecipientSelectionModules=Defined requests for recipient's selection diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang index 27c6182271df2f1795bff35dcbd055220edca843..c978791c23bc48741f0c45c0bc9c54fe50cd5e64 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -79,6 +79,7 @@ MailingModuleDescContactsCategories=Tiers avec e-mail (par catégorie) MailingModuleDescDolibarrContractsLinesExpired=Tiers avec lignes de contrats de services expirées MailingModuleDescContactsByCompanyCategory=Contacts avec e-mail par catégorie de tiers MailingModuleDescMembersCategories=Adhérents avec e-mail (par catégorie) +MailingModuleDescContactsByFunction=Contacts par poste/fonction LineInFile=Ligne %s du fichier RecipientSelectionModules=Modules de sélection des destinataires