dolibarr 25.0.0-alpha
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" && $permissiontoedit) {
128 $object->fetch($id);
129 $object->oldcopy = dol_clone($object, 2); // @phan-suppress-current-line PhanTypeMismatchProperty
130 $result = $object->delete($user);
131 if ($result > 0) {
132 header("Location: ".DOL_URL_ROOT."/user/group/list.php?restore_lastsearch_values=1");
133 exit;
134 } else {
135 setEventMessages($object->error, $object->errors, 'errors');
136 }
137 }
138
139 // Action add group
140 if ($action == 'add' && $permissiontoedit) {
141 if (!GETPOST("nom", "alphanohtml")) {
142 setEventMessages($langs->trans("NameNotDefined"), null, 'errors');
143 $action = "create"; // Go back to create page
144 } else {
145 $object->name = GETPOST("nom", 'alphanohtml');
146 $object->note = dol_htmlcleanlastbr(trim(GETPOST("note", 'restricthtml')));
147 $object->color = GETPOST("color", 'alphanohtml');
148
149 // Fill array 'array_options' with data from add form
150 $ret = $extrafields->setOptionalsFromPost(null, $object);
151 if ($ret < 0) {
152 $error++;
153 }
154
155 if (isModEnabled('multicompany') && getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE')) {
156 $object->entity = 0;
157 } else {
158 if ($conf->entity == 1 && $user->admin && !$user->entity) { // Same permissions test than the one used to show the combo of entities into the form
159 $object->entity = GETPOSTISSET("entity") ? GETPOST("entity") : $conf->entity;
160 } else {
161 $object->entity = $conf->entity;
162 }
163 }
164
165 $db->begin();
166
167 $id = $object->create();
168
169 if ($id > 0) {
170 $db->commit();
171
172 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
173 exit;
174 } else {
175 $db->rollback();
176
177 $langs->load("errors");
178 setEventMessages($langs->trans("ErrorGroupAlreadyExists", $object->name), null, 'errors');
179 $action = "create"; // Go back to create page
180 }
181 }
182 }
183
184 // Add/Remove user into group
185 if (($action == 'adduser' || $action == 'removeuser') && $permissiontoedit) {
186 if ($userid > 0) {
187 $object->fetch($id);
188 $object->oldcopy = clone $object; // @phan-suppress-current-line PhanTypeMismatchProperty
189
190 $edituser = new User($db);
191 $edituser->fetch($userid);
192 if ($action == 'adduser') { // Test on permission already done
193 $result = $edituser->SetInGroup($object->id, $object->entity);
194 }
195 if ($action == 'removeuser') { // Test on permission already done
196 $result = $edituser->RemoveFromGroup($object->id, $object->entity);
197 }
198
199 if ($result > 0) {
200 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
201 exit;
202 } else {
203 setEventMessages($edituser->error, $edituser->errors, 'errors');
204 }
205 }
206 }
207
208
209 if ($action == 'update' && $permissiontoedit) {
210 $db->begin();
211
212 $object->fetch($id);
213
214 $object->oldcopy = clone $object; // @phan-suppress-current-line PhanTypeMismatchProperty
215
216 $object->name = GETPOST("nom", 'alphanohtml');
217 $object->note = dol_htmlcleanlastbr(trim(GETPOST("note", 'restricthtml')));
218 $object->color = GETPOST("color", 'alphanohtml');
219 $object->tms = dol_now();
220
221 // Fill array 'array_options' with data from add form
222 $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
223 if ($ret < 0) {
224 $error++;
225 }
226
227 if (isModEnabled('multicompany') && getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE')) {
228 $object->entity = 0;
229 } elseif (GETPOSTISSET("entity")) {
230 $object->entity = GETPOSTINT("entity");
231 }
232
233 $ret = $object->update();
234
235 if ($ret >= 0 && !count($object->errors)) {
236 setEventMessages($langs->trans("GroupModified"), null, 'mesgs');
237 $db->commit();
238 } else {
239 setEventMessages($object->error, $object->errors, 'errors');
240 $db->rollback();
241 }
242 }
243
244 // Actions to build doc
245 $upload_dir = $conf->user->dir_output.'/usergroups';
246 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
247}
248
249
250/*
251 * View
252 */
253
254$title = $object->name.' - '.$langs->trans("Card");
255if ($action == 'create') {
256 $title = $langs->trans("NewGroup");
257}
258$help_url = "";
259llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-user page-group_card');
260
261
262$form = new Form($db);
263$fuserstatic = new User($db);
264$form = new Form($db);
265$formfile = new FormFile($db);
266$formother = new FormOther($db);
267
268if ($action == 'create') {
269 print load_fiche_titre($langs->trans("NewGroup"), '', 'object_group');
270
271 dol_set_focus('#nom');
272
273 print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
274 print '<input type="hidden" name="token" value="'.newToken().'">';
275 print '<input type="hidden" name="action" value="add">';
276 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
277
278 print dol_get_fiche_head(array(), '', '', 0, '');
279
280 print '<table class="border centpercent tableforfieldcreate">';
281
282 // Multicompany
283 if (isModEnabled('multicompany') && isset($mc) && is_object($mc)) {
284 if (!getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
285 print "<tr>".'<td class="tdtop">'.$langs->trans("Entity").'</td>';
286 print "<td>".$mc->select_entities($conf->entity);
287 print "</td></tr>\n";
288 } else {
289 print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
290 }
291 }
292
293 unset($object->fields['color']);
294
295 // Common attributes
296 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
297
298 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
299 print '<td>';
300 print $formother->selectColor(GETPOSTISSET('color') ? GETPOST('color', 'alphanohtml') : $object->color, 'color', null, 1, array(), 'hideifnotset');
301 print '</td></tr>';
302
303 // Other attributes
304 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
305
306 print "</table>\n";
307
308 print dol_get_fiche_end();
309
310 print '<div class="center">';
311 print '<input class="button" name="add" value="'.$langs->trans("CreateGroup").'" type="submit">';
312 print ' &nbsp; ';
313 print '<input class="button button-cancel" value="'.$langs->trans("Cancel").'" name="cancel" type="submit">';
314 print '</div>';
315
316 print "</form>";
317} else {
318 if ($id) {
319 $head = group_prepare_head($object);
320 $title = $langs->trans("Group");
321
322 /*
323 * Deletion confirmation
324 */
325 if ($action == 'delete') {
326 print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id, $langs->trans("DeleteAGroup"), $langs->trans("ConfirmDeleteGroup", $object->name), "confirm_delete", '', 0, 1);
327 }
328
329 /*
330 * Card in view mode
331 */
332
333 if ($action != 'edit') {
334 print dol_get_fiche_head($head, 'group', $title, -1, 'group');
335
336 $linkback = '<a href="'.DOL_URL_ROOT.'/user/group/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
337
338 dol_banner_tab($object, 'id', $linkback, $user->hasRight("user", "user", "read") || $user->admin);
339
340 print '<div class="fichecenter">';
341 print '<div class="fichehalfleft">';
342
343 print '<div class="underbanner clearboth"></div>';
344
345 print '<table class="border centpercent tableforfield">';
346
347 // Name (already in dol_banner, we keep it to have the GlobalGroup picto, but we should move it in dol_banner)
348 if (isModEnabled('multicompany')) {
349 print '<tr><td class="titlefield">'.$langs->trans("Name").'</td>';
350 print '<td class="valeur">'.dol_escape_htmltag($object->name);
351 if (empty($object->entity)) {
352 print img_picto($langs->trans("GlobalGroup"), 'superadmin');
353 }
354 print "</td></tr>\n";
355 }
356
357 // Multicompany
358 if (isModEnabled('multicompany') && isset($mc) && is_object($mc) && !getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
359 $mc->getInfo($object->entity);
360 print "<tr>".'<td class="titlefield">'.$langs->trans("Entity").'</td>';
361 print '<td class="valeur">'.dol_escape_htmltag($mc->label);
362 print "</td></tr>\n";
363 }
364
365 unset($object->fields['nom']); // Name already displayed in banner
366 unset($object->fields['color']);
367
368 // Common attributes
369 $keyforbreak = '';
370 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
371
372 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
373 print '<td>';
374 print $formother->showColor($object->color, '');
375 print '</td></tr>';
376
377 // Other attributes
378 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
379
380 print '</table>';
381 print '</div>';
382 print '</div>';
383
384 print '<div class="clearboth"></div>';
385
386 print dol_get_fiche_end();
387
388
389 /*
390 * Action bar
391 */
392 print '<div class="tabsAction">';
393
394 $parameters = array();
395 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
396 if ($reshook < 0) {
397 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
398 }
399
400 if ($permissiontoedit) {
401 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
402 }
403
404 if ($permissiontodisable) {
405 print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=delete&token='.newToken().'&id='.$object->id.'">'.$langs->trans("DeleteGroup").'</a>';
406 }
407
408 print "</div>\n";
409
410 // List users in group
411
412 print load_fiche_titre($langs->trans("ListOfUsersInGroup"), '', 'user');
413
414 // Select the users that do not belong to the group yet
415 $exclude = array();
416
417 if (!empty($object->members)) {
418 foreach ($object->members as $useringroup) {
419 $exclude[] = $useringroup->id;
420 }
421 }
422
423 // Other form for add user to group
424 $parameters = array('caneditperms' => $permissiontoedit, 'exclude' => $exclude);
425 $reshook = $hookmanager->executeHooks('formAddUserToGroup', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
426 print $hookmanager->resPrint;
427
428 if (empty($reshook)) {
429 if ($permissiontoedit) {
430 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST">'."\n";
431 print '<input type="hidden" name="token" value="'.newToken().'">';
432 print '<input type="hidden" name="action" value="adduser">';
433 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
434 print '<table class="noborder centpercent">'."\n";
435 print '<tr class="liste_titre"><td class="titlefield liste_titre">'.$langs->trans("NonAffectedUsers").'</td>'."\n";
436 print '<td class="liste_titre">';
437 print $form->select_dolusers('', 'user', 1, $exclude, 0, '', '', (string) $object->entity, 0, 0, '', 0, '', 'minwidth200 maxwidth500');
438 print ' &nbsp; ';
439 print '<input type="hidden" name="entity" value="'.$conf->entity.'">';
440 print '<input type="submit" class="button buttongen button-add" value="'.$langs->trans("Add").'">';
441 print '</td></tr>'."\n";
442 print '</table>';
443 print '</div>';
444 print '</form>'."\n";
445 //print '<br>';
446 }
447
448 /*
449 * Group members
450 */
451
452 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
453 print '<table class="noborder centpercent">';
454 print '<tr class="liste_titre">';
455 print '<td class="liste_titre">'.$langs->trans("Login").'</td>';
456 print '<td class="liste_titre">'.$langs->trans("Lastname").'</td>';
457 print '<td class="liste_titre">'.$langs->trans("Firstname").'</td>';
458 print '<td class="liste_titre center" width="5">'.$langs->trans("Status").'</td>';
459 print '<td class="liste_titre right" width="5">&nbsp;</td>';
460 print "</tr>\n";
461
462 $object->fetch($object->id, '', true); // true to force load of all users, member of the group
463
464 if (!empty($object->members)) {
465 foreach ($object->members as $useringroup) {
466 print '<tr class="oddeven">';
467 print '<td class="tdoverflowmax150">';
468 print $useringroup->getNomUrl(-1, '', 0, 0, 24, 0, 'login');
469 if (isModEnabled('multicompany') && $useringroup->admin && empty($useringroup->entity)) {
470 print img_picto($langs->trans("SuperAdministratorDesc"), 'superadmin', 'class="valignmiddle paddingright paddingleft"');
471 } elseif ($useringroup->admin) {
472 print img_picto($langs->trans("AdministratorDesc"), 'admin', 'class="valignmiddle paddingright paddingleft"');
473 }
474 print '</td>';
475 print '<td>'.$useringroup->lastname.'</td>';
476 print '<td>'.$useringroup->firstname.'</td>';
477 print '<td class="center">'.$useringroup->getLibStatut(5).'</td>';
478 print '<td class="right">';
479 if ($permissiontoedit) {
480 print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=removeuser&token='.newToken().'&user='.$useringroup->id.'">';
481 print img_picto($langs->trans("RemoveFromGroup"), 'unlink');
482 print '</a>';
483 } else {
484 print "-";
485 }
486 print "</td></tr>\n";
487 }
488 } else {
489 print '<tr><td colspan="6"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
490 }
491 print "</table>";
492 print '</div>';
493 }
494
495 print "<br>";
496
497 print '<div class="fichecenter"><div class="fichehalfleft">';
498
499 /*
500 * Generated documents
501 */
502
503 $filename = dol_sanitizeFileName($object->ref);
504 $filedir = $conf->user->dir_output."/usergroups/".dol_sanitizeFileName($object->ref);
505 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
506 $genallowed = $user->hasRight("user", "user", "write");
507 $delallowed = $user->hasRight("user", "user", "delete");
508
509 $somethingshown = $formfile->showdocuments('usergroup', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $mysoc->default_lang);
510
511 // Show links to link elements
512 $tmparray = $form->showLinkToObjectBlock($object, array(), array(), 1);
513 $linktoelem = $tmparray['linktoelem'];
514 $htmltoenteralink = $tmparray['htmltoenteralink'];
515 print $htmltoenteralink;
516
517 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
518
519 print '</div><div class="fichehalfright">';
520
521 // List of actions on element
522 /*include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php';
523 $formactions = new FormActions($db);
524 $somethingshown = $formactions->showactions($object, 'usergroup', $socid, 1, '', $MAXEVENT);*/
525
526 print '</div></div>';
527 }
528
529 /*
530 * Card in edit mode
531 */
532
533 if ($action == 'edit' && $permissiontoedit) {
534 print '<form action="'.$_SERVER['PHP_SELF'].'" method="post" name="updategroup" enctype="multipart/form-data">';
535 print '<input type="hidden" name="token" value="'.newToken().'">';
536 print '<input type="hidden" name="action" value="update">';
537 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
538 print '<input type="hidden" name="id" value="'.$object->id.'">';
539
540 print dol_get_fiche_head($head, 'group', $title, 0, 'group');
541
542 print '<table class="border centpercent tableforfieldedit">'."\n";
543
544 // Multicompany
545 if (isModEnabled('multicompany') && isset($mc) && is_object($mc)) {
546 if (!getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
547 print "<tr>".'<td class="tdtop">'.$langs->trans("Entity").'</td>';
548 print "<td>".$mc->select_entities($object->entity);
549 print "</td></tr>\n";
550 } else {
551 print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
552 }
553 }
554
555 unset($object->fields['color']);
556
557 // Common attributes
558 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
559
560 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
561 print '<td>';
562 print $formother->selectColor(GETPOSTISSET('color') ? GETPOST('color', 'alphanohtml') : $object->color, 'color', null, 1, array(), 'hideifnotset');
563 print '</td></tr>';
564
565 // Other attributes
566 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
567
568 print '</table>';
569
570 print dol_get_fiche_end();
571
572 print $form->buttonsSaveCancel();
573
574 print '</form>';
575 }
576 }
577}
578
579// End of page
580llxFooter();
581$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:
dol_now($mode='gmt')
Return date for now.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
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.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
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.
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
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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.