dolibarr 18.0.7
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
25// Load Dolibarr environment
26require '../main.inc.php';
27require_once DOL_DOCUMENT_ROOT.'/core/lib/asset.lib.php';
28require_once DOL_DOCUMENT_ROOT.'/asset/class/asset.class.php';
29require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
30require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
31
32// Load translation files required by the page
33$langs->loadLangs(array("assets", "other"));
34
35// Get parameters
36$id = GETPOST('id', 'int');
37$ref = GETPOST('ref', 'alpha');
38$action = GETPOST('action', 'aZ09');
39$confirm = GETPOST('confirm', 'alpha');
40$cancel = GETPOST('cancel', 'aZ09');
41$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'assetcard'; // To manage different context of search
42$backtopage = GETPOST('backtopage', 'alpha');
43$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
44
45// Initialize technical objects
46$object = new Asset($db);
47$extrafields = new ExtraFields($db);
48$diroutputmassaction = $conf->asset->dir_output.'/temp/massgeneration/'.$user->id;
49$hookmanager->initHooks(array('assetcard', 'globalcard')); // Note that conf->hooks_modules contains array
50
51// Fetch optionals attributes and labels
52$extrafields->fetch_name_optionals_label($object->table_element);
53
54$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
55
56// Initialize array of search criterias
57$search_all = GETPOST("search_all", 'alpha');
58$search = array();
59foreach ($object->fields as $key => $val) {
60 if (GETPOST('search_'.$key, 'alpha')) {
61 $search[$key] = GETPOST('search_'.$key, 'alpha');
62 }
63}
64
65if (empty($action) && empty($id) && empty($ref)) {
66 $action = 'view';
67}
68
69// Load object
70include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
71
72$permissiontoread = $user->hasRight('asset', 'read');
73$permissiontoadd = $user->hasRight('asset', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
74$permissiontodelete = $user->hasRight('asset', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
75$permissionnote = $user->hasRight('asset', 'write'); // Used by the include of actions_setnotes.inc.php
76$permissiondellink = $user->hasRight('asset', 'write'); // Used by the include of actions_dellink.inc.php
77$upload_dir = $conf->asset->multidir_output[isset($object->entity) ? $object->entity : 1];
78
79// Security check (enable the most restrictive one)
80if ($user->socid > 0) accessforbidden();
81if ($user->socid > 0) $socid = $user->socid;
82$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
83restrictedArea($user, $object->element, $object->id, $object->table_element, '', 'fk_soc', 'rowid', $isdraft);
84if (!isModEnabled('asset')) accessforbidden();
85if (!$permissiontoread) accessforbidden();
86
87
88/*
89 * Actions
90 */
91
92$parameters = array();
93$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
94if ($reshook < 0) {
95 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
96}
97
98if (empty($reshook)) {
99 $error = 0;
100
101 $backurlforlist = DOL_URL_ROOT.'/asset/list.php';
102
103 if (empty($backtopage) || ($cancel && empty($id))) {
104 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
105 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
106 $backtopage = $backurlforlist;
107 } else {
108 $backtopage = DOL_URL_ROOT.'/asset/card.php?id='.((!empty($id) && $id > 0) ? $id : '__ID__');
109 }
110 }
111 }
112
113 $object->oldcopy = dol_clone($object);
114 $triggermodname = 'ASSET_MODIFY'; // Name of trigger action code to execute when we modify record
115
116 // Action dispose object
117 if ($action == 'confirm_disposal' && $confirm == 'yes' && $permissiontoadd) {
118 $object->disposal_date = dol_mktime(12, 0, 0, GETPOST('disposal_datemonth', 'int'), GETPOST('disposal_dateday', 'int'), GETPOST('disposal_dateyear', 'int')); // for date without hour, we use gmt
119 $object->disposal_amount_ht = GETPOST('disposal_amount', 'int');
120 $object->fk_disposal_type = GETPOST('fk_disposal_type', 'int');
121 $disposal_invoice_id = GETPOST('disposal_invoice_id', 'int');
122 $object->disposal_depreciated = ((GETPOST('disposal_depreciated') == '1' || GETPOST('disposal_depreciated') == 'on') ? 1 : 0);
123 $object->disposal_subject_to_vat = ((GETPOST('disposal_subject_to_vat') == '1' || GETPOST('disposal_subject_to_vat') == 'on') ? 1 : 0);
124
125 $result = $object->dispose($user, $disposal_invoice_id);
126 if ($result < 0) {
127 setEventMessages($object->error, $object->errors, 'errors');
128 }
129 $action = '';
130 } elseif ($action == "add") {
131 $object->supplier_invoice_id = GETPOST('supplier_invoice_id', 'int');
132 }
133
134 // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
135 include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
136
137 // Actions when linking object each other
138 include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';
139
140 // Actions when printing a doc from card
141 include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
142
143 // Action to move up and down lines of object
144 //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';
145
146 // Action to build doc
147 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
148
149 // Actions to send emails
150 $triggersendname = 'ASSET_SENTBYMAIL';
151 $autocopy = 'MAIN_MAIL_AUTOCOPY_ASSET_TO';
152 $trackid = 'asset'.$object->id;
153 include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
154}
155
156
157/*
158 * View
159 *
160 */
161
162$form = new Form($db);
163$formfile = new FormFile($db);
164
165$title = $langs->trans("Asset").' - '.$langs->trans("Card");
166$help_url = '';
167llxHeader('', $title, $help_url);
168
169// Part to create
170if ($action == 'create') {
171 print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("Asset")), '', 'object_'.$object->picto);
172
173 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
174 print '<input type="hidden" name="token" value="'.newToken().'">';
175 print '<input type="hidden" name="action" value="add">';
176 if ($backtopage) {
177 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
178 }
179 if ($backtopageforcancel) {
180 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
181 }
182 if (GETPOSTISSET('supplier_invoice_id')) {
183 $object->fields['supplier_invoice_id'] = array('type' => 'integer:FactureFournisseur:fourn/class/fournisseur.facture.class.php:1:entity IN (__SHARED_ENTITIES__)', 'label' => 'SupplierInvoice', 'enabled' => '1', 'noteditable' => '1', 'position' => 280, 'notnull' => 0, 'visible' => 1, 'index' => 1, 'validate' => '1',);
184 print '<input type="hidden" name="supplier_invoice_id" value="' . GETPOST('supplier_invoice_id', 'int') . '">';
185 }
186
187 print dol_get_fiche_head(array(), '');
188
189 // Set some default values
190 //if (! GETPOSTISSET('fieldname')) $_POST['fieldname'] = 'myvalue';
191
192 print '<table class="border centpercent tableforfieldcreate">'."\n";
193
194 // Common attributes
195 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
196
197 // Other attributes
198 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
199
200 print '</table>'."\n";
201
202 print dol_get_fiche_end();
203
204 print $form->buttonsSaveCancel("Create");
205
206 print '</form>';
207
208 //dol_set_focus('input[name="ref"]');
209}
210
211// Part to edit record
212if (($id || $ref) && $action == 'edit') {
213 print load_fiche_titre($langs->trans("Asset"), '', 'object_'.$object->picto);
214
215 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
216 print '<input type="hidden" name="token" value="'.newToken().'">';
217 print '<input type="hidden" name="action" value="update">';
218 print '<input type="hidden" name="id" value="'.$object->id.'">';
219 if ($backtopage) {
220 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
221 }
222 if ($backtopageforcancel) {
223 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
224 }
225
226 print dol_get_fiche_head();
227
228 print '<table class="border centpercent tableforfieldedit">'."\n";
229
230 // Common attributes
231 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
232
233 // Other attributes
234 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
235
236 print '</table>';
237
238 print dol_get_fiche_end();
239
240 print $form->buttonsSaveCancel();
241
242 print '</form>';
243}
244
245// Part to show record
246if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
247 $res = $object->fetch_optionals();
248
249 $head = assetPrepareHead($object);
250 print dol_get_fiche_head($head, 'card', $langs->trans("Asset"), -1, $object->picto);
251
252 $formconfirm = '';
253
254 // Confirmation to delete
255 if ($action == 'delete') {
256 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteAsset'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1);
257 } elseif ($action == 'disposal') {
258 // Disposal
259 $langs->load('bills');
260
261 $disposal_date = dol_mktime(12, 0, 0, GETPOST('disposal_datemonth', 'int'), GETPOST('disposal_dateday', 'int'), GETPOST('disposal_dateyear', 'int')); // for date without hour, we use gmt
262 $disposal_amount = GETPOST('disposal_amount', 'int');
263 $fk_disposal_type = GETPOST('fk_disposal_type', 'int');
264 $disposal_invoice_id = GETPOST('disposal_invoice_id', 'int');
265 $disposal_depreciated = GETPOSTISSET('disposal_depreciated') ? GETPOST('disposal_depreciated') : 1;
266 $disposal_depreciated = !empty($disposal_depreciated) ? 1 : 0;
267 $disposal_subject_to_vat = GETPOSTISSET('disposal_subject_to_vat') ? GETPOST('disposal_subject_to_vat') : 1;
268 $disposal_subject_to_vat = !empty($disposal_subject_to_vat) ? 1 : 0;
269
270 $object->fields['fk_disposal_type']['visible'] = 1;
271 $disposal_type_form = $object->showInputField(null, 'fk_disposal_type', $fk_disposal_type, '', '', '', 0);
272 $object->fields['fk_disposal_type']['visible'] = -2;
273
274 $disposal_invoice_form = $form->selectForForms('Facture:compta/facture/class/facture.class.php::(entity:IN:__SHARED_ENTITIES__)', 'disposal_invoice_id', $disposal_invoice_id);
275
276 // Create an array for form
277 $formquestion = array(
278 array('type' => 'date', 'name' => 'disposal_date', 'tdclass' => 'fieldrequired', 'label' => $langs->trans("AssetDisposalDate"), 'value' => $disposal_date),
279 array('type' => 'text', 'name' => 'disposal_amount', 'tdclass' => 'fieldrequired', 'label' => $langs->trans("AssetDisposalAmount"), 'value' => $disposal_amount),
280 array('type' => 'other', 'name' => 'fk_disposal_type', 'tdclass' => 'fieldrequired', 'label' => $langs->trans("AssetDisposalType"), 'value' => $disposal_type_form),
281 array('type' => 'other', 'name' => 'disposal_invoice_id', 'label' => $langs->trans("InvoiceCustomer"), 'value' => $disposal_invoice_form),
282 array('type' => 'checkbox', 'name' => 'disposal_depreciated', 'label' => $langs->trans("AssetDisposalDepreciated"), 'value' => $disposal_depreciated),
283 array('type' => 'checkbox', 'name' => 'disposal_subject_to_vat', 'label' => $langs->trans("AssetDisposalSubjectToVat"), 'value' => $disposal_subject_to_vat),
284 );
285 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('AssetDisposal'), $langs->trans('AssetConfirmDisposalAsk', $object->ref . ' - ' . $object->label), 'confirm_disposal', $formquestion, 'yes', 1);
286 } elseif ($action == 'reopen') {
287 // Re-open
288 // Create an array for form
289 $formquestion = array();
290 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ReOpen'), $langs->trans('AssetConfirmReOpenAsk', $object->ref), 'confirm_reopen', $formquestion, 'yes', 1);
291 }
292 // Clone confirmation
293 /* elseif ($action == 'clone') {
294 // Create an array for form
295 $formquestion = array();
296 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
297 }*/
298
299 // Call Hook formConfirm
300 $parameters = array('formConfirm' => $formconfirm);
301 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
302 if (empty($reshook)) {
303 $formconfirm .= $hookmanager->resPrint;
304 } elseif ($reshook > 0) {
305 $formconfirm = $hookmanager->resPrint;
306 }
307
308 // Print form confirm
309 print $formconfirm;
310
311
312 // Object card
313 // ------------------------------------------------------------
314 $linkback = '<a href="'.DOL_URL_ROOT.'/asset/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
315
316 $morehtmlref = '<div class="refidno">';
317 $morehtmlref .= '</div>';
318
319
320 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
321
322
323 print '<div class="fichecenter">';
324 print '<div class="fichehalfleft">';
325 print '<div class="underbanner clearboth"></div>';
326 print '<table class="border centpercent tableforfield">'."\n";
327
328 // Common attributes
329 $keyforbreak='date_acquisition'; // We change column just before this field
330 //unset($object->fields['fk_project']); // Hide field already shown in banner
331 //unset($object->fields['fk_soc']); // Hide field already shown in banner
332 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
333
334 // Other attributes. Fields from hook formObjectOptions and Extrafields.
335 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
336
337 print '</table>';
338 print '</div>';
339 print '</div>';
340
341 print '<div class="clearboth"></div>';
342
343 print dol_get_fiche_end();
344
345 // Buttons for actions
346 if ($action != 'presend' && $action != 'editline') {
347 print '<div class="tabsAction">' . "\n";
348 $parameters = array();
349 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
350 if ($reshook < 0) {
351 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
352 }
353
354 if (empty($reshook)) {
355 // Send
356 if (empty($user->socid)) {
357 print dolGetButtonAction('', $langs->trans('SendMail'), 'default', $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=presend&mode=init&token=' . newToken() . '#formmailbeforetitle');
358 }
359
360 if ($object->status == $object::STATUS_DRAFT) {
361 print dolGetButtonAction($langs->trans('Modify'), '', 'default', $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=edit&token=' . newToken(), '', $permissiontoadd);
362 }
363
364 // Clone
365 //print dolGetButtonAction($langs->trans('ToClone'), '', 'default', $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=clone&token=' . newToken(), '', false && $permissiontoadd);
366
367 if ($object->status == $object::STATUS_DRAFT) {
368 print dolGetButtonAction($langs->trans('AssetDisposal'), '', 'default', $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=disposal&token=' . newToken(), '', $permissiontoadd);
369 } else {
370 print dolGetButtonAction($langs->trans('ReOpen'), '', 'default', $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=reopen&token=' . newToken(), '', $permissiontoadd);
371 }
372
373 // Delete (need delete permission, or if draft, just need create/modify permission)
374 print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=delete&token=' . newToken(), '', $permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd));
375 }
376 print '</div>' . "\n";
377 }
378
379 // Select mail models is same action as presend
380 if (GETPOST('modelselected')) {
381 $action = 'presend';
382 }
383
384 if ($action != 'presend') {
385 print '<div class="fichecenter"><div class="fichehalfleft">';
386 print '<a name="builddoc"></a>'; // ancre
387
388 $includedocgeneration = 0;
389
390 // Documents
391 if ($includedocgeneration) {
392 $objref = dol_sanitizeFileName($object->ref);
393 $relativepath = $objref.'/'.$objref.'.pdf';
394 $filedir = $conf->asset->dir_output.'/'.$objref;
395 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
396 $genallowed = $user->hasRight('asset', 'read'); // If you can read, you can build the PDF to read content
397 $delallowed = $user->hasRight('asset', 'write'); // If you can create/edit, you can remove a file on card
398 print $formfile->showdocuments('asset:Asset', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $langs->defaultlang);
399 }
400
401 // Show links to link elements
402 $linktoelem = $form->showLinkToObjectBlock($object, null, array('asset'));
403 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
404
405
406 print '</div><div class="fichehalfright">';
407
408 $morehtmlcenter = '';
409 $MAXEVENT = 10;
410
411 $morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/asset/agenda.php?id='.$object->id);
412
413 // List of actions on element
414 include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
415 $formactions = new FormActions($db);
416 $somethingshown = $formactions->showactions($object, $object->element, 0, 1, '', $MAXEVENT, '', $morehtmlcenter);
417
418 print '</div></div>';
419 }
420
421 //Select mail models is same action as presend
422 if (GETPOST('modelselected')) {
423 $action = 'presend';
424 }
425
426 // Presend form
427 $modelmail = 'asset';
428 $defaulttopic = 'InformationMessage';
429 $diroutput = $conf->asset->dir_output;
430 $trackid = 'asset'.$object->id;
431
432 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
433}
434
435// End of page
436llxFooter();
437$db->close();
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif( $action=='specimen') elseif($action=='setmodel') elseif( $action=='del') elseif($action=='setdoc') $formactions
View.
assetPrepareHead(Asset $object)
Prepare array of tabs for Asset.
Definition asset.lib.php:87
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:56
llxFooter()
Empty footer.
Definition wrapper.php:70
Class for Asset.
Class to manage standard extra fields.
Class to manage building of HTML components.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.