diff --git a/htdocs/includes/modules/mailings/banane.modules.php b/htdocs/includes/modules/mailings/banane.modules.php new file mode 100644 index 0000000000000000000000000000000000000000..8725a4a0484a7cd5ff2f81c2bdb5045b4cb2ad14 --- /dev/null +++ b/htdocs/includes/modules/mailings/banane.modules.php @@ -0,0 +1,196 @@ +<?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/banane.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_banane + * \brief Class to manage a list of personalised recipients for mailing feature + */ +class mailing_banane extends MailingTargets +{ + var $name='ContactsByCompanyCategory'; + // This label is used if no translation is found for key MailingModuleDescXXX where XXX=name is found + var $desc='Add contacts by company category'; + var $require_admin=0; + + var $require_module=array(); + var $picto='contact'; + var $db; + + + function mailing_banane($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 Category + * @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.= ", ".MAIN_DB_PREFIX."categorie as c"; + $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs"; + $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')"; + $sql.= " AND sp.entity = ".$conf->entity; + $sql.= " AND cs.fk_categorie = c.rowid"; + $sql.= " AND cs.fk_societe = sp.fk_soc"; + + if ($filtersarray[0] <> 'all') $sql.= " AND c.label = '".$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, $langs; + + $statssql=array(); + for ($i=0; $i<5; $i++) { + $statssql[$i] = "SELECT c.label, count(sp.rowid) AS nb"; + $statssql[$i].= " FROM ".MAIN_DB_PREFIX."categorie as c"; + $statssql[$i].= ", ".MAIN_DB_PREFIX."categorie_societe as cs"; + $statssql[$i].= ", ".MAIN_DB_PREFIX."socpeople as sp"; + $statssql[$i].= " WHERE (sp.email IS NOT NULL AND sp.email != '')"; + $statssql[$i].= " AND sp.entity = ".$conf->entity; + $statssql[$i].= " AND cs.fk_categorie = c.rowid"; + $statssql[$i].= " AND cs.fk_societe = sp.fk_soc"; + $statssql[$i].= " GROUP BY c.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."categorie as c"; + $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs"; + $sql.= ", ".MAIN_DB_PREFIX."socpeople as sp"; + $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')"; + $sql.= " AND sp.entity = ".$conf->entity; + $sql.= " AND cs.fk_categorie = c.rowid"; + $sql.= " AND cs.fk_societe = sp.fk_soc"; + // 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 c.label, count(distinct(sp.email)) AS nb"; + $sql.= " FROM ".MAIN_DB_PREFIX."categorie as c"; + $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs"; + $sql.= ", ".MAIN_DB_PREFIX."socpeople as sp"; + $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')"; + $sql.= " AND sp.entity = ".$conf->entity; + $sql.= " AND cs.fk_categorie = c.rowid"; + $sql.= " AND cs.fk_societe = sp.fk_soc"; + $sql.= " GROUP BY c.label"; + $sql.= " ORDER BY c.label"; + + $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->label.'">'.$obj->label.' ('.$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 fa8fb1144950cb99f16f4f84fb06225d644fb04a..c831a5a129bf2a620edb2a14f01df0d1e8650ca0 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -77,6 +77,8 @@ MailingModuleDescFundationMembers=Foundation members with emails MailingModuleDescEmailsFromFile=EMails from a text file (email;lastname;firstname;other) 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) 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 f195ae6303362b944556efcd44e642cfe7c4494d..27c6182271df2f1795bff35dcbd055220edca843 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -77,6 +77,8 @@ MailingModuleDescFundationMembers=Adhérents avec e-mail MailingModuleDescEmailsFromFile=EMails issus d'un fichier texte (email;nom;prenom;autre) 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) LineInFile=Ligne %s du fichier RecipientSelectionModules=Modules de sélection des destinataires