dolibarr 21.0.0-beta
agenda_reminder.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
4 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26// Load Dolibarr environment
27require '../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
29require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
30require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
31require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
32require_once DOL_DOCUMENT_ROOT.'/cron/class/cronjob.class.php';
33
42if (!$user->admin) {
44}
45
46// Load translation files required by the page
47$langs->loadLangs(array("admin", "other", "agenda"));
48
49$action = GETPOST('action', 'aZ09');
50$value = GETPOST('value', 'alpha');
51$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
52
53$param = GETPOST('param', 'alpha');
54$cancel = GETPOST('cancel', 'alpha');
55$scandir = GETPOST('scandir', 'alpha');
56$type = 'action';
57
58$form = new Form($db);
59
60/*
61 * Actions
62 */
63
64include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
65
66if (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) {
67 $code = $reg[1];
68 $value = (GETPOST($code, 'alpha') ? GETPOST($code, 'alpha') : 1);
69 if (dolibarr_set_const($db, $code, $value, 'chaine', 0, '', $conf->entity) > 0) {
70 header("Location: ".$_SERVER["PHP_SELF"]);
71 exit;
72 } else {
73 dol_print_error($db);
74 }
75}
76
77if (preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) {
78 $code = $reg[1];
79 if (dolibarr_del_const($db, $code, $conf->entity) > 0) {
80 header("Location: ".$_SERVER["PHP_SELF"]);
81 exit;
82 } else {
83 dol_print_error($db);
84 }
85}
86if ($action == 'set') {
87 dolibarr_set_const($db, 'AGENDA_USE_EVENT_TYPE_DEFAULT', GETPOST('AGENDA_USE_EVENT_TYPE_DEFAULT'), 'chaine', 0, '', $conf->entity);
88 dolibarr_set_const($db, 'AGENDA_DEFAULT_FILTER_TYPE', GETPOST('AGENDA_DEFAULT_FILTER_TYPE'), 'chaine', 0, '', $conf->entity);
89 dolibarr_set_const($db, 'AGENDA_DEFAULT_FILTER_STATUS', GETPOST('AGENDA_DEFAULT_FILTER_STATUS'), 'chaine', 0, '', $conf->entity);
90 dolibarr_set_const($db, 'AGENDA_DEFAULT_VIEW', GETPOST('AGENDA_DEFAULT_VIEW'), 'chaine', 0, '', $conf->entity);
91 dolibarr_set_const($db, 'AGENDA_DEFAULT_REMINDER_OFFSET', GETPOSTINT('AGENDA_DEFAULT_REMINDER_OFFSET'), 'chaine', 0, '', $conf->entity);
92 dolibarr_set_const($db, 'AGENDA_DEFAULT_REMINDER_OFFSET_UNIT', GETPOST('AGENDA_DEFAULT_REMINDER_OFFSET_UNIT_type_duration'), 'chaine', 0, '', $conf->entity);
93 dolibarr_set_const($db, 'AGENDA_DEFAULT_REMINDER_EMAIL_MODEL', GETPOSTINT('AGENDA_DEFAULT_REMINDER_EMAIL_MODELmodel_mail'), 'chaine', 0, '', $conf->entity);
94 dolibarr_set_const($db, 'AGENDA_DEFAULT_REMINDER_EVENT_TYPES', json_encode(GETPOST('AGENDA_DEFAULT_REMINDER_EVENT_TYPES')), 'chaine', 0, '', $conf->entity);
95} elseif ($action == 'specimen') { // For orders
96 $modele = GETPOST('module', 'alpha');
97
98 $commande = new CommandeFournisseur($db);
99 $commande->initAsSpecimen();
100 $specimenthirdparty = new Societe($db);
101 $specimenthirdparty->initAsSpecimen();
102 $commande->thirdparty = $specimenthirdparty;
103
104 // Search template files
105 $file = '';
106 $classname = '';
107 $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
108 foreach ($dirmodels as $reldir) {
109 $file = dol_buildpath($reldir."core/modules/action/doc/pdf_".$modele.".modules.php", 0);
110 if (file_exists($file)) {
111 $classname = "pdf_".$modele;
112 break;
113 }
114 }
115
116 if ($classname !== '') {
117 require_once $file;
118
119 $module = new $classname($db, $commande);
120 '@phan-var-force pdf_standard_actions $module';
123 if ($module->write_file($commande, $langs) > 0) {
124 header("Location: ".DOL_URL_ROOT."/document.php?modulepart=action&file=SPECIMEN.pdf");
125 return;
126 } else {
127 setEventMessages($module->error, $module->errors, 'errors');
128 dol_syslog($module->error, LOG_ERR);
129 }
130 } else {
131 setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
132 dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
133 }
134} elseif ($action == 'setmodel') {
135 // Activate a model
136 //print "sssd".$value;
137 $ret = addDocumentModel($value, $type, $label, $scandir);
138} elseif ($action == 'del') {
139 $ret = delDocumentModel($value, $type);
140 if ($ret > 0) {
141 if ($conf->global->ACTION_EVENT_ADDON_PDF == "$value") {
142 dolibarr_del_const($db, 'ACTION_EVENT_ADDON_PDF', $conf->entity);
143 }
144 }
145} elseif ($action == 'setdoc') {
146 // Set default model
147 if (dolibarr_set_const($db, "ACTION_EVENT_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity)) {
148 // The constant that has been read in front of the new set
149 // is therefore passed through a variable to have a coherent display
150 $conf->global->ACTION_EVENT_ADDON_PDF = $value;
151 }
152
153 // On active le modele
154 $ret = delDocumentModel($value, $type);
155 if ($ret > 0) {
156 $ret = addDocumentModel($value, $type, $label, $scandir);
157 }
158}
159
160
166$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
167llxHeader('', '', '', '', 0, 0, '', '', '', 'mod-admin page-agenda_reminder');
168
169$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
170print load_fiche_titre($langs->trans("AgendaSetup"), $linkback, 'title_setup');
171
172
173$head = agenda_prepare_head();
174
175print dol_get_fiche_head($head, 'reminders', $langs->trans("Agenda"), -1, 'action');
176
177print '<form action="'.$_SERVER["PHP_SELF"].'" name="agenda">';
178print '<input type="hidden" name="token" value="'.newToken().'">';
179print '<input type="hidden" name="action" value="set">';
180
181print '<table class="noborder allwidth">'."\n";
182print '<tr class="liste_titre">'."\n";
183print '<td>'.$langs->trans("Parameters").'</td>'."\n";
184print '<td class="center">&nbsp;</td>'."\n";
185print '<td class="right"></td>'."\n";
186print '</tr>'."\n";
187
188// AGENDA REMINDER BROWSER
189print '<tr class="oddeven">'."\n";
190print '<td>';
191print $langs->trans('AGENDA_REMINDER_BROWSER').'<br>';
192print '<span class="opacitymedium">'.$langs->trans('AGENDA_REMINDER_BROWSERHelp').'</span>';
193print '</td>'."\n";
194print '<td class="center">&nbsp;</td>'."\n";
195print '<td class="right nowraponall">'."\n";
196
197if (!getDolGlobalString('AGENDA_REMINDER_BROWSER')) {
198 /*if (!isHTTPS()) {
199 $langs->load("errors");
200 print img_warning($langs->trans("WarningAvailableOnlyForHTTPSServers"), '', 'valignmiddle size15x').' ';
201 }*/
202 print '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_BROWSER&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
203 print '</td></tr>'."\n";
204} else {
205 /*if (!isHTTPS()) {
206 $langs->load("errors");
207 print img_warning($langs->trans("WarningAvailableOnlyForHTTPSServers"), '', 'valignmiddle size15x').' ';
208 }*/
209 print '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_BROWSER&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
210 print '</td></tr>'."\n";
211
212 /* This feature need to use the old method AGENDA_NOTIFICATION_METHOD = 'jsnotification' that is broken on a lot of browser setup
213 print '<tr class="oddeven">'."\n";
214 print '<td>'.$langs->trans('AGENDA_REMINDER_BROWSER_SOUND').'</td>'."\n";
215 print '<td class="center">&nbsp;</td>'."\n";
216 print '<td class="right">'."\n";
217
218 if (!getDolGlobalString('AGENDA_REMINDER_BROWSER_SOUND')) {
219 print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_BROWSER_SOUND&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
220 } else {
221 print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_BROWSER_SOUND&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
222 }
223
224 print '</td></tr>'."\n";
225 */
226}
227
228$job = new Cronjob($db);
229$job->fetch(0, 'ActionComm', 'sendEmailsReminder');
230
231// AGENDA REMINDER EMAIL
232print '<tr class="oddeven">'."\n";
233print '<td>';
234print $langs->trans('AGENDA_REMINDER_EMAIL', $langs->transnoentities("Module2300Name"));
235if (isModEnabled('cron')) {
236 if (getDolGlobalString('AGENDA_REMINDER_EMAIL')) {
237 if ($job->id > 0) {
238 if ($job->status == $job::STATUS_ENABLED) {
239 print '<br><span class="opacitymedium">'.$langs->trans("AGENDA_REMINDER_EMAIL_NOTE", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
240 }
241 }
242 }
243}
244print '</td>'."\n";
245print '<td class="center">&nbsp;</td>'."\n";
246print '<td class="right nowraponall">'."\n";
247
248if (!isModEnabled('cron')) {
249 print '<span class="opacitymedium">'.$langs->trans("WarningModuleNotActive", $langs->transnoentitiesnoconv("Module2300Name")).'</span>';
250} else {
251 if (!getDolGlobalString('AGENDA_REMINDER_EMAIL')) {
252 print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
253 } else {
254 // Get the max frequency of reminder
255 if ($job->id > 0) {
256 if ($job->status != $job::STATUS_ENABLED) {
257 $langs->load("cron");
258 print '<span class="opacitymedium warning">'.$langs->trans("JobXMustBeEnabled", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
259 } else {
260 print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
261 }
262 } else {
263 $langs->load("cron");
264 print '<span class="opacitymedium warning">'.$langs->trans("JobNotFound", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
265 }
266 }
267}
268
269// AGENDA DEFAULT REMINDER EVENT TYPE
270if (getDolGlobalString('AGENDA_REMINDER_EMAIL')) {
271 print '<tr class="oddeven">'."\n";
272 print '<td>';
273 print $langs->trans('AGENDA_DEFAULT_REMINDER_EVENT_TYPES', $langs->transnoentities("Module2300Name"));
274 print '<br><span class="opacitymedium">'.$langs->trans("AGENDA_DEFAULT_REMINDER_EVENT_TYPES_NOTE", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
275 print '</td>'."\n";
276 print '<td class="center">&nbsp;</td>'."\n";
277 print '<td class="right nowraponall">'."\n";
278 if (!isModEnabled('cron')) {
279 print '<span class="opacitymedium">'.$langs->trans("WarningModuleNotActive", $langs->transnoentitiesnoconv("Module2300Name")).'</span>';
280 } else {
281 if (GETPOSTISSET('AGENDA_DEFAULT_REMINDER_EVENT_TYPES')) {
282 $selected = GETPOST('AGENDA_DEFAULT_REMINDER_EVENT_TYPES');
283 } else {
284 $selected = json_decode(getDolGlobalString('AGENDA_DEFAULT_REMINDER_EVENT_TYPES', ''));
285 }
286 print $formactions->select_type_actions($selected, "AGENDA_DEFAULT_REMINDER_EVENT_TYPES", "systemauto", 0, -1, 1, 1);
287 print '</td></tr>';
288 }
289}
290
291// AGENDA DEFAULT REMINDER OFFSET
292if (getDolGlobalString('AGENDA_REMINDER_EMAIL')) {
293 print '<tr class="oddeven">'."\n";
294 print '<td>';
295 print $langs->trans('AGENDA_DEFAULT_REMINDER_OFFSET', $langs->transnoentities("Module2300Name"));
296 print '</td>'."\n";
297 print '<td class="center">&nbsp;</td>'."\n";
298 print '<td class="right nowraponall">'."\n";
299 if (!isModEnabled('cron')) {
300 print '<span class="opacitymedium">'.$langs->trans("WarningModuleNotActive", $langs->transnoentitiesnoconv("Module2300Name")).'</span>';
301 } else {
302 print '<input class="width50" type="number" name="AGENDA_DEFAULT_REMINDER_OFFSET" value="'.(GETPOSTISSET('AGENDA_DEFAULT_REMINDER_OFFSET') ? GETPOSTINT('AGENDA_DEFAULT_REMINDER_OFFSET') : getDolGlobalInt('AGENDA_DEFAULT_REMINDER_OFFSET', 30)).'"> ';
303 $selected = (GETPOSTISSET('AGENDA_DEFAULT_REMINDER_OFFSET_UNIT_type_duration') ? GETPOST('AGENDA_DEFAULT_REMINDER_OFFSET_UNIT_type_duration') : getDolGlobalString('AGENDA_DEFAULT_REMINDER_OFFSET_UNIT', 'i'));
304 print $form->selectTypeDuration('AGENDA_DEFAULT_REMINDER_OFFSET_UNIT_', $selected, array('y', 'm'));
305 }
306}
307
308// AGENDA DEFAULT EMAIL MODEL
309if (getDolGlobalString('AGENDA_REMINDER_EMAIL')) {
310 print '<tr class="oddeven">'."\n";
311 print '<td>';
312 print $langs->trans('AGENDA_DEFAULT_REMINDER_EMAIL_MODEL', $langs->transnoentities("Module2300Name"));
313 print '</td>'."\n";
314 print '<td class="center">&nbsp;</td>'."\n";
315 print '<td class="right nowraponall">'."\n";
316 if (!isModEnabled('cron')) {
317 print '<span class="opacitymedium">'.$langs->trans("WarningModuleNotActive", $langs->transnoentitiesnoconv("Module2300Name")).'</span>';
318 } else {
319 $selected = (GETPOSTISSET('AGENDA_DEFAULT_REMINDER_EMAIL_MODELmodel_mail') ? GETPOST('AGENDA_DEFAULT_REMINDER_EMAIL_MODELmodel_mail') : getDolGlobalInt('AGENDA_DEFAULT_REMINDER_EMAIL_MODEL', 0));
320 print $form->selectModelMail('AGENDA_DEFAULT_REMINDER_EMAIL_MODEL', 'actioncomm_send', 1, 1, $selected);
321 }
322}
323print '</td></tr>'."\n";
324
325print '</table>';
326
327print dol_get_fiche_end();
328
329print '<div class="center">';
330print '<input type="submit" id="save" name="save" class="button hideifnotset button-save" value="'.$langs->trans("Save").'">';
331print '</div>';
332
333print '</form>';
334
335print "<br>";
336
337// End of page
338llxFooter();
339$db->close();
addDocumentModel($name, $type, $label='', $description='')
Add document model used by doc generator.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
delDocumentModel($name, $type)
Delete document model used by doc generator.
agenda_prepare_head()
Prepare array with list of tabs.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif( $action=='specimen') elseif($action=='setmodel') elseif( $action=='del') elseif($action=='setdoc') $formactions
View.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:71
Class to manage predefined suppliers products.
Cron Job class.
Class to manage building of HTML components.
Class to manage generation of HTML components Only common components must be here.
Class to manage third parties objects (customers, suppliers, prospects...)
llxFooter()
Footer empty.
Definition document.php:107
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.