dolibarr 21.0.0-alpha
webhook.php
1<?php
2/* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.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 */
18
25// Load Dolibarr environment
26require '../main.inc.php';
27require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
28require_once DOL_DOCUMENT_ROOT.'/webhook/lib/webhook.lib.php';
29
30// Translations
31$langs->loadLangs(array("admin", "webhook"));
32
33// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
34$hookmanager->initHooks(array('webhooksetup', 'globalsetup'));
35
36// Access control
37if (!$user->admin) {
39}
40
41// Parameters
42$action = GETPOST('action', 'aZ09');
43$backtopage = GETPOST('backtopage', 'alpha');
44$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
45
46$value = GETPOST('value', 'alpha');
47$label = GETPOST('label', 'alpha');
48$scandir = GETPOST('scan_dir', 'alpha');
49$type = 'myobject';
50
51
52$error = 0;
53$setupnotempty = 0;
54
55// Set this to 1 to use the factory to manage constants. Warning, the generated module will be compatible with version v15+ only
56$useFormSetup = 1;
57
58if (!class_exists('FormSetup')) {
59 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formsetup.class.php';
60}
61
62$formSetup = new FormSetup($db);
63
64
65$setupnotempty = count($formSetup->items);
66
67
68$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
69
70
71/*
72 * Actions
73 */
74
75include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
76
77if ($action == 'updateMask') {
78 $maskconst = GETPOST('maskconst', 'aZ09');
79 $maskvalue = GETPOST('maskvalue', 'alpha');
80
81 if ($maskconst && preg_match('/_MASK$/', $maskconst)) {
82 $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity);
83 if (!($res > 0)) {
84 $error++;
85 }
86 }
87
88 if (!$error) {
89 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
90 } else {
91 setEventMessages($langs->trans("Error"), null, 'errors');
92 }
93} elseif ($action == 'setmod') {
94 // TODO Check if numbering module chosen can be activated by calling method canBeActivated
95 $tmpobjectkey = GETPOST('object', 'aZ09');
96 if (!empty($tmpobjectkey)) {
97 $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey)."_ADDON";
98 dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity);
99 }
100} elseif ($action == 'set') {
101 // Activate a model
102 $ret = addDocumentModel($value, $type, $label, $scandir);
103} elseif ($action == 'del') {
104 $ret = delDocumentModel($value, $type);
105 if ($ret > 0) {
106 $tmpobjectkey = GETPOST('object', 'aZ09');
107 if (!empty($tmpobjectkey)) {
108 $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey).'_ADDON_PDF';
109 if (getDolGlobalString($constforval) == "$value") {
110 dolibarr_del_const($db, $constforval, $conf->entity);
111 }
112 }
113 }
114} elseif ($action == 'setdoc') {
115 // Set or unset default model
116 $tmpobjectkey = GETPOST('object', 'aZ09');
117 if (!empty($tmpobjectkey)) {
118 $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey).'_ADDON_PDF';
119 if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) {
120 // The constant that was read before the new set
121 // We therefore requires a variable to have a coherent view
122 $conf->global->$constforval = $value;
123 }
124
125 // We disable/enable the document template (into llx_document_model table)
126 $ret = delDocumentModel($value, $type);
127 if ($ret > 0) {
128 $ret = addDocumentModel($value, $type, $label, $scandir);
129 }
130 }
131} elseif ($action == 'unsetdoc') {
132 $tmpobjectkey = GETPOST('object', 'aZ09');
133 if (!empty($tmpobjectkey)) {
134 $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey).'_ADDON_PDF';
135 dolibarr_del_const($db, $constforval, $conf->entity);
136 }
137}
138
139
140
141/*
142 * View
143 */
144
145$form = new Form($db);
146
147$help_url = '';
148$page_name = "WebhookSetup";
149
150llxHeader('', $langs->trans($page_name), $help_url, '', 0, 0, '', '', '', 'mod-admin page-webhook');
151
152// Subheader
153$linkback = '<a href="'.($backtopage ? $backtopage : DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1').'">'.$langs->trans("BackToModuleList").'</a>';
154
155print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup');
156
157// Configuration header
159print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "webhook");
160
161print '<br>';
162
163// Setup page goes here
164print '<span class="opacitymedium">'.$langs->trans("WebhookSetupPage", $langs->transnoentitiesnoconv("Targets")).'...</span><br><br>';
165
166
167if ($action == 'edit') {
168 if ($useFormSetup && (float) DOL_VERSION >= 15) { // @phpstan-ignore-line
169 print $formSetup->generateOutput(true);
170 } else {
171 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
172 print '<input type="hidden" name="token" value="'.newToken().'">';
173 print '<input type="hidden" name="action" value="update">';
174
175 print '<table class="noborder centpercent">';
176 print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
177
178 // @phan-suppress-next-line PhanEmptyForeach
179 foreach ($arrayofparameters as $constname => $val) {
180 if ($val['enabled'] == 1) {
181 $setupnotempty++;
182 print '<tr class="oddeven"><td>';
183 $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : '');
184 print '<span id="helplink'.$constname.'" class="spanforparamtooltip">'.$form->textwithpicto($langs->trans($constname), $tooltiphelp, 1, 'info', '', 0, 3, 'tootips'.$constname).'</span>';
185 print '</td><td>';
186
187 if ($val['type'] == 'textarea') {
188 print '<textarea class="flat" name="'.$constname.'" id="'.$constname.'" cols="50" rows="5" wrap="soft">' . "\n";
189 print getDolGlobalString($constname);
190 print "</textarea>\n";
191 } elseif ($val['type'] == 'html') {
192 require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
193 $doleditor = new DolEditor($constname, getDolGlobalString($constname), '', 160, 'dolibarr_notes', '', false, false, isModEnabled('fckeditor'), ROWS_5, '90%');
194 $doleditor->Create();
195 } elseif ($val['type'] == 'yesno') {
196 print $form->selectyesno($constname, getDolGlobalString($constname), 1);
197 } elseif (preg_match('/emailtemplate:/', $val['type'])) {
198 include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php';
199 $formmail = new FormMail($db);
200
201 $tmp = explode(':', $val['type']);
202 $nboftemplates = $formmail->fetchAllEMailTemplate($tmp[1], $user, null, 1); // We set lang=null to get in priority record with no lang
203 //$arraydefaultmessage = $formmail->getEMailTemplate($db, $tmp[1], $user, null, 0, 1, '');
204 $arrayofmessagename = array();
205 if (is_array($formmail->lines_model)) {
206 foreach ($formmail->lines_model as $modelmail) {
207 //var_dump($modelmail);
208 $moreonlabel = '';
209 if (!empty($arrayofmessagename[$modelmail->label])) {
210 $moreonlabel = ' <span class="opacitymedium">(' . $langs->trans("SeveralLangugeVariatFound") . ')</span>';
211 }
212 // The 'label' is the key that is unique if we exclude the language
213 $arrayofmessagename[$modelmail->id] = $langs->trans(preg_replace('/\‍(|\‍)/', '', $modelmail->label)) . $moreonlabel;
214 }
215 }
216 print $form->selectarray($constname, $arrayofmessagename, getDolGlobalString($constname), 'None', 0, 0, '', 0, 0, 0, '', '', 1);
217 } elseif (preg_match('/category:/', $val['type'])) {
218 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
219 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
220 $formother = new FormOther($db);
221
222 $tmp = explode(':', $val['type']);
223 print img_picto('', 'category', 'class="pictofixedwidth"');
224 print $formother->select_categories($tmp[1], getDolGlobalString($constname), $constname, 0, $langs->trans('CustomersProspectsCategoriesShort'));
225 } elseif (preg_match('/thirdparty_type/', $val['type'])) {
226 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
227 $formcompany = new FormCompany($db);
228 print $formcompany->selectProspectCustomerType(getDolGlobalString($constname), $constname);
229 } elseif ($val['type'] == 'securekey') {
230 print '<input required="required" type="text" class="flat" id="'.$constname.'" name="'.$constname.'" value="'.(GETPOST($constname, 'alpha') ? GETPOST($constname, 'alpha') : getDolGlobalString($constname)).'" size="40">';
231 if (!empty($conf->use_javascript_ajax)) {
232 print '&nbsp;'.img_picto($langs->trans('Generate'), 'refresh', 'id="generate_token'.$constname.'" class="linkobject"');
233 }
234
235 // Add button to autosuggest a key
236 include_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
237 print dolJSToSetRandomPassword($constname, 'generate_token'.$constname);
238 } elseif ($val['type'] == 'product') {
239 if (isModEnabled("product") || isModEnabled("service")) {
240 $selected = getDolGlobalString($constname);
241 $form->select_produits($selected, $constname, '', 0);
242 }
243 } else {
244 print '<input name="'.$constname.'" class="flat '.(empty($val['css']) ? 'minwidth200' : $val['css']).'" value="'.getDolGlobalString($constname).'">';
245 }
246 print '</td></tr>';
247 }
248 }
249 print '</table>';
250
251 print '<br><div class="center">';
252 print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
253 print '</div>';
254
255 print '</form>';
256 }
257
258 print '<br>';
259} else {
260 if ($useFormSetup && (float) DOL_VERSION >= 15) { // @phpstan-ignore-line
261 if (!empty($formSetup->items)) {
262 print $formSetup->generateOutput();
263 }
264 } else {
265 if (!empty($arrayofparameters)) {
266 print '<table class="noborder centpercent">';
267 print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
268
269 foreach ($arrayofparameters as $constname => $val) {
270 if ($val['enabled'] == 1) {
271 $setupnotempty++;
272 print '<tr class="oddeven"><td>';
273 $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : '');
274 print $form->textwithpicto($langs->trans($constname), $tooltiphelp);
275 print '</td><td>';
276
277 if ($val['type'] == 'textarea') {
278 print dol_nl2br(getDolGlobalString($constname));
279 } elseif ($val['type'] == 'html') {
280 print getDolGlobalString($constname);
281 } elseif ($val['type'] == 'yesno') {
282 print ajax_constantonoff($constname);
283 } elseif (preg_match('/emailtemplate:/', $val['type'])) {
284 include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php';
285 $formmail = new FormMail($db);
286
287 $tmp = explode(':', $val['type']);
288
289 $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname));
290 if ($template < 0) {
291 setEventMessages(null, $formmail->errors, 'errors');
292 }
293 print $langs->trans($template->label);
294 } elseif (preg_match('/category:/', $val['type'])) {
295 $c = new Categorie($db);
296 $result = $c->fetch(getDolGlobalString($constname));
297 if ($result < 0) {
298 setEventMessages(null, $c->errors, 'errors');
299 } elseif ($result > 0) {
300 $ways = $c->print_all_ways(' &gt;&gt; ', 'none', 0, 1); // $ways[0] = "ccc2 >> ccc2a >> ccc2a1" with html formatted text
301 $toprint = array();
302 foreach ($ways as $way) {
303 $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories"' . ($c->color ? ' style="background: #' . $c->color . ';"' : ' style="background: #bbb"') . '>' . $way . '</li>';
304 }
305 print '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
306 }
307 } elseif (preg_match('/thirdparty_type/', $val['type'])) {
308 if (getDolGlobalInt($constname) == 2) {
309 print $langs->trans("Prospect");
310 } elseif (getDolGlobalInt($constname) == 3) {
311 print $langs->trans("ProspectCustomer");
312 } elseif (getDolGlobalInt($constname) == 1) {
313 print $langs->trans("Customer");
314 } elseif (getDolGlobalInt($constname) == 0) {
315 print $langs->trans("NorProspectNorCustomer");
316 }
317 } elseif ($val['type'] == 'product') {
318 $product = new Product($db);
319 $resprod = $product->fetch(getDolGlobalInt($constname));
320 if ($resprod > 0) {
321 print $product->ref;
322 } elseif ($resprod < 0) {
323 setEventMessages(null, $object->errors, "errors");
324 }
325 } else {
326 print getDolGlobalString($constname);
327 }
328 print '</td></tr>';
329 }
330 }
331
332 print '</table>';
333 }
334 }
335
336 if ($setupnotempty) {
337 print '<div class="tabsAction">';
338 print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
339 print '</div>';
340 } else {
341 //print '<br>'.$langs->trans("NothingToSetup");
342 }
343}
344
345/*
346if (empty($setupnotempty)) {
347 print '<br>'.$langs->trans("NothingToSetup");
348}
349*/
350
351// Page end
352print dol_get_fiche_end();
353
354llxFooter();
355$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
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.
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:70
Class to manage categories.
Class to manage a WYSIWYG editor.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation du formulaire html d'envoi de mail unitaire Usage: $formail = new Form...
Class permettant la generation de composants html autre Only common components are here.
This class help you create setup render.
Class to manage products or services.
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)
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.
dol_nl2br($stringtoencode, $nl2brmode=0, $forxml=false)
Replace CRLF in string with a HTML BR tag.
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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dolJSToSetRandomPassword($htmlname, $htmlnameofbutton='generate_token', $generic=1)
Output javascript to autoset a generated password using default module into a HTML element.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
webhookAdminPrepareHead()
Prepare admin pages header.