dolibarr 25.0.0-alpha
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 * Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
5 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 * or see https://www.gnu.org/
20 */
21
27include_once DOL_DOCUMENT_ROOT.'/core/modules/mailings/modules_mailings.php';
28
29
34{
38 public $name = 'DolibarrUsers';
39
43 public $desc = 'Dolibarr users with emails'; // Label used if no translation found for MailingModuleDescXXX or XXX=name
44
48 public $require_module = array();
49
53 public $require_admin = 1;
54
58 public $picto = 'user';
59
60
66 public function __construct($db)
67 {
68 $this->db = $db;
69 }
70
71
80 public function getSqlArrayForStats()
81 {
82 global $conf, $langs;
83
84 $langs->load("users");
85
86 $statssql = array();
87 $sql = "SELECT '".$this->db->escape($langs->trans("DolibarrUsers"))."' as label,";
88 $sql .= " count(distinct(u.email)) as nb";
89 $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
90 $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicit dans ce test
91 $sql .= " AND u.entity IN (0,".((int) $conf->entity).")";
92
93 $statssql[0] = $sql;
94
95 return $statssql;
96 }
97
98
107 public function getNbOfRecipients($sql = '')
108 {
109 global $conf;
110
111 $sql = "SELECT count(distinct(u.email)) as nb";
112 $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
113 $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicit dans ce test
114 $sql .= " AND u.entity IN (0,".((int) $conf->entity).")";
115 $sql .= $this->getSqlToExcludeUnsubscribed('u.email');
116
117 // The query must return a field "nb" to be understood by parent::getNbOfRecipients
118 return parent::getNbOfRecipients($sql);
119 }
120
121
127 public function formFilter()
128 {
129 global $langs;
130
131 $langs->load("users");
132
133 $s = '';
134 $s .= '<select id="filter_pomme"" name="filter" class="flat minwidth100">';
135 $s .= '<option value="-1">'.$langs->trans("Status").'</option>';
136 $s .= '<option value="1">'.$langs->trans("Enabled").'</option>';
137 $s .= '<option value="0">'.$langs->trans("Disabled").'</option>';
138 $s .= '</select>';
139 $s .= ajax_combobox("filter_pomme");
140
141 $s .= ' ';
142 $s .= '<select id="filteremployee_pomme" name="filteremployee" class="flat minwidth100">';
143 $s .= '<option value="-1">'.$langs->trans("Employee").'</option>';
144 $s .= '<option value="1">'.$langs->trans("Yes").'</option>';
145 $s .= '<option value="0">'.$langs->trans("No").'</option>';
146 $s .= '</select>';
147 $s .= ajax_combobox("filteremployee_pomme");
148
149 return $s;
150 }
151
152
159 public function url($id)
160 {
161 return '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$id.'">'.img_object('', "user").'</a>';
162 }
163
164
165 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
172 public function add_to_target($mailing_id)
173 {
174 // phpcs:enable
175 global $conf, $langs;
176 $langs->load("companies");
177
178 $cibles = array();
179
180 // The query must return: id, email, fk_contact, lastname, firstname
181 $sql = "SELECT u.rowid as id, u.email as email, null as fk_contact,";
182 $sql .= " u.lastname, u.firstname as firstname, u.civility as civility_id, u.login, u.office_phone";
183 $sql .= " FROM ".MAIN_DB_PREFIX."user as u";
184 $sql .= " WHERE u.email <> ''"; // u.email IS NOT NULL est implicit dans ce test
185 $sql .= " AND u.entity IN (0,".((int) $conf->entity).")";
186 $sql .= " AND u.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".((int) $mailing_id).")";
187 if (GETPOSTISSET("filter") && GETPOST("filter") == '1') {
188 $sql .= " AND u.statut=1";
189 }
190 if (GETPOSTISSET("filter") && GETPOST("filter") == '0') {
191 $sql .= " AND u.statut=0";
192 }
193 if (GETPOSTISSET("filteremployee") && GETPOST("filteremployee") == '1') {
194 $sql .= " AND u.employee=1";
195 }
196 if (GETPOSTISSET("filteremployee") && GETPOST("filteremployee") == '0') {
197 $sql .= " AND u.employee=0";
198 }
199 $sql .= $this->getSqlToExcludeUnsubscribed('u.email');
200 $sql .= " ORDER BY u.email";
201
202 // Store recipients into targets
203 $result = $this->db->query($sql);
204 if ($result) {
205 $num = $this->db->num_rows($result);
206 $i = 0;
207 $j = 0;
208
209 dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
210
211 $old = '';
212 while ($i < $num) {
213 $obj = $this->db->fetch_object($result);
214 if ($old != $obj->email) {
215 $cibles[$j] = array(
216 'email' => $obj->email,
217 'fk_contact' => (int) $obj->fk_contact,
218 'lastname' => $obj->lastname,
219 'firstname' => $obj->firstname,
220 'other' =>
221 ($langs->transnoentities("Login").'='.$obj->login).';'.
222 ($langs->transnoentities("UserTitle").'='.$obj->civility_id).';'.
223 ($langs->transnoentities("PhonePro").'='.$obj->office_phone),
224 'source_url' => $this->url($obj->id),
225 'source_id' => (int) $obj->id,
226 'source_type' => 'user'
227 );
228 $old = $obj->email;
229 $j++;
230 }
231
232 $i++;
233 }
234 } else {
235 dol_syslog($this->db->error());
236 $this->error = $this->db->error();
237 return -1;
238 }
239
240 return parent::addTargetsToDatabase($mailing_id, $cibles);
241 }
242}
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
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:476
Parent class of emailing target selectors modules.
getSqlToExcludeUnsubscribed($emailfield)
Return the SQL fragment that excludes email addresses which opted out of emailings for the current en...
Class to offer a selector of emailing targets with Rule 'Pomme'.
formFilter()
Display filter form shown on the mailing recipient selection page.
getNbOfRecipients($sql='')
Return here number of distinct emails returned by your selector.
__construct($db)
Constructor.
url($id)
Provide the URL to the car of the source information of the recipient for the mailing.
add_to_target($mailing_id)
Ajoute destinataires dans table des cibles.
getSqlArrayForStats()
On the main mailing area, there is a box with statistics.
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=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.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)