dolibarr  16.0.5
pomme.modules.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2005-2011 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <https://www.gnu.org/licenses/>.
17  * or see https://www.gnu.org/
18  */
19 
25 include_once DOL_DOCUMENT_ROOT.'/core/modules/mailings/modules_mailings.php';
26 
27 
32 {
33  public $name = 'DolibarrUsers'; // Identifiant du module mailing
34  // This label is used if no translation is found for key XXX neither MailingModuleDescXXX where XXX=name is found
35  public $desc = 'Dolibarr users with emails'; // Libelle utilise si aucune traduction pour MailingModuleDescXXX ou XXX=name trouv�e
36  public $require_module = array(); // Module mailing actif si modules require_module actifs
37  public $require_admin = 1; // Module mailing actif pour user admin ou non
38 
42  public $picto = 'user';
43 
47  public $db;
48 
49 
55  public function __construct($db)
56  {
57  $this->db = $db;
58  }
59 
60 
69  public function getSqlArrayForStats()
70  {
71  global $conf, $langs;
72 
73  $langs->load("users");
74 
75  $statssql = array();
76  $sql = "SELECT '".$this->db->escape($langs->trans("DolibarrUsers"))."' as label,";
77  $sql .= " count(distinct(u.email)) as nb";
78  $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
79  $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test
80  $sql .= " AND u.entity IN (0,".$conf->entity.")";
81  $statssql[0] = $sql;
82 
83  return $statssql;
84  }
85 
86 
95  public function getNbOfRecipients($sql = '')
96  {
97  global $conf;
98 
99  $sql = "SELECT count(distinct(u.email)) as nb";
100  $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
101  $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test
102  $sql .= " AND u.entity IN (0,".$conf->entity.")";
103 
104  // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
105  return parent::getNbOfRecipients($sql);
106  }
107 
108 
114  public function formFilter()
115  {
116  global $langs;
117 
118  $langs->load("users");
119 
120  $s = '';
121  $s .= '<select id="filter_pomme"" name="filter" class="flat">';
122  $s .= '<option value="-1">'.$langs->trans("Status").'</option>';
123  $s .= '<option value="1">'.$langs->trans("Enabled").'</option>';
124  $s .= '<option value="0">'.$langs->trans("Disabled").'</option>';
125  $s .= '</select>';
126  $s .= ajax_combobox("filter_pomme");
127 
128  $s .= ' ';
129  $s .= '<select id="filteremployee_pomme" name="filteremployee" class="flat">';
130  $s .= '<option value="-1">'.$langs->trans("Employee").'</option>';
131  $s .= '<option value="1">'.$langs->trans("Yes").'</option>';
132  $s .= '<option value="0">'.$langs->trans("No").'</option>';
133  $s .= '</select>';
134  $s .= ajax_combobox("filteremployee_pomme");
135 
136  return $s;
137  }
138 
139 
146  public function url($id)
147  {
148  return '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$id.'">'.img_object('', "user").'</a>';
149  }
150 
151 
152  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
159  public function add_to_target($mailing_id)
160  {
161  // phpcs:enable
162  global $conf, $langs;
163  $langs->load("companies");
164 
165  $cibles = array();
166 
167  // La requete doit retourner: id, email, fk_contact, lastname, firstname
168  $sql = "SELECT u.rowid as id, u.email as email, null as fk_contact,";
169  $sql .= " u.lastname, u.firstname as firstname, u.civility as civility_id, u.login, u.office_phone";
170  $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
171  $sql .= " WHERE u.email <> ''"; // u.email IS NOT NULL est implicite dans ce test
172  $sql .= " AND u.entity IN (0,".$conf->entity.")";
173  $sql .= " AND u.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".((int) $mailing_id).")";
174  if (GETPOSTISSET("filter") && GETPOST("filter") == '1') {
175  $sql .= " AND u.statut=1";
176  }
177  if (GETPOSTISSET("filter") && GETPOST("filter") == '0') {
178  $sql .= " AND u.statut=0";
179  }
180  if (GETPOSTISSET("filteremployee") && GETPOSt("filteremployee") == '1') {
181  $sql .= " AND u.employee=1";
182  }
183  if (GETPOSTISSET("filteremployee") && GETPOST("filteremployee") == '0') {
184  $sql .= " AND u.employee=0";
185  }
186  $sql .= " ORDER BY u.email";
187 
188  // Stocke destinataires dans cibles
189  $result = $this->db->query($sql);
190  if ($result) {
191  $num = $this->db->num_rows($result);
192  $i = 0;
193  $j = 0;
194 
195  dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
196 
197  $old = '';
198  while ($i < $num) {
199  $obj = $this->db->fetch_object($result);
200  if ($old <> $obj->email) {
201  $cibles[$j] = array(
202  'email' => $obj->email,
203  'fk_contact' => $obj->fk_contact,
204  'lastname' => $obj->lastname,
205  'firstname' => $obj->firstname,
206  'other' =>
207  ($langs->transnoentities("Login").'='.$obj->login).';'.
208  ($langs->transnoentities("UserTitle").'='.$obj->civility_id).';'.
209  ($langs->transnoentities("PhonePro").'='.$obj->office_phone),
210  'source_url' => $this->url($obj->id),
211  'source_id' => $obj->id,
212  'source_type' => 'user'
213  );
214  $old = $obj->email;
215  $j++;
216  }
217 
218  $i++;
219  }
220  } else {
221  dol_syslog($this->db->error());
222  $this->error = $this->db->error();
223  return -1;
224  }
225 
226  return parent::addTargetsToDatabase($mailing_id, $cibles);
227  }
228 }
ajax_combobox
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1')
Convert a html select field into an ajax combobox.
Definition: ajax.lib.php:438
db
$conf db
API class for accounts.
Definition: inc.php:41
mailing_pomme\__construct
__construct($db)
Constructor.
Definition: pomme.modules.php:55
GETPOST
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
Definition: functions.lib.php:484
MailingTargets
Parent class of emailing target selectors modules.
Definition: modules_mailings.php:32
mailing_pomme\add_to_target
add_to_target($mailing_id)
Ajoute destinataires dans table des cibles.
Definition: pomme.modules.php:159
mailing_pomme\formFilter
formFilter()
Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings.
Definition: pomme.modules.php:114
mailing_pomme\getSqlArrayForStats
getSqlArrayForStats()
On the main mailing area, there is a box with statistics.
Definition: pomme.modules.php:69
mailing_pomme
Class to offer a selector of emailing targets with Rule 'Pomme'.
Definition: pomme.modules.php:31
dol_syslog
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
Definition: functions.lib.php:1603
GETPOSTISSET
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
Definition: functions.lib.php:386
mailing_pomme\url
url($id)
Renvoie url lien vers fiche de la source du destinataire du mailing.
Definition: pomme.modules.php:146
img_object
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
Definition: functions.lib.php:4211
mailing_pomme\getNbOfRecipients
getNbOfRecipients($sql='')
Return here number of distinct emails returned by your selector.
Definition: pomme.modules.php:95