dolibarr 24.0.2
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2005-2021 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2011 Herve Prot <herve.prot@symeos.com>
6 * Copyright (C) 2012 Florian Henry <florian.henry@open-concept.pro>
7 * Copyright (C) 2018 Juanjo Menent <jmenent@2byte.es>
8 * Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
9 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
10 * Copyright (C) 2025 Charlene Benke <charlene@patas-monkey.com>
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 3 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program. If not, see <https://www.gnu.org/licenses/>.
24 */
25
31// Load Dolibarr environment
32require '../../main.inc.php';
42require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
43require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
44require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
45require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
46
47// Define if user can read permissions
48$permissiontoadd = ($user->admin || $user->hasRight("user", "user", "write"));
49$permissiontoread = ($user->admin || $user->hasRight("user", "user", "read"));
50$permissiontoedit = ($user->admin || $user->hasRight("user", "user", "write"));
51$permissiontodisable = ($user->admin || $user->hasRight("user", "user", "delete"));
52$feature2 = 'user';
53
54// Advanced permissions
55$advancedpermsactive = false;
56if (getDolGlobalString('MAIN_USE_ADVANCED_PERMS')) {
57 $advancedpermsactive = true;
58 $permissiontoread = ($user->admin || ($user->hasRight("user", "group_advance", "read") && $user->hasRight("user", "group_advance", "readperms")));
59 $permissiontoedit = ($user->admin || $user->hasRight("user", "group_advance", "write"));
60 $permissiontodisable = ($user->admin || $user->hasRight("user", "group_advance", "delete"));
61 $feature2 = 'group_advance';
62}
63
64// Load translation files required by page
65$langs->loadLangs(array('users', 'other'));
66
67$id = GETPOSTINT('id');
68$action = GETPOST('action', 'aZ09');
69$cancel = GETPOST('cancel');
70$confirm = GETPOST('confirm', 'alpha');
71$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'groupcard'; // To manage different context of search
72$backtopage = GETPOST('backtopage', 'alpha');
73
74$userid = GETPOSTINT('user');
75
76$object = new UserGroup($db);
77
78// fetch optionals attributes and labels
79$extrafields->fetch_name_optionals_label($object->table_element);
80
81// Load object
82include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be 'include', not 'include_once'.
83$object->loadRights();
84
85// Initialize a technical object to manage hooks. Note that conf->hooks_modules contains array
86$hookmanager->initHooks(array('groupcard', 'globalcard'));
87
88// Security check
89$result = restrictedArea($user, 'user', $id, 'usergroup&usergroup', $feature2);
90
91// Users/Groups management only in master entity if transverse mode
92if (isModEnabled('multicompany') && $conf->entity > 1 && getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE')) {
94}
95
96
101$error = 0;
102$parameters = array('id' => $id, 'userid' => $userid, 'caneditperms' => $permissiontoedit);
103$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
104if ($reshook < 0) {
105 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
106}
107
108if (empty($reshook)) {
109 $backurlforlist = DOL_URL_ROOT.'/user/group/list.php';
110
111 if (empty($backtopage) || ($cancel && empty($id))) {
112 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
113 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
114 $backtopage = $backurlforlist;
115 } else {
116 $backtopage = DOL_URL_ROOT.'/user/group/card.php?id='.($id > 0 ? $id : '__ID__');
117 }
118 }
119 }
120
121 if ($cancel) {
122 header("Location: ".$backtopage);
123 exit;
124 }
125
126 // Action remove group
127 if ($action == 'confirm_delete' && $confirm == "yes" && $permissiontodisable) {
128 $object->fetch($id);
129 $object->delete($user);
130 header("Location: ".DOL_URL_ROOT."/user/group/list.php?restore_lastsearch_values=1");
131 exit;
132 }
133
134 // Action add group
135 if ($action == 'add' && $permissiontoedit) {
136 if (!GETPOST("nom", "alphanohtml")) {
137 setEventMessages($langs->trans("NameNotDefined"), null, 'errors');
138 $action = "create"; // Go back to create page
139 } else {
140 $object->name = GETPOST("nom", 'alphanohtml');
141 $object->note = dol_htmlcleanlastbr(trim(GETPOST("note", 'restricthtml')));
142 $object->color = GETPOST("color", 'alphanohtml');
143
144 // Fill array 'array_options' with data from add form
145 $ret = $extrafields->setOptionalsFromPost(null, $object);
146 if ($ret < 0) {
147 $error++;
148 }
149
150 if (isModEnabled('multicompany') && getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE')) {
151 $object->entity = 0;
152 } else {
153 if ($conf->entity == 1 && $user->admin && !$user->entity) { // Same permissions test than the one used to show the combo of entities into the form
154 $object->entity = GETPOSTISSET("entity") ? GETPOST("entity") : $conf->entity;
155 } else {
156 $object->entity = $conf->entity;
157 }
158 }
159
160 $db->begin();
161
162 $id = $object->create();
163
164 if ($id > 0) {
165 $db->commit();
166
167 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
168 exit;
169 } else {
170 $db->rollback();
171
172 $langs->load("errors");
173 setEventMessages($langs->trans("ErrorGroupAlreadyExists", $object->name), null, 'errors');
174 $action = "create"; // Go back to create page
175 }
176 }
177 }
178
179 // Add/Remove user into group
180 if (($action == 'adduser' || $action == 'removeuser') && $permissiontoedit) {
181 if ($userid > 0) {
182 $object->fetch($id);
183 $object->oldcopy = clone $object; // @phan-suppress-current-line PhanTypeMismatchProperty
184
185 $edituser = new User($db);
186 $edituser->fetch($userid);
187 if ($action == 'adduser') { // Test on permission already done
188 $result = $edituser->SetInGroup($object->id, $object->entity);
189 }
190 if ($action == 'removeuser') { // Test on permission already done
191 $result = $edituser->RemoveFromGroup($object->id, $object->entity);
192 }
193
194 if ($result > 0) {
195 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
196 exit;
197 } else {
198 setEventMessages($edituser->error, $edituser->errors, 'errors');
199 }
200 }
201 }
202
203
204 if ($action == 'update' && $permissiontoedit) {
205 $db->begin();
206
207 $object->fetch($id);
208
209 $object->oldcopy = clone $object; // @phan-suppress-current-line PhanTypeMismatchProperty
210
211 $object->name = GETPOST("nom", 'alphanohtml');
212
213 $object->note = dol_htmlcleanlastbr(trim(GETPOST("note", 'restricthtml')));
214 $object->note_private = $object->note;
215
216 $object->color = GETPOST("color", 'alphanohtml');
217 $object->date_modification = dol_now();
218
219 // Fill array 'array_options' with data from add form
220 $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
221 if ($ret < 0) {
222 $error++;
223 }
224
225 if (isModEnabled('multicompany') && getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE')) {
226 $object->entity = 0;
227 } elseif (GETPOSTISSET("entity")) {
228 $object->entity = GETPOSTINT("entity");
229 }
230
231 $ret = $object->update();
232
233 if ($ret >= 0 && !count($object->errors)) {
234 setEventMessages($langs->trans("GroupModified"), null, 'mesgs');
235 $db->commit();
236 } else {
237 setEventMessages($object->error, $object->errors, 'errors');
238 $db->rollback();
239 }
240 }
241
242 // Actions to build doc
243 $upload_dir = $conf->user->dir_output.'/usergroups';
244 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
245}
246
247
248/*
249 * View
250 */
251
252$title = $object->name.' - '.$langs->trans("Card");
253if ($action == 'create') {
254 $title = $langs->trans("NewGroup");
255}
256$help_url = "";
257llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-user page-group_card');
258
259
260$form = new Form($db);
261$fuserstatic = new User($db);
262$form = new Form($db);
263$formfile = new FormFile($db);
264$formother = new FormOther($db);
265
266if ($action == 'create') {
267 print load_fiche_titre($langs->trans("NewGroup"), '', 'object_group');
268
269 dol_set_focus('#nom');
270
271 print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
272 print '<input type="hidden" name="token" value="'.newToken().'">';
273 print '<input type="hidden" name="action" value="add">';
274 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
275
276 print dol_get_fiche_head(array(), '', '', 0, '');
277
278 print '<table class="border centpercent tableforfieldcreate">';
279
280 // Multicompany
281 if (isModEnabled('multicompany') && isset($mc) && is_object($mc)) {
282 if (!getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
283 print "<tr>".'<td class="tdtop">'.$langs->trans("Entity").'</td>';
284 print "<td>".$mc->select_entities($conf->entity);
285 print "</td></tr>\n";
286 } else {
287 print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
288 }
289 }
290
291 unset($object->fields['color']);
292
293 // Common attributes
294 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
295
296 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
297 print '<td>';
298 print $formother->selectColor(GETPOSTISSET('color') ? GETPOST('color', 'alphanohtml') : $object->color, 'color', null, 1, array(), 'hideifnotset');
299 print '</td></tr>';
300
301 // Other attributes
302 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
303
304 print "</table>\n";
305
306 print dol_get_fiche_end();
307
308 print '<div class="center">';
309 print '<input class="button" name="add" value="'.$langs->trans("CreateGroup").'" type="submit">';
310 print ' &nbsp; ';
311 print '<input class="button button-cancel" value="'.$langs->trans("Cancel").'" name="cancel" type="submit">';
312 print '</div>';
313
314 print "</form>";
315} else {
316 if ($id) {
317 $head = group_prepare_head($object);
318 $title = $langs->trans("Group");
319
320 /*
321 * Deletion confirmation
322 */
323 if ($action == 'delete') {
324 print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("DeleteAGroup"), $langs->trans("ConfirmDeleteGroup", $object->name), "confirm_delete", '', 0, 1);
325 }
326
327 /*
328 * Card in view mode
329 */
330
331 if ($action != 'edit') {
332 print dol_get_fiche_head($head, 'group', $title, -1, 'group');
333
334 $linkback = '<a href="'.DOL_URL_ROOT.'/user/group/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
335
336 dol_banner_tab($object, 'id', $linkback, $user->hasRight("user", "user", "read") || $user->admin);
337
338 print '<div class="fichecenter">';
339 print '<div class="fichehalfleft">';
340
341 print '<div class="underbanner clearboth"></div>';
342
343 print '<table class="border centpercent tableforfield">';
344
345 // Name (already in dol_banner, we keep it to have the GlobalGroup picto, but we should move it in dol_banner)
346 if (isModEnabled('multicompany')) {
347 print '<tr><td class="titlefield">'.$langs->trans("Name").'</td>';
348 print '<td class="valeur">'.dol_escape_htmltag($object->name);
349 if (empty($object->entity)) {
350 print img_picto($langs->trans("GlobalGroup"), 'superadmin');
351 }
352 print "</td></tr>\n";
353 }
354
355 // Multicompany
356 if (isModEnabled('multicompany') && isset($mc) && is_object($mc) && !getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
357 $mc->getInfo($object->entity);
358 print "<tr>".'<td class="titlefield">'.$langs->trans("Entity").'</td>';
359 print '<td class="valeur">'.dol_escape_htmltag($mc->label);
360 print "</td></tr>\n";
361 }
362
363 unset($object->fields['nom']); // Name already displayed in banner
364 unset($object->fields['color']);
365
366 // Common attributes
367 $keyforbreak = '';
368 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
369
370 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
371 print '<td>';
372 print $formother->showColor($object->color, '');
373 print '</td></tr>';
374
375 // Other attributes
376 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
377
378 print '</table>';
379 print '</div>';
380 print '</div>';
381
382 print '<div class="clearboth"></div>';
383
384 print dol_get_fiche_end();
385
386
387 /*
388 * Action bar
389 */
390 print '<div class="tabsAction">';
391
392 $parameters = array();
393 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
394 if ($reshook < 0) {
395 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
396 }
397
398 if ($permissiontoedit) {
399 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
400 }
401
402 if ($permissiontodisable) {
403 print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=delete&token='.newToken().'&id='.$object->id.'">'.$langs->trans("DeleteGroup").'</a>';
404 }
405
406 print "</div>\n";
407
408 // List users in group
409
410 print load_fiche_titre($langs->trans("ListOfUsersInGroup"), '', 'user');
411
412 // Select the users that do not belong to the group yet
413 $exclude = array();
414
415 if (!empty($object->members)) {
416 foreach ($object->members as $useringroup) {
417 $exclude[] = $useringroup->id;
418 }
419 }
420
421 // Other form for add user to group
422 $parameters = array('caneditperms' => $permissiontoedit, 'exclude' => $exclude);
423 $reshook = $hookmanager->executeHooks('formAddUserToGroup', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
424 print $hookmanager->resPrint;
425
426 if (empty($reshook)) {
427 if ($permissiontoedit) {
428 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST">'."\n";
429 print '<input type="hidden" name="token" value="'.newToken().'">';
430 print '<input type="hidden" name="action" value="adduser">';
431 print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
432 print '<table class="noborder centpercent">'."\n";
433 print '<tr class="liste_titre"><td class="titlefield liste_titre">'.$langs->trans("NonAffectedUsers").'</td>'."\n";
434 print '<td class="liste_titre">';
435 print $form->select_dolusers('', 'user', 1, $exclude, 0, '', '', (string) $object->entity, 0, 0, '', 0, '', 'minwidth200 maxwidth500');
436 print ' &nbsp; ';
437 print '<input type="hidden" name="entity" value="'.$conf->entity.'">';
438 print '<input type="submit" class="button buttongen button-add" value="'.$langs->trans("Add").'">';
439 print '</td></tr>'."\n";
440 print '</table>';
441 print '</div>';
442 print '</form>'."\n";
443 //print '<br>';
444 }
445
446 /*
447 * Group members
448 */
449
450 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
451 print '<table class="noborder centpercent">';
452 print '<tr class="liste_titre">';
453 print '<td class="liste_titre">'.$langs->trans("Login").'</td>';
454 print '<td class="liste_titre">'.$langs->trans("Lastname").'</td>';
455 print '<td class="liste_titre">'.$langs->trans("Firstname").'</td>';
456 print '<td class="liste_titre center" width="5">'.$langs->trans("Status").'</td>';
457 print '<td class="liste_titre right" width="5">&nbsp;</td>';
458 print "</tr>\n";
459
460 $object->fetch($object->id, '', true); // true to force load of all users, member of the group
461
462 if (!empty($object->members)) {
463 foreach ($object->members as $useringroup) {
464 print '<tr class="oddeven">';
465 print '<td class="tdoverflowmax150">';
466 print $useringroup->getNomUrl(-1, '', 0, 0, 24, 0, 'login');
467 if (isModEnabled('multicompany') && $useringroup->admin && empty($useringroup->entity)) {
468 print img_picto($langs->trans("SuperAdministratorDesc"), 'superadmin', 'class="valignmiddle paddingright paddingleft"');
469 } elseif ($useringroup->admin) {
470 print img_picto($langs->trans("AdministratorDesc"), 'admin', 'class="valignmiddle paddingright paddingleft"');
471 }
472 print '</td>';
473 print '<td>'.$useringroup->lastname.'</td>';
474 print '<td>'.$useringroup->firstname.'</td>';
475 print '<td class="center">'.$useringroup->getLibStatut(5).'</td>';
476 print '<td class="right">';
477 if ($permissiontoedit) {
478 print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=removeuser&token='.newToken().'&user='.$useringroup->id.'">';
479 print img_picto($langs->trans("RemoveFromGroup"), 'unlink');
480 print '</a>';
481 } else {
482 print "-";
483 }
484 print "</td></tr>\n";
485 }
486 } else {
487 print '<tr><td colspan="6"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
488 }
489 print "</table>";
490 print '</div>';
491 }
492
493 print "<br>";
494
495 print '<div class="fichecenter"><div class="fichehalfleft">';
496
497 /*
498 * Generated documents
499 */
500
501 $filename = dol_sanitizeFileName($object->ref);
502 $filedir = $conf->user->dir_output."/usergroups/".dol_sanitizeFileName($object->ref);
503 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
504 $genallowed = $user->hasRight("user", "user", "write");
505 $delallowed = $user->hasRight("user", "user", "delete");
506
507 $somethingshown = $formfile->showdocuments('usergroup', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $mysoc->default_lang);
508
509 // Show links to link elements
510 $tmparray = $form->showLinkToObjectBlock($object, array(), array(), 1);
511 $linktoelem = $tmparray['linktoelem'];
512 $htmltoenteralink = $tmparray['htmltoenteralink'];
513 print $htmltoenteralink;
514
515 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
516
517 print '</div><div class="fichehalfright">';
518
519 // List of actions on element
520 /*include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php';
521 $formactions = new FormActions($db);
522 $somethingshown = $formactions->showactions($object, 'usergroup', $socid, 1, '', $MAXEVENT);*/
523
524 print '</div></div>';
525 }
526
527 /*
528 * Card in edit mode
529 */
530
531 if ($action == 'edit' && $permissiontoedit) {
532 print '<form action="'.$_SERVER['PHP_SELF'].'" method="post" name="updategroup" enctype="multipart/form-data">';
533 print '<input type="hidden" name="token" value="'.newToken().'">';
534 print '<input type="hidden" name="action" value="update">';
535 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
536 print '<input type="hidden" name="id" value="'.$object->id.'">';
537
538 print dol_get_fiche_head($head, 'group', $title, 0, 'group');
539
540 print '<table class="border centpercent tableforfieldedit">'."\n";
541
542 // Multicompany
543 if (isModEnabled('multicompany') && isset($mc) && is_object($mc)) {
544 if (!getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
545 print "<tr>".'<td class="tdtop">'.$langs->trans("Entity").'</td>';
546 print "<td>".$mc->select_entities($object->entity);
547 print "</td></tr>\n";
548 } else {
549 print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
550 }
551 }
552
553 unset($object->fields['color']);
554
555 // Common attributes
556 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
557
558 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
559 print '<td>';
560 print $formother->selectColor(GETPOSTISSET('color') ? GETPOST('color', 'alphanohtml') : $object->color, 'color', null, 1, array(), 'hideifnotset');
561 print '</td></tr>';
562
563 // Other attributes
564 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
565
566 print '</table>';
567
568 print dol_get_fiche_end();
569
570 print $form->buttonsSaveCancel();
571
572 print '</form>';
573 }
574 }
575}
576
577// End of page
578llxFooter();
579$db->close();
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
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 offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to help generate other html components Only common components are here.
Class to manage user groups.
Class to manage Dolibarr users.
global $mysoc
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
dol_now($mode='gmt')
Return date for now.
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, $allowothertags=array())
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, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
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, $nodefault=0)
Return value of a param into GET or POST supervariable.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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.
isModEnabled($module)
Is Dolibarr module enabled.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $nodie=0, $mode='')
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
group_prepare_head($object)
Prepare array with list of tabs.