dolibarr 23.0.3
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 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';
41require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
42require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
43require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.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$extrafields = new ExtraFields($db);
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->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 $object->note = dol_htmlcleanlastbr(trim(GETPOST("note", 'restricthtml')));
213 $object->color = GETPOST("color", 'alphanohtml');
214 $object->tms = dol_now();
215
216 // Fill array 'array_options' with data from add form
217 $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
218 if ($ret < 0) {
219 $error++;
220 }
221
222 if (isModEnabled('multicompany') && getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE')) {
223 $object->entity = 0;
224 } elseif (GETPOSTISSET("entity")) {
225 $object->entity = GETPOSTINT("entity");
226 }
227
228 $ret = $object->update();
229
230 if ($ret >= 0 && !count($object->errors)) {
231 setEventMessages($langs->trans("GroupModified"), null, 'mesgs');
232 $db->commit();
233 } else {
234 setEventMessages($object->error, $object->errors, 'errors');
235 $db->rollback();
236 }
237 }
238
239 // Actions to build doc
240 $upload_dir = $conf->user->dir_output.'/usergroups';
241 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
242}
243
244
245/*
246 * View
247 */
248
249$title = $object->name.' - '.$langs->trans("Card");
250if ($action == 'create') {
251 $title = $langs->trans("NewGroup");
252}
253$help_url = "";
254llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-user page-group_card');
255
256
257$form = new Form($db);
258$fuserstatic = new User($db);
259$form = new Form($db);
260$formfile = new FormFile($db);
261$formother = new FormOther($db);
262
263if ($action == 'create') {
264 print load_fiche_titre($langs->trans("NewGroup"), '', 'object_group');
265
266 dol_set_focus('#nom');
267
268 print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
269 print '<input type="hidden" name="token" value="'.newToken().'">';
270 print '<input type="hidden" name="action" value="add">';
271 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
272
273 print dol_get_fiche_head(array(), '', '', 0, '');
274
275 print '<table class="border centpercent tableforfieldcreate">';
276
277 // Multicompany
278 if (isModEnabled('multicompany') && is_object($mc)) {
279 if (!getDolGlobalString('MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
280 print "<tr>".'<td class="tdtop">'.$langs->trans("Entity").'</td>';
281 print "<td>".$mc->select_entities($conf->entity);
282 print "</td></tr>\n";
283 } else {
284 print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
285 }
286 }
287
288 unset($object->fields['color']);
289
290 // Common attributes
291 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
292
293 print '<tr><td>'.$langs->trans("ColorGroup").'</td>';
294 print '<td>';
295 print $formother->selectColor(GETPOSTISSET('color') ? GETPOST('color', 'alphanohtml') : $object->color, 'color', null, 1, array(), 'hideifnotset');
296 print '</td></tr>';
297
298 // Other attributes
299 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
300
301 print "</table>\n";
302
303 print dol_get_fiche_end();
304
305 print '<div class="center">';
306 print '<input class="button" name="add" value="'.$langs->trans("CreateGroup").'" type="submit">';
307 print ' &nbsp; ';
308 print '<input class="button button-cancel" value="'.$langs->trans("Cancel").'" name="cancel" type="submit">';
309 print '</div>';
310
311 print "</form>";
312} else {
313 /* ************************************************************************** */
314 /* */
315 /* Visu et edition */
316 /* */
317 /* ************************************************************************** */
318 if ($id) {
319 $head = group_prepare_head($object);
320 $title = $langs->trans("Group");
321
322 /*
323 * Confirmation suppression
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') && 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 (!empty($user->admin)) {
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') && 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 manage standard extra fields.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
Class to manage user groups.
Class to manage Dolibarr users.
global $mysoc
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)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $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'.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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, $mode=0)
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.