dolibarr 25.0.0-alpha
ticket.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2013-2018 Jean-François FERRY <hello@librethic.io>
3 * Copyright (C) 2016 Christophe Battarel <christophe@altairis.fr>
4 * Copyright (C) 2022-2023 Udo Tamm <dev@dolibit.de>
5 * Copyright (C) 2023 Alexandre Spangaro <aspangaro@easya.solutions>
6 * Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
7 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
8 * Copyright (C) 2024-2025 Benjamin Falière <benjamin.faliere@altairis.fr>
9 *
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30// Load Dolibarr environment
31require '../main.inc.php';
32require_once DOL_DOCUMENT_ROOT."/core/class/html.formcategory.class.php";
33require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
34require_once DOL_DOCUMENT_ROOT."/core/lib/ticket.lib.php";
35require_once DOL_DOCUMENT_ROOT."/ticket/class/ticket.class.php";
36
46// Load translation files required by the page
47$langs->loadLangs(array("admin", "ticket"));
48
49// Access control
50if (!$user->admin) {
52}
53
54// Parameters
55$value = GETPOST('value', 'alpha');
56$action = GETPOST('action', 'aZ09');
57$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
58
59$label = GETPOST('label', 'alpha');
60$scandir = GETPOST('scan_dir', 'alpha');
61$type = 'ticket';
62
63$error = 0;
64$reg = array();
65
66// Initiate status list
67$statuslist = array(
68 Ticket::STATUS_IN_PROGRESS => $langs->trans("InProgress"),
69 Ticket::STATUS_NOT_READ => $langs->trans("NotRead"),
70 Ticket::STATUS_READ => $langs->trans("Read"),
71 Ticket::STATUS_ASSIGNED => $langs->trans("Assigned"),
72 Ticket::STATUS_NEED_MORE_INFO => $langs->trans("NeedMoreInformationShort"),
73 Ticket::STATUS_WAITING => $langs->trans("Waiting"),
74 Ticket::STATUS_CLOSED => $langs->trans("SolvedClosed")
75);
76
77/*
78 * Actions
79 */
80
81include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
82
83if (GETPOSTISSET('TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION')) { // only for no js case
84 $param_disable_email = GETPOST('TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION', 'alpha');
85 $res = dolibarr_set_const($db, 'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION', $param_disable_email, 'chaine', 0, '', $conf->entity);
86 if (!($res > 0)) {
87 $error++;
88 setEventMessages($db->lasterror(), null, 'errors');
89 }
90}
91
92if ($action == 'updateMask') {
93 $maskconstticket = GETPOST('maskconstticket', 'aZ09');
94 $maskticket = GETPOST('maskticket', 'alpha');
95
96 $res = 0;
97
98 if ($maskconstticket && preg_match('/_MASK$/', $maskconstticket)) {
99 $res = dolibarr_set_const($db, $maskconstticket, $maskticket, 'chaine', 0, '', $conf->entity);
100 }
101
102 if (!($res > 0)) {
103 $error++;
104 }
105
106 if (!$error) {
107 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
108 } else {
109 setEventMessages($langs->trans("Error"), null, 'errors');
110 }
111} elseif ($action == 'set') {
112 // Activate a model
113 $ret = addDocumentModel($value, $type, $label, $scandir);
114} elseif ($action == 'del') {
115 $ret = delDocumentModel($value, $type);
116 if ($ret > 0) {
117 if (getDolGlobalString('TICKET_ADDON_PDF') == "$value") {
118 dolibarr_del_const($db, 'TICKET_ADDON_PDF', $conf->entity);
119 }
120 }
121} elseif (preg_match('/set_(.*)/', $action, $reg)) {
122 $code = $reg[1];
123 $value = GETPOSTISSET($code) ? GETPOSTINT($code) : 1;
124 $res = dolibarr_set_const($db, $code, $value, 'chaine', 0, '', $conf->entity);
125 if (!($res > 0)) {
126 $error++;
127 }
128} elseif (preg_match('/del_(.*)/', $action, $reg)) {
129 $code = $reg[1];
130 $res = dolibarr_del_const($db, $code, $conf->entity);
131 if (!($res > 0)) {
132 $error++;
133 }
134} elseif ($action == 'setdoc') {
135 // Set default model
136 if (dolibarr_set_const($db, "TICKET_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity)) {
137 // The constant that was read before the new set
138 // We therefore requires a variable to have a coherent view
139 $conf->global->TICKET_ADDON_PDF = $value;
140 }
141
142 // Activate the model
143 $ret = delDocumentModel($value, $type);
144 if ($ret > 0) {
145 $ret = addDocumentModel($value, $type, $label, $scandir);
146 }
147} elseif ($action == 'setmod') {
148 // TODO check if the chosen numbering module can be activated
149 // by calling the canBeActivated method
150
151 dolibarr_set_const($db, "TICKET_ADDON", $value, 'chaine', 0, '', $conf->entity);
152} elseif ($action == 'setvarworkflow') {
153 // For compatibility when javascript is not enabled
154 if (empty($conf->use_javascript_ajax)) {
155 $param_auto_read = GETPOST('TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND', 'alpha');
156 $res = dolibarr_set_const($db, 'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND', $param_auto_read, 'chaine', 0, '', $conf->entity);
157 if (!($res > 0)) {
158 $error++;
159 }
160
161 $param_auto_assign = GETPOST('TICKET_AUTO_ASSIGN_USER_CREATE', 'alpha');
162 $res = dolibarr_set_const($db, 'TICKET_AUTO_ASSIGN_USER_CREATE', $param_auto_assign, 'chaine', 0, '', $conf->entity);
163 if (!($res > 0)) {
164 $error++;
165 }
166
167 $param_auto_notify_close = GETPOST('TICKET_NOTIFY_AT_CLOSING', 'alpha');
168 $res = dolibarr_set_const($db, 'TICKET_NOTIFY_AT_CLOSING', $param_auto_notify_close, 'chaine', 0, '', $conf->entity);
169 if (!($res > 0)) {
170 $error++;
171 }
172 }
173
174 $param_limit_view = GETPOST('TICKET_LIMIT_VIEW_ASSIGNED_ONLY', 'alpha');
175 $res = dolibarr_set_const($db, 'TICKET_LIMIT_VIEW_ASSIGNED_ONLY', $param_limit_view, 'chaine', 0, '', $conf->entity);
176 if (!($res > 0)) {
177 $error++;
178 }
179
180 $param_status = GETPOST('TICKET_SET_STATUS_ON_ANSWER');
181 $res = dolibarr_set_const($db, 'TICKET_SET_STATUS_ON_ANSWER', $param_status, 'chaine', 0, '', $conf->entity);
182 if (!($res > 0)) {
183 $error++;
184 }
185
186 $param_delay_first_response = GETPOSTINT('delay_first_response');
187 $res = dolibarr_set_const($db, 'TICKET_DELAY_BEFORE_FIRST_RESPONSE', $param_delay_first_response, 'chaine', 0, '', $conf->entity);
188 if (!($res > 0)) {
189 $error++;
190 }
191
192 $param_delay_between_responses = GETPOSTINT('delay_between_responses');
193 $res = dolibarr_set_const($db, 'TICKET_DELAY_SINCE_LAST_RESPONSE', $param_delay_between_responses, 'chaine', 0, '', $conf->entity);
194 if (!($res > 0)) {
195 $error++;
196 }
197} elseif ($action == 'setvar') {
198 include_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
199
200 $notification_email = GETPOST('TICKET_NOTIFICATION_EMAIL_FROM', 'alpha');
201 $notification_email_description = "Email of user allowed to send ticket replies from Dolibarr";
202 if (!empty($notification_email)) {
203 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_FROM', $notification_email, 'chaine', 0, $notification_email_description, $conf->entity);
204 } else { // If an empty e-mail address is providen, use the global "FROM" since an empty field will cause other issues
205 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_FROM', getDolGlobalString('MAIN_MAIL_EMAIL_FROM'), 'chaine', 0, $notification_email_description, $conf->entity);
206 }
207 if (!($res > 0)) {
208 $error++;
209 }
210
211 $notification_email_replyto = GETPOST('TICKET_NOTIFICATION_EMAIL_REPLYTO', 'alpha');
212 $notification_email_replyto_description = "Email that must appears as the sender of ticket replies sent from Dolibarr";
213 if (!empty($notification_email)) {
214 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_REPLYTO', $notification_email_replyto, 'chaine', 0, $notification_email_replyto_description, $conf->entity);
215 } else {
216 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_REPLYTO', getDolGlobalString('MAIN_MAIL_EMAIL_FROM'), 'chaine', 0, $notification_email_replyto_description, $conf->entity);
217 }
218 if (!($res > 0)) {
219 $error++;
220 }
221
222 // altairis : differentiate notification email FROM and TO
223 $notification_email_to = GETPOST('TICKET_NOTIFICATION_EMAIL_TO', 'alpha');
224 $notification_email_to_description = "Notified e-mail for ticket replies sent from Dolibarr";
225 if (!empty($notification_email_to)) {
226 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_TO', $notification_email_to, 'chaine', 0, $notification_email_to_description, $conf->entity);
227 } else {
228 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_TO', '', 'chaine', 0, $notification_email_to_description, $conf->entity);
229 }
230 if (!($res > 0)) {
231 $error++;
232 }
233
234 $notification_email_template = GETPOST('TICKET_NOTIFICATION_EMAIL_TEMPLATE', 'alpha');
235 $notification_email_template_description = 'Template email for ticket create notification';
236 if (!empty($notification_email_template)) {
237 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_TEMPLATE', $notification_email_template, 'chaine', 0, $notification_email_template_description, $conf->entity);
238 } else {
239 $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_EMAIL_TEMPLATE', '', 'chaine', 0, $notification_email_template_description, $conf->entity);
240 }
241 if (!($res > 0)) {
242 $error++;
243 }
244
245 $mail_intro = GETPOST('TICKET_MESSAGE_MAIL_INTRO', 'restricthtml');
246 $mail_intro_description = "Introduction text of ticket replies sent from Dolibarr";
247 if (!empty($mail_intro)) {
248 $res = dolibarr_set_const($db, 'TICKET_MESSAGE_MAIL_INTRO', $mail_intro, 'chaine', 0, $mail_intro_description, $conf->entity);
249 } else {
250 $res = dolibarr_set_const($db, 'TICKET_MESSAGE_MAIL_INTRO', '', 'chaine', 0, $mail_intro_description, $conf->entity);
251 }
252 if (!($res > 0)) {
253 $error++;
254 }
255
256 $mail_signature = GETPOST('TICKET_MESSAGE_MAIL_SIGNATURE', 'restricthtml');
257 $signature_description = "Signature of ticket replies sent from Dolibarr";
258 if (!empty($mail_signature)) {
259 $res = dolibarr_set_const($db, 'TICKET_MESSAGE_MAIL_SIGNATURE', $mail_signature, 'chaine', 0, $signature_description, $conf->entity);
260 } else {
261 $res = dolibarr_set_const($db, 'TICKET_MESSAGE_MAIL_SIGNATURE', '', 'chaine', 0, $signature_description, $conf->entity);
262 }
263 if (!($res > 0)) {
264 $error++;
265 }
266
267 $res = dolibarr_set_const($db, "TICKET_SEND_INTERNAL_CC", GETPOST("TICKET_SEND_INTERNAL_CC"), 'chaine', 0, '', $conf->entity);
268 if (!($res > 0)) {
269 $error++;
270 }
271}
272
273
274/*
275 * View
276 */
277
278$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
279
280$formcategory = new FormCategory($db);
281$form = new Form($db);
282
283// Page Header
284$help_url = 'EN:Module_Ticket|FR:Module_Ticket_FR';
285$page_name = 'TicketSetup';
286llxHeader('', $langs->trans($page_name), $help_url, '', 0, 0, '', '', '', 'mod-admin page-ticket');
287
288// Subheader
289$linkback = '<a href="'.dolBuildUrl(DOL_URL_ROOT.'/admin/modules.php', ['restore_lastsearch_values' => 1]).'">'.img_picto($langs->trans("BackToModuleList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToModuleList").'</span></a>';
290
291print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup');
292
293// Configuration header
294$head = ticketAdminPrepareHead();
295
296print dol_get_fiche_head($head, 'settings', $langs->trans("Module56000Name"), -1, "ticket");
297
298print '<span class="opacitymedium">'.$langs->trans("TicketSetupDictionaries").'</span> : <a href="'.DOL_URL_ROOT.'/admin/dict.php">'.$langs->trans("ClickHereToGoTo", $langs->transnoentitiesnoconv("DictionarySetup")).'</a><br>';
299
300print dol_get_fiche_end();
301
302
303/*
304 * Tickets numbering model
305 */
306
307$ticket = new Ticket($db);
308$ticket->initAsSpecimen();
309
310printNumberingModuleList('ticket', 'mod_ticket_', 'TICKET_ADDON', $langs->trans("TicketNumberingModules"), $ticket);
311
312
313
314/*
315 * Document templates generators
316 */
317
318printDocumentModelList($type, 'ticket', 'TICKET_ADDON_PDF', $langs->trans("TicketsModelModule"), array(
319 'Logo' => 'option_logo',
320 'MultiLanguage' => 'option_multilang',
321));
322print '<br>';
323
324
325print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'" enctype="multipart/form-data" spellcheck="false">';
326print '<input type="hidden" name="token" value="'.newToken().'">';
327print '<input type="hidden" name="action" value="setvarworkflow">';
328print '<input type="hidden" name="page_y" value="">';
329
330/*
331 * Other Parameters
332 */
333
334print load_fiche_titre($langs->trans("Other"), '', '');
335print '<div class="div-table-responsive-no-min">';
336print '<table class="noborder centpercent">';
337
338print '<tr class="liste_titre">';
339print '<td class="titlefieldmiddle">'.$langs->trans("Parameter").'</td>';
340print '<td></td>'."\n";
341print '<td class="center" width="40"></td>';
342print "</tr>\n";
343
344// Auto mark ticket as read when created from backoffice
345print '<tr class="oddeven"><td>'.$langs->trans("TicketsAutoReadTicket").'</td>';
346print '<td class="left">';
347if ($conf->use_javascript_ajax) {
348 print ajax_constantonoff('TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND');
349} else {
350 $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
351 print $formcategory->selectarray("TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND", $arrval, getDolGlobalString('TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND'));
352}
353print '</td>';
354print '<td class="center">';
355print $formcategory->textwithpicto('', $langs->trans("TicketsAutoReadTicketHelp"), 1, 'help');
356print '</td>';
357print '</tr>';
358
359// Auto mark ticket as read when assign someone
360print '<tr class="oddeven"><td>'.$langs->trans("TicketsAutoReadTicketWhenAssign").'</td>';
361print '<td class="left">';
362if ($conf->use_javascript_ajax) {
363 print ajax_constantonoff('TICKET_AUTO_READ_WHEN_ASSIGN');
364} else {
365 $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
366 print $formcategory->selectarray("TICKET_AUTO_READ_WHEN_ASSIGN", $arrval, getDolGlobalString('TICKET_AUTO_READ_WHEN_ASSIGN'));
367}
368print '</td>';
369print '<td class="center">';
370print $formcategory->textwithpicto('', $langs->trans("TicketsAutoReadTicketWhenAssignHelp"), 1, 'help');
371print '</td>';
372print '</tr>';
373
374
375// Auto assign ticket to user who created it
376print '<tr class="oddeven">';
377print '<td><label for="TICKET_AUTO_ASSIGN_USER_CREATE" class="block">'.$langs->trans("TicketsAutoAssignTicket").'</label></td>';
378print '<td class="left">';
379print '<input class="maxwidth50" type="text" id="TICKET_AUTO_ASSIGN_USER_CREATE" name="TICKET_AUTO_ASSIGN_USER_CREATE" value="'.getDolGlobalInt('TICKET_AUTO_ASSIGN_USER_CREATE').'">';
380print '</td>';
381print '<td class="center">';
382print $formcategory->textwithpicto('', $langs->trans("TicketsAutoAssignTicketHelp"), 1, 'help');
383print '</td>';
384print '</tr>';
385
386// Automatically define status on answering a ticket
387print '<tr class="oddeven"><td>'.$langs->trans("TicketAutoChangeStatusOnAnswer").'</td>';
388print '<td class="left">';
389print $formcategory->selectarray("TICKET_SET_STATUS_ON_ANSWER", $statuslist, getDolGlobalString('TICKET_SET_STATUS_ON_ANSWER'), 1);
390print '</td>';
391print '<td class="center">';
392print $formcategory->textwithpicto('', $langs->trans("TicketAutoChangeStatusOnAnswerHelp"), 1, 'help');
393print '</td>';
394print '</tr>';
395
396print '<tr class="oddeven">';
397print '<td><label for="delay_first_response" class="block">'.$langs->trans("TicketsDelayBeforeFirstAnswer")."</label></td>";
398print '<td class="left">
399 <input type="number" value="'.getDolGlobalString('TICKET_DELAY_BEFORE_FIRST_RESPONSE').'" id="delay_first_response" name="delay_first_response" class="width50">
400 </td>';
401print '<td class="center">';
402print $formcategory->textwithpicto('', $langs->trans("TicketsDelayBeforeFirstAnswerHelp"), 1, 'help');
403print '</td>';
404print '</tr>';
405
406print '<tr class="oddeven">';
407print '<td><label for="delay_between_responses" class="block">'.$langs->trans("TicketsDelayBetweenAnswers")."</label></td>";
408print '<td class="left">
409 <input type="number" value="'.getDolGlobalString('TICKET_DELAY_SINCE_LAST_RESPONSE').'" id="delay_between_responses" name="delay_between_responses" class="width50">
410 </td>';
411print '<td class="center">';
412print $formcategory->textwithpicto('', $langs->trans("TicketsDelayBetweenAnswersHelp"), 1, 'help');
413print '</td>';
414print '</tr>';
415
416print '</table>';
417
418print $formcategory->buttonsSaveCancel("Save", '', array(), 0, 'reposition');
419
420print '</form>';
421
422print '<br>';
423
424
425// TODO Use the notification module
426
427/*
428 * Notifications
429 */
430
431print load_fiche_titre($langs->trans("Notifications"), '', '');
432
433print '<table class="noborder centpercent">';
434
435print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'" enctype="multipart/form-data" spellcheck="false">';
436print '<input type="hidden" name="token" value="'.newToken().'">';
437print '<input type="hidden" name="action" value="setvar">';
438print '<input type="hidden" name="page_y" value="">';
439
440print '<tr class="liste_titre">';
441print '<td>'.$langs->trans("Parameter").'</td>';
442print '<td></td>';
443print '<td class="center" width="40"></td>';
444print "</tr>\n";
445
446if (!getDolGlobalString('FCKEDITOR_ENABLE_MAIL')) {
447 print '<tr>';
448 print '<td colspan="2"><div class="info">'.$langs->trans("TicketCkEditorEmailNotActivated").'</div></td>';
449 print '<td class="center" width="40"></td>';
450 print "</tr>\n";
451}
452
453// Email of sender allowed to send technical notifications
454print '<tr class="oddeven"><td><label for="TICKET_NOTIFICATION_EMAIL_FROM" class="block">'.$langs->trans("TicketEmailNotificationFrom").'</label></td>';
455print '<td class="left">';
456print img_picto('', 'email', 'class="pictofixedwidth"');
457print '<input type="text" class="minwidth200" id="TICKET_NOTIFICATION_EMAIL_FROM" name="TICKET_NOTIFICATION_EMAIL_FROM" value="' . getDolGlobalString('TICKET_NOTIFICATION_EMAIL_FROM').'"></td>';
458print '<td class="center">';
459print $formcategory->textwithpicto('', $langs->trans("TicketEmailNotificationFromHelp"), 1, 'help');
460print '</td>';
461print '</tr>';
462
463// Email that must appears as the sender of email notifications
464print '<tr class="oddeven"><td><label for="TICKET_NOTIFICATION_EMAIL_REPLYTO" class="block">'.$langs->trans("TicketEmailNotificationReplyTo").'</label></td>';
465print '<td class="left">';
466print img_picto('', 'email', 'class="pictofixedwidth"');
467print '<input type="text" class="minwidth200" id="TICKET_NOTIFICATION_EMAIL_REPLYTO" name="TICKET_NOTIFICATION_EMAIL_REPLYTO" value="' . getDolGlobalString('TICKET_NOTIFICATION_EMAIL_REPLYTO').'"></td>';
468print '<td class="center">';
469print $formcategory->textwithpicto('', $langs->trans("TicketEmailNotificationReplyToHelp"), 1, 'help');
470print '</td>';
471print '</tr>';
472
473print '<tr class="oddeven"><td class="titlefieldmiddle"><label for="TICKET_SEND_INTERNAL_CC" class="block">';
474print $form->textwithpicto($langs->trans("TicketSendToInternalCC"), $langs->trans("TicketSendToInternalCCHelp")).'</label></td>';
475print '<td>';
476print img_picto('', 'email', 'class="pictofixedwidth"');
477print '<input class="minwidth200" name="TICKET_SEND_INTERNAL_CC" value="'.getDolGlobalString('TICKET_SEND_INTERNAL_CC').'">';
478print '</td>';
479print '<td></td>';
480print '</tr>';
481
482
483// TODO Use module notification instead...
484
485// Email for notification of TICKET_CREATE
486print '<tr class="oddeven"><td><label for="TICKET_NOTIFICATION_EMAIL_TO" class="block">'.$langs->trans("TicketEmailNotificationTo").'</label></td>';
487print '<td class="left">';
488print img_picto('', 'email', 'class="pictofixedwidth"');
489print '<input type="text" class="minwidth200" id="TICKET_NOTIFICATION_EMAIL_TO" name="TICKET_NOTIFICATION_EMAIL_TO" value="'.getDolGlobalString('TICKET_NOTIFICATION_EMAIL_TO').'"></td>';
490print '<td class="center">';
491print $formcategory->textwithpicto('', $langs->trans("TicketEmailNotificationToHelp"), 1, 'help');
492print '</td>';
493print '</tr>';
494
495include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
496$formmail = new FormMail($db);
497
498$formmail->fetchAllEMailTemplate('ticket_send', $user, null, -1); // We set lang=null to get in priority record with no lang
499$arrayofmessagename = array();
500if (is_array($formmail->lines_model)) {
501 foreach ($formmail->lines_model as $modelmail) {
502 //var_dump($modelmail);
503 $moreonlabel = '';
504 if (!empty($arrayofmessagename[$modelmail->label])) {
505 $moreonlabel = ' <span class="opacitymedium">('.$langs->trans("SeveralLangugeVariatFound").')</span>';
506 }
507 // The 'label' is the key that is unique if we exclude the language
508 $arrayofmessagename[$modelmail->label.':ticket_send'] = $langs->trans(preg_replace('/\‍(|\‍)/', '', $modelmail->label)).$moreonlabel;
509 }
510}
511
512// Email template for notification of TICKET_CREATE
513print '<tr class="oddeven"><td><label for="TICKET_NOTIFICATION_EMAIL_TEMPLATE" class="block">'.$langs->trans('TicketEmailNotificationTemplate').'</label></td>';
514print '<td class="left">';
515print $form->selectarray('TICKET_NOTIFICATION_EMAIL_TEMPLATE', $arrayofmessagename, getDolGlobalString('TICKET_NOTIFICATION_EMAIL_TEMPLATE'), 'None', 0, 0, '', 0, 0, 0, '', '', 1);
516print '<td class="center">';
517print $formcategory->textwithpicto('', $langs->trans('TicketEmailNotificationTemplateHelp'), 1, 'help');
518print '</td>';
519print '</tr>';
520
521// Check "Notify thirdparty" by default on ticket creation
522print '<tr class="oddeven"><td>'.$langs->trans("TicketAutoCheckNotifyThirdParty").'</td>';
523print '<td class="left">';
524if ($conf->use_javascript_ajax) {
525 print ajax_constantonoff('TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION');
526} else {
527 $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
528 print $formcategory->selectarray("TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION", $arrval, getDolGlobalString('TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION'));
529}
530print '</td>';
531print '<td class="center">';
532print $formcategory->textwithpicto('', $langs->trans("TicketAutoCheckNotifyThirdPartyHelp"), 1, 'help');
533print '</td>';
534print '</tr>';
535
536// Auto notify contacts when closing the ticket
537print '<tr class="oddeven"><td>'.$langs->trans("TicketsAutoNotifyClose").'</td>';
538print '<td class="left">';
539if ($conf->use_javascript_ajax) {
540 print ajax_constantonoff('TICKET_NOTIFY_AT_CLOSING');
541} else {
542 $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
543 print $formcategory->selectarray("TICKET_NOTIFY_AT_CLOSING", $arrval, getDolGlobalString('TICKET_NOTIFY_AT_CLOSING'));
544}
545print '</td>';
546print '<td class="center">';
547print $formcategory->textwithpicto('', $langs->trans("TicketsAutoNotifyCloseHelp"), 1, 'help');
548print '</td>';
549print '</tr>';
550
551// Message header
552$mail_intro = getDolGlobalString('TICKET_MESSAGE_MAIL_INTRO', '');
553print '<tr class="oddeven"><td>'.$langs->trans("TicketMessageMailIntro");
554print '</td><td>';
555require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
556$doleditor = new DolEditor('TICKET_MESSAGE_MAIL_INTRO', $mail_intro, '100%', 90, 'dolibarr_mailings', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_MAIL'), ROWS_2, '70');
557$doleditor->Create();
558print '</td>';
559print '<td class="center">';
560print $formcategory->textwithpicto('', $langs->trans("TicketMessageMailIntroHelpAdmin"), 1, 'help');
561print '</td></tr>';
562
563// Message footer
564$mail_signature = getDolGlobalString('TICKET_MESSAGE_MAIL_SIGNATURE');
565print '<tr class="oddeven"><td>'.$langs->trans("TicketMessageMailFooter").'</label>';
566print '</td><td>';
567require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
568$doleditor = new DolEditor('TICKET_MESSAGE_MAIL_SIGNATURE', $mail_signature, '100%', 90, 'dolibarr_mailings', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_MAIL'), ROWS_2, '70');
569$doleditor->Create();
570print '</td>';
571print '<td class="center">';
572print $formcategory->textwithpicto('', $langs->trans("TicketMessageMailFooterHelpAdmin"), 1, 'help');
573print '</td></tr>';
574
575print '</table>';
576
577print $formcategory->buttonsSaveCancel("Save", '', array(), 0, 'reposition');
578
579print '</form>';
580
581// End of page
582llxFooter();
583$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.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
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:73
Class to manage a WYSIWYG editor.
Class to manage forms for categories.
Class to manage generation of HTML components Only common components must be here.
Class to manage a HTML form to send a unitary email Usage: $formail = new FormMail($db) $formmail->pr...
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
Definition html.lib.php:540
dol_get_fiche_end($notab=0)
Return tab footer of a card.
Definition html.lib.php:738
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
Class to generate the form for creating a new ticket.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
ticketAdminPrepareHead()
Build tabs for admin page.