dolibarr 24.0.0-beta
workstation_card.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
5 * Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
27// Load Dolibarr environment
28require '../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
39require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
40require_once DOL_DOCUMENT_ROOT.'/resource/class/html.formresource.class.php';
41require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php';
42require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php';
43require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstationusergroup.class.php';
44require_once DOL_DOCUMENT_ROOT.'/workstation/lib/workstation_workstation.lib.php';
45
46// Load translation files required by the page
47$langs->loadLangs(array('mrp', 'other'));
48
49// Get parameters
50$id = GETPOSTINT('id');
51$ref = GETPOST('ref', 'alpha');
52$action = GETPOST('action', 'aZ09');
53$confirm = GETPOST('confirm', 'alpha');
54$cancel = GETPOST('cancel');
55$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
56$backtopage = GETPOST('backtopage', 'alpha');
57$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
58$dol_openinpopup = GETPOST('dol_openinpopup', 'aZ09');
59
60$groups = GETPOST('groups', 'array:int');
61$resources = GETPOST('resources', 'array:int');
62
63// Initialize a technical objects
65$diroutputmassaction = $conf->workstation->dir_output.'/temp/massgeneration/'.$user->id;
66$hookmanager->initHooks(array($object->element.'card', 'globalcard')); // Note that conf->hooks_modules contains array
67
68// Fetch optionals attributes and labels
69$extrafields->fetch_name_optionals_label($object->table_element);
70
71$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
72
73// Initialize array of search criteria
74$search_all = trim(GETPOST("search_all", 'alpha'));
75$search = array();
76foreach ($object->fields as $key => $val) {
77 if (GETPOST('search_'.$key, 'alpha')) {
78 $search[$key] = GETPOST('search_'.$key, 'alpha');
79 }
80}
81
82if (empty($action) && empty($id) && empty($ref)) {
83 $action = 'view';
84}
85
86// Load object
87include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be 'include', not 'include_once'.
88
89// Permissions
90$permissiontoread = $user->hasRight('workstation', 'workstation', 'read');
91$permissiontoadd = $user->hasRight('workstation', 'workstation', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
92$permissiontodelete = $user->hasRight('workstation', 'workstation', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == Workstation::STATUS_DISABLED);
93$permissionnote = $user->hasRight('workstation', 'workstation', 'write'); // Used by the include of actions_setnotes.inc.php
94$permissiondellink = $user->hasRight('workstation', 'workstation', 'write'); // Used by the include of actions_dellink.inc.php
95
96$upload_dir = rtrim(getMultidirOutput($object, '', 1), '/');
97
98// Security check
99$isdraft = 0;
100restrictedArea($user, $object->element, $object->id, $object->table_element, 'workstation', 'fk_soc', 'rowid', $isdraft);
101
102
103/*
104 * Actions
105 */
106
107$parameters = array();
108$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
109if ($reshook < 0) {
110 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
111}
112
113if (empty($reshook)) {
114 $error = 0;
115
116 $backurlforlist = dol_buildpath('/workstation/workstation_list.php', 1);
117
118 if (empty($backtopage) || ($cancel && empty($id))) {
119 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
120 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
121 $backtopage = $backurlforlist;
122 } else {
123 $backtopage = dol_buildpath('/workstation/workstation_card.php', 1).'?id='.($id > 0 ? $id : '__ID__');
124 }
125 }
126 }
127
128 $triggermodname = 'WORKSTATION_WORKSTATION_MODIFY'; // Name of trigger action code to execute when we modify record
129
130 // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
131 include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
132
133 // Actions when linking object each other
134 include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';
135
136 // Actions when printing a doc from card
137 include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
138
139 // Action to move up and down lines of object
140 //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';
141
142 // Action to build doc
143 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
144
145 if ($action == 'confirm_enable' && $confirm == "yes" && $permissiontoadd) {
146 if (!empty($object->id)) {
147 $object->setStatus(1);
148 }
149 } elseif ($action == 'confirm_disable' && $confirm == "yes" && $permissiontoadd) {
150 if (!empty($object->id)) {
151 $object->setStatus(0);
152 }
153 }
154}
155
156
157
158/*
159 * View
160 */
161
162$form = new Form($db);
163$formfile = new FormFile($db);
164$formresource = new FormResource($db);
165
166$title = $langs->trans("Workstation")." - ".$langs->trans('Card');
167if ($action == 'create') {
168 $title = $langs->trans("NewObject", $langs->transnoentitiesnoconv("Workstation"));
169}
170$help_url = 'EN:Module_Workstation';
171
172llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-workstation page-workstation_card');
173
174// jquery code
175?>
176 <script>
177
178 jQuery(document).ready(function() {
179 jQuery("#type").change(function() {
180 if($(this).val() === 'MACHINE') {
181 $('#usergroups').hide();
182 $('#nb_operators_required').parent('td').parent('tr').hide();
183 $('#wsresources').show();
184 } else if($(this).val() === 'HUMAN') {
185 $('#wsresources').hide();
186 $('#nb_operators_required').parent('td').parent('tr').show();
187 $('#usergroups').show();
188 }
189 else {
190 $('#usergroups').show();
191 $('#wsresources').show();
192 $('#nb_operators_required').parent('td').parent('tr').show();
193 }
194 });
195 jQuery("#type").trigger('change');
196 });
197
198 </script>
199<?php
200
201// Part to create
202if ($action == 'create') {
203 if (empty($permissiontoadd)) {
204 accessforbidden('NotEnoughPermissions', 0, 1);
205 }
206
207 // Set default value of the property ref
208 $object->fields['ref']['default'] = $object->getNextNumRef();
209
210 print load_fiche_titre($title, '', 'object_'.$object->picto);
211
212 print '<form method="POST" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
213 print '<input type="hidden" name="token" value="'.newToken().'">';
214 print '<input type="hidden" name="action" value="add">';
215 if ($backtopage) {
216 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
217 }
218 if ($backtopageforcancel) {
219 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
220 }
221
222 print dol_get_fiche_head(array(), '');
223
224 print '<table class="border centpercent tableforfieldcreate">'."\n";
225
226 // Common attributes
227 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
228
229 print '<tr id="usergroups">';
230 print '<td>';
231 print $langs->trans('UserGroups');
232 print '</td>';
233 print '<td>';
234 print img_picto('', 'group', 'class="pictofixedwidth"');
235 print $form->select_dolgroups($groups, 'groups', 1, '', 0, '', array(), (string) $object->entity, true, 'quatrevingtpercent widthcentpercentminusx');
236 print '</td></tr>';
237
238 print '<tr id="wsresources"><td>';
239 print $langs->trans('Machines');
240 print '</td>';
241 print '<td>';
242 print img_picto('', 'resource', 'class="pictofixedwidth"');
243 print $formresource->select_resource_list($resources, 'resources', '', 0, 0, 0, array(), '', 2, 0, 'quatrevingtpercent widthcentpercentminusx', true);
244 print '</td></tr>';
245
246 // Other attributes
247 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
248
249 print '</table>'."\n";
250
251 print dol_get_fiche_end();
252
253 print $form->buttonsSaveCancel("Create");
254
255 print '</form>';
256
257 //dol_set_focus('input[name="ref"]');
258}
259
260// Part to edit record
261if (($id || $ref) && $action == 'edit') {
262 print load_fiche_titre($langs->trans("Workstation"), '', 'object_'.$object->picto);
263
264 print '<form method="POST" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
265 print '<input type="hidden" name="token" value="'.newToken().'">';
266 print '<input type="hidden" name="action" value="update">';
267 print '<input type="hidden" name="id" value="'.$object->id.'">';
268 if ($backtopage) {
269 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
270 }
271 if ($backtopageforcancel) {
272 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
273 }
274
275 print dol_get_fiche_head();
276
277 print '<table class="border centpercent tableforfieldedit">'."\n";
278
279 // Common attributes
280 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
281
282 print '<tr id="usergroups"';
283 print '><td>';
284 print $langs->trans('UserGroups');
285 print '</td>';
286 print '<td>';
287 print img_picto('', 'group', 'class="pictofixedwidth"');
288 print $form->select_dolgroups(empty($groups) ? $object->usergroups : $groups, 'groups', 1, '', 0, '', array(), (string) $object->entity, true, 'quatrevingtpercent widthcentpercentminusx');
289 print '</td></tr>';
290
291 print '<tr id="wsresources"><td>';
292 print $langs->trans('Machines');
293 print '</td>';
294 print '<td>';
295 print img_picto('', 'resource', 'class="pictofixedwidth"');
296 print $formresource->select_resource_list(empty($resources) ? $object->resources : $resources, 'resources', '', 0, 0, 0, array(), '', 2, 0, 'quatrevingtpercent widthcentpercentminusx', true);
297 print '</td></tr>';
298
299 // Other attributes
300 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
301
302 print '</table>';
303
304 print dol_get_fiche_end();
305
306 print $form->buttonsSaveCancel();
307
308 print '</form>';
309}
310
311// Part to show record
312if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
313 $head = workstationPrepareHead($object);
314
315 print dol_get_fiche_head($head, 'card', $langs->trans("Workstation"), -1, $object->picto);
316
317 $formconfirm = '';
318
319 // Confirmation to delete (using preloaded confirm popup)
320 if ($action == 'delete' || ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile))) {
321 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteWorkstation'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 'action-delete');
322 }
323 $formquestion = array();
324 // Clone confirmation
325 if ($action == 'clone') {
326 // Create an array for form
327 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
328 }
329
330 // Confirmation of action xxxx
331 if ($action == 'enable') {
332 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('EnableAWorkstation'), $langs->trans("ConfirmEnableWorkstation", $object->ref), 'confirm_enable', $formquestion, 0, 1, 220);
333 } elseif ($action == 'disable') {
334 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DisableAWorkstation'), $langs->trans("ConfirmDisableWorkstation", $object->ref), 'confirm_disable', $formquestion, 0, 1, 220);
335 }
336
337 // Call Hook formConfirm
338 $parameters = array(
339 'formConfirm' => $formconfirm,
340 // 'lineid' => $lineid,
341 );
342 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
343 if (empty($reshook)) {
344 $formconfirm .= $hookmanager->resPrint;
345 } elseif ($reshook > 0) {
346 $formconfirm = $hookmanager->resPrint;
347 }
348
349 // Print form confirm
350 print $formconfirm;
351
352
353 // Object card
354 // ------------------------------------------------------------
355 $linkback = '<a href="'.dolBuildUrl('/workstation/workstation_list.php', ['restore_lastsearch_values' => 1]).'">'.$langs->trans("BackToList").'</a>';
356
357 $morehtmlref = '<div class="refidno">';
358 /*
359 // Ref customer
360 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
361 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
362 // Thirdparty
363 $morehtmlref .= '<br>'.$langs->trans('ThirdParty') . ' : ' . (is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : '');
364 // Project
365 if (isModEnabled('project')) {
366 $langs->load("projects");
367 $morehtmlref .= '<br>';
368 if ($permissiontoadd) {
369 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
370 if ($action != 'classify') {
371 $morehtmlref .= '<a class="editfielda" href="'.dolBuildUrl($_SERVER['PHP_SELF'], ['action' => 'classify', 'id' => $object->id], true).'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
372 }
373 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
374 } else {
375 if (!empty($object->fk_project)) {
376 $proj = new Project($db);
377 $proj->fetch($object->fk_project);
378 $morehtmlref .= $proj->getNomUrl(1);
379 if ($proj->title) {
380 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
381 }
382 }
383 }
384 }
385 }
386 */
387 $morehtmlref .= '</div>';
388
389
390 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
391
392
393 print '<div class="fichecenter">';
394 print '<div class="fichehalfleft">';
395 print '<div class="underbanner clearboth"></div>';
396 print '<table class="border centpercent tableforfield">'."\n";
397
398 // Common attributes
399 //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field
400 //unset($object->fields['fk_project']); // Hide field already shown in banner
401 //unset($object->fields['fk_soc']); // Hide field already shown in banner
402 if ($object->type === 'MACHINE') {
403 $object->fields['nb_operators_required']['visible'] = 0;
404 }
405
406 // Common attributes
407 //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field
408 //unset($object->fields['fk_project']); // Hide field already shown in banner
409 //unset($object->fields['fk_soc']); // Hide field already shown in banner
410 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
411
412 // Groups
413 if ($object->type !== 'MACHINE') {
414 $toprint = array();
415 $g = new UserGroup($db);
416 foreach ($object->usergroups as $id_group) {
417 $g->fetch($id_group);
418 $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #bbb">' . $g->getNomUrl(1, '', 0, 'categtextwhite') . '</li>';
419 }
420
421 print '<tr><td>' . $langs->trans('Groups') . '</td><td>';
422 print '<div class="select2-container-multi-dolibarr"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
423 print '</td></tr>';
424 }
425
426 // Resources
427 if ($object->type !== 'HUMAN') {
428 $toprint = array();
429 $r = new Dolresource($db);
430 foreach ($object->resources as $id_resource) {
431 $r->fetch($id_resource);
432 $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #bbb">' . $r->getNomUrl(1, '', '', 0, 'categtextwhite') . '</li>';
433 }
434
435 print '<tr><td>' . $langs->trans('Machines') . '</td><td>';
436 print '<div class="select2-container-multi-dolibarr"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
437 print '</td></tr>';
438 }
439
440 // Other attributes. Fields from hook formObjectOptions and Extrafields.
441 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
442
443 print '</table>';
444 print '</div>';
445 print '</div>';
446
447 print '<div class="clearboth"></div>';
448
449 print dol_get_fiche_end();
450
451
452 // Buttons for actions
453
454 if ($action != 'presend' && $action != 'editline') {
455 print '<div class="tabsAction">'."\n";
456 $parameters = array();
457 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
458 if ($reshook < 0) {
459 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
460 }
461
462 if (empty($reshook)) {
463 // Modify
464 print dolGetButtonAction('', $langs->trans('Modify'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
465
466 // Clone
467 if ($permissiontoadd) {
468 print dolGetButtonAction('', $langs->trans('ToClone'), 'clone', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=clone&token='.newToken(), '', $permissiontoadd);
469 }
470
471 // Disable / Enable
472 if ($permissiontoadd) {
473 if ($object->status == Workstation::STATUS_ENABLED) {
474 print dolGetButtonAction('', $langs->trans('Disable'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=disable&token='.newToken(), '', $permissiontoadd);
475 } else {
476 print dolGetButtonAction('', $langs->trans('Enable'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=enable&token='.newToken(), '', $permissiontoadd);
477 }
478 }
479
480 // Delete (with preloaded confirm popup)
481 $deleteUrl = $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken();
482 $buttonId = 'action-delete-no-ajax';
483 if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) { // We can use preloaded confirm if not jmobile
484 $deleteUrl = '';
485 $buttonId = 'action-delete';
486 }
487 $params = array();
488 print dolGetButtonAction('', $langs->trans("Delete"), 'delete', $deleteUrl, $buttonId, $permissiontodelete, $params);
489 }
490 print '</div>'."\n";
491 }
492}
493
494// End of page
495llxFooter();
496$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
DAO Resource object.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage forms for the module resource.
Class to manage user groups.
Class for Workstation.
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.
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.
getMultidirOutput($object, $module='', $forobject=0, $mode='output')
Return the full path of the directory where a module (or an object of a module) stores its files.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
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.
workstationPrepareHead($object)
Prepare array of tabs for Workstation.