dolibarr 18.0.6
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
25include_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
82 $statssql[0] = $sql;
83
84 return $statssql;
85 }
86
87
96 public function getNbOfRecipients($sql = '')
97 {
98 global $conf;
99
100 $sql = "SELECT count(distinct(u.email)) as nb";
101 $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
102 $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test
103 $sql .= " AND u.entity IN (0,".$conf->entity.")";
104 if (empty($this->evenunsubscribe)) {
105 $sql .= " AND NOT EXISTS (SELECT rowid FROM ".MAIN_DB_PREFIX."mailing_unsubscribe as mu WHERE mu.email = u.email and mu.entity = ".((int) $conf->entity).")";
106 }
107
108 // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
109 return parent::getNbOfRecipients($sql);
110 }
111
112
118 public function formFilter()
119 {
120 global $langs;
121
122 $langs->load("users");
123
124 $s = '';
125 $s .= '<select id="filter_pomme"" name="filter" class="flat minwidth100">';
126 $s .= '<option value="-1">'.$langs->trans("Status").'</option>';
127 $s .= '<option value="1">'.$langs->trans("Enabled").'</option>';
128 $s .= '<option value="0">'.$langs->trans("Disabled").'</option>';
129 $s .= '</select>';
130 $s .= ajax_combobox("filter_pomme");
131
132 $s .= ' ';
133 $s .= '<select id="filteremployee_pomme" name="filteremployee" class="flat minwidth100">';
134 $s .= '<option value="-1">'.$langs->trans("Employee").'</option>';
135 $s .= '<option value="1">'.$langs->trans("Yes").'</option>';
136 $s .= '<option value="0">'.$langs->trans("No").'</option>';
137 $s .= '</select>';
138 $s .= ajax_combobox("filteremployee_pomme");
139
140 return $s;
141 }
142
143
150 public function url($id)
151 {
152 return '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$id.'">'.img_object('', "user").'</a>';
153 }
154
155
156 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
163 public function add_to_target($mailing_id)
164 {
165 // phpcs:enable
166 global $conf, $langs;
167 $langs->load("companies");
168
169 $cibles = array();
170
171 // La requete doit retourner: id, email, fk_contact, lastname, firstname
172 $sql = "SELECT u.rowid as id, u.email as email, null as fk_contact,";
173 $sql .= " u.lastname, u.firstname as firstname, u.civility as civility_id, u.login, u.office_phone";
174 $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
175 $sql .= " WHERE u.email <> ''"; // u.email IS NOT NULL est implicite dans ce test
176 $sql .= " AND u.entity IN (0,".$conf->entity.")";
177 $sql .= " AND u.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".((int) $mailing_id).")";
178 if (GETPOSTISSET("filter") && GETPOST("filter") == '1') {
179 $sql .= " AND u.statut=1";
180 }
181 if (GETPOSTISSET("filter") && GETPOST("filter") == '0') {
182 $sql .= " AND u.statut=0";
183 }
184 if (GETPOSTISSET("filteremployee") && GETPOSt("filteremployee") == '1') {
185 $sql .= " AND u.employee=1";
186 }
187 if (GETPOSTISSET("filteremployee") && GETPOST("filteremployee") == '0') {
188 $sql .= " AND u.employee=0";
189 }
190 if (empty($this->evenunsubscribe)) {
191 $sql .= " AND NOT EXISTS (SELECT rowid FROM ".MAIN_DB_PREFIX."mailing_unsubscribe as mu WHERE mu.email = u.email and mu.entity = ".((int) $conf->entity).")";
192 }
193 $sql .= " ORDER BY u.email";
194
195 // Stocke destinataires dans cibles
196 $result = $this->db->query($sql);
197 if ($result) {
198 $num = $this->db->num_rows($result);
199 $i = 0;
200 $j = 0;
201
202 dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
203
204 $old = '';
205 while ($i < $num) {
206 $obj = $this->db->fetch_object($result);
207 if ($old <> $obj->email) {
208 $cibles[$j] = array(
209 'email' => $obj->email,
210 'fk_contact' => $obj->fk_contact,
211 'lastname' => $obj->lastname,
212 'firstname' => $obj->firstname,
213 'other' =>
214 ($langs->transnoentities("Login").'='.$obj->login).';'.
215 ($langs->transnoentities("UserTitle").'='.$obj->civility_id).';'.
216 ($langs->transnoentities("PhonePro").'='.$obj->office_phone),
217 'source_url' => $this->url($obj->id),
218 'source_id' => $obj->id,
219 'source_type' => 'user'
220 );
221 $old = $obj->email;
222 $j++;
223 }
224
225 $i++;
226 }
227 } else {
228 dol_syslog($this->db->error());
229 $this->error = $this->db->error();
230 return -1;
231 }
232
233 return parent::addTargetsToDatabase($mailing_id, $cibles);
234 }
235}
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Definition ajax.lib.php:449
Parent class of emailing target selectors modules.
Class to offer a selector of emailing targets with Rule 'Pomme'.
formFilter()
Affiche formulaire de filtre qui apparait dans page de selection des destinataires de mailings.
getNbOfRecipients($sql='')
Return here number of distinct emails returned by your selector.
__construct($db)
Constructor.
url($id)
Renvoie url lien vers fiche de la source du destinataire du mailing.
add_to_target($mailing_id)
Ajoute destinataires dans table des cibles.
getSqlArrayForStats()
On the main mailing area, there is a box with statistics.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.