dolibarr 23.0.3
agenda_other.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2008-2016 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2011 Regis Houssin <regis.houssin@inodbox.com>
4 * Copyright (C) 2011-2017 Juanjo Menent <jmenent@2byte.es>
5 * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
6 * Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
7 * Copyright (C) 2017 Open-DSI <support@open-dsi.fr>
8 * Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
9 * Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see <https://www.gnu.org/licenses/>.
23 */
24
31// Load Dolibarr environment
32require '../main.inc.php';
40require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
41require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
42require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
43require_once DOL_DOCUMENT_ROOT.'/core/class/defaultvalues.class.php';
44require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
45
46if (!$user->admin) {
48}
49
50// Load translation files required by the page
51$langs->loadLangs(array('admin', 'other', 'agenda', 'users'));
52
53$action = GETPOST('action', 'aZ09');
54$value = GETPOST('value', 'alpha');
55$label = GETPOST('label', 'alpha');
56$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
57
58$param = GETPOST('param', 'alpha');
59$cancel = GETPOST('cancel', 'alpha');
60$scandir = GETPOST('scan_dir', 'alpha');
61$type = 'action';
62
63
64/*
65 * Actions
66 */
67
68$error = 0;
69$errors = array();
70
71include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
72
73$reg = array();
74if (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) {
75 $code = $reg[1];
76 $value = (GETPOST($code, 'alpha') ? GETPOST($code, 'alpha') : 1);
77 if (dolibarr_set_const($db, $code, $value, 'chaine', 0, '', $conf->entity) > 0) {
78 header("Location: ".$_SERVER["PHP_SELF"]);
79 exit;
80 } else {
81 dol_print_error($db);
82 }
83}
84
85if (preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) {
86 $code = $reg[1];
87 if (dolibarr_del_const($db, $code, $conf->entity) > 0) {
88 header("Location: ".$_SERVER["PHP_SELF"]);
89 exit;
90 } else {
91 dol_print_error($db);
92 }
93}
94if ($action == 'set') {
95 $getDefaultFilter = GETPOST('AGENDA_DEFAULT_FILTER_TYPE');
96 $defaultfilter = (is_array($getDefaultFilter)) ? implode(',', $getDefaultFilter) : $getDefaultFilter;
97 dolibarr_set_const($db, 'AGENDA_USE_EVENT_TYPE_DEFAULT', GETPOST('AGENDA_USE_EVENT_TYPE_DEFAULT'), 'chaine', 0, '', $conf->entity);
98 dolibarr_set_const($db, 'AGENDA_DEFAULT_FILTER_TYPE', $defaultfilter, 'chaine', 0, '', $conf->entity);
99 dolibarr_set_const($db, 'AGENDA_DEFAULT_FILTER_STATUS', GETPOST('AGENDA_DEFAULT_FILTER_STATUS'), 'chaine', 0, '', $conf->entity);
100 dolibarr_set_const($db, 'AGENDA_DEFAULT_VIEW', GETPOST('AGENDA_DEFAULT_VIEW'), 'chaine', 0, '', $conf->entity);
101
102 $defaultValues = new DefaultValues($db);
103 $result = $defaultValues->fetchAll('', '', 0, 0, "(t.page:=:'comm/action/card.php') AND (t.param:=:'complete') AND (t.user_id:=:0) AND (t.type:=:'createform') AND (t.entity:=:".((int) $conf->entity).")");
104 if (!is_array($result) && $result < 0) {
105 setEventMessages($defaultValues->error, $defaultValues->errors, 'errors');
106 } elseif (count($result) > 0) {
107 foreach ($result as $defval) {
108 $defaultValues->id = $defval->id;
109 $resultDel = $defaultValues->delete($user);
110 if ($resultDel < 0) {
111 setEventMessages($defaultValues->error, $defaultValues->errors, 'errors');
112 }
113 }
114 }
115 $defaultValues->type = 'createform';
116 $defaultValues->entity = $conf->entity;
117 $defaultValues->user_id = 0;
118 $defaultValues->page = 'comm/action/card.php';
119 $defaultValues->param = 'complete';
120 $defaultValues->value = GETPOST('AGENDA_EVENT_DEFAULT_STATUS');
121 $resultCreat = $defaultValues->create($user);
122 if ($resultCreat < 0) {
123 setEventMessages($defaultValues->error, $defaultValues->errors, 'errors');
124 } else {
125 setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
126 }
127} elseif ($action == 'specimen') { // For actioncomm
128 $modele = GETPOST('module', 'alpha');
129
130 $action = new ActionComm($db);
131 $action->initAsSpecimen();
132 $specimenthirdparty = new Societe($db);
133 $specimenthirdparty->initAsSpecimen();
134 $action->thirdparty = $specimenthirdparty;
135
136 // Search template files
137 $file = '';
138 $classname = '';
139 $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
140 foreach ($dirmodels as $reldir) {
141 $file = dol_buildpath($reldir."core/modules/action/doc/pdf_".$modele.".modules.php", 0);
142 if (file_exists($file)) {
143 $classname = "pdf_".$modele;
144 break;
145 }
146 }
147
148 if ($classname !== '') {
149 require_once $file;
150
151 $module = new $classname($db, $action);
152 '@phan-var-force pdf_standard_actions $module';
153
154 if ($module->write_file($action, $langs) > 0) {
155 header("Location: ".DOL_URL_ROOT."/document.php?modulepart=action&file=SPECIMEN.pdf");
156 return;
157 } else {
158 setEventMessages($module->error, $module->errors, 'errors');
159 dol_syslog($module->error, LOG_ERR);
160 }
161 } else {
162 setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
163 dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
164 }
165} elseif ($action == 'setmodel') {
166 // Activate a model
167 //print "sssd".$value;
168 $ret = addDocumentModel($value, $type, $label, $scandir);
169} elseif ($action == 'del') {
170 $ret = delDocumentModel($value, $type);
171 if ($ret > 0) {
172 if (getDolGlobalString('ACTION_EVENT_ADDON_PDF') == "$value") {
173 dolibarr_del_const($db, 'ACTION_EVENT_ADDON_PDF', $conf->entity);
174 }
175 }
176} elseif ($action == 'setdoc') {
177 // Set default model
178 dolibarr_set_const($db, "ACTION_EVENT_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity);
179
180 // On active le modele
181 $ret = delDocumentModel($value, $type);
182 if ($ret > 0) {
183 $ret = addDocumentModel($value, $type, $label, $scandir);
184 }
185}
186
187
192$form = new Form($db);
193$formactions = new FormActions($db);
194
195$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
196
197$wikihelp = 'EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda|DE:Modul_Terminplanung';
198llxHeader('', $langs->trans("AgendaSetup"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-agenda_other');
199
200$linkback = '<a href="'.dolBuildUrl(DOL_URL_ROOT.'/admin/modules.php', ['restore_lastsearch_values' => 1]).'">'.img_picto($langs->trans("BackToModuleList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToModuleList").'</span></a>';
201
202print load_fiche_titre($langs->trans("AgendaSetup"), $linkback, 'title_setup');
203
204
205
206$head = agenda_prepare_head();
207
208print dol_get_fiche_head($head, 'other', $langs->trans("Agenda"), -1, 'action');
209
210
211/*
212 * Miscellaneous
213 */
214
215// Define an array def of models
216$def = array();
217
218$sql = "SELECT nom";
219$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
220$sql .= " WHERE type = 'action'";
221$sql .= " AND entity = ".((int) $conf->entity);
222
223$resql = $db->query($sql);
224if ($resql) {
225 $i = 0;
226 $num_rows = $db->num_rows($resql);
227 while ($i < $num_rows) {
228 $array = $db->fetch_array($resql);
229 if (is_array($array)) {
230 array_push($def, $array[0]);
231 }
232 $i++;
233 }
234} else {
235 dol_print_error($db);
236}
237
238if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) {
239 print load_fiche_titre($langs->trans("AgendaModelModule"), '', '');
240
241 print '<div class="div-table-responsive-no-min">';
242 print '<table class="noborder centpercent">'."\n";
243 print '<tr class="liste_titre">'."\n";
244 print '<td width="100">'.$langs->trans("Name").'</td>'."\n";
245 print '<td>'.$langs->trans("Description").'</td>'."\n";
246 print '<td class="center" width="60">'.$langs->trans("Status").'</td>'."\n";
247 print '<td class="center" width="60">'.$langs->trans("Default").'</td>'."\n";
248 print '<td class="center" width="40">'.$langs->trans("ShortInfo").'</td>';
249 print '<td class="center" width="40">'.$langs->trans("Preview").'</td>';
250 print '</tr>'."\n";
251
252 clearstatcache();
253
254 $specimenthirdparty = new Societe($db);
255 $specimenthirdparty->initAsSpecimen();
256
257 foreach ($dirmodels as $reldir) {
258 $dir = dol_buildpath($reldir."core/modules/action/doc");
259
260 if (is_dir($dir)) {
261 $handle = opendir($dir);
262 if (is_resource($handle)) {
263 while (($file = readdir($handle)) !== false) {
264 if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
265 $name = substr($file, 4, dol_strlen($file) - 16);
266 $classname = substr($file, 0, dol_strlen($file) - 12);
267 require_once $dir.'/'.$file;
268 $module = new $classname($db, new ActionComm($db));
269
270 '@phan-var-force ModeleAction $module';
271
272 print '<tr class="oddeven">'."\n";
273 print "<td>";
274 print(empty($module->name) ? $name : $module->name);
275 print "</td>\n";
276 print "<td>\n";
277 require_once $dir.'/'.$file;
278 $module = new $classname($db, $specimenthirdparty);
279 '@phan-var-force ModeleAction $module';
280 if (method_exists($module, 'info')) {
281 print $module->info($langs); // @phan-suppress-current-line PhanUndeclaredMethod
282 } else {
283 print $module->description;
284 }
285 print "</td>\n";
286
287 // Active
288 if (in_array($name, $def)) {
289 print '<td class="center">'."\n";
290 if (getDolGlobalString('ACTION_EVENT_ADDON_PDF') != "$name") {
291 print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=action">';
292 print img_picto($langs->trans("Enabled"), 'switch_on');
293 print '</a>';
294 } else {
295 print img_picto($langs->trans("Enabled"), 'switch_on');
296 }
297 print "</td>";
298 } else {
299 print '<td class="center">'."\n";
300 print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmodel&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=action">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
301 print "</td>";
302 }
303
304 // Default
305 print '<td class="center">';
306 if (getDolGlobalString('ACTION_EVENT_ADDON_PDF') == "$name") {
307 print img_picto($langs->trans("Default"), 'on');
308 } else {
309 print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.urlencode($name).'&amp;scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&amp;type=action"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
310 }
311 print '</td>';
312
313 // Info
314 $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
315 $htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
316 $htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
317 $htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
318 $htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
319 print '<td class="center">';
320 print $form->textwithpicto('', $htmltooltip, 1, 'info');
321 print '</td>';
322 print '<td class="center">';
323 print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&amp;module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
324 print '</td>';
325
326 print "</tr>\n";
327 }
328 }
329 closedir($handle);
330 }
331 }
332 }
333 print '</table>';
334 print '</div>';
335 print '<br>';
336
337 print load_fiche_titre($langs->trans('MiscellaneousOptions'), '', '');
338}
339
340
341print '<form action="'.$_SERVER["PHP_SELF"].'" name="agenda">';
342print '<input type="hidden" name="token" value="'.newToken().'">';
343print '<input type="hidden" name="action" value="set">';
344
345print '<div class="div-table-responsive-no-min">';
346print '<table class="noborder allwidth">'."\n";
347print '<tr class="liste_titre">'."\n";
348print '<td>'.$langs->trans("Parameters").'</td>'."\n";
349print '<td class="center">&nbsp;</td>'."\n";
350print '<td class="right"></td>'."\n";
351print '</tr>'."\n";
352
353// AGENDA_DEFAULT_VIEW
354print '<tr class="oddeven">'."\n";
355$htmltext = $langs->trans("ThisValueCanOverwrittenOnUserLevel", $langs->transnoentitiesnoconv("UserGUISetup"));
356print '<td class="minwidth200onall">'.$form->textwithpicto($langs->trans("AGENDA_DEFAULT_VIEW"), $htmltext).'</td>'."\n";
357print '<td class="center">&nbsp;</td>'."\n";
358print '<td class="right parentonrightofpage">'."\n";
359$tmplist = array('' => '&nbsp;', 'show_list' => $langs->trans("ViewList"), 'show_month' => $langs->trans("ViewCal"), 'show_week' => $langs->trans("ViewWeek"), 'show_day' => $langs->trans("ViewDay"), 'show_peruser' => $langs->trans("ViewPerUser"));
360print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, getDolGlobalString('AGENDA_DEFAULT_VIEW', 'show_month'), 0, 0, 0, '', 0, 0, 0, '', 'right onrightofpage width150');
361print '</td></tr>'."\n";
362
363// Manual or automatic
364
365print '<tr class="oddeven">'."\n";
366print '<td>'.$langs->trans("AGENDA_USE_EVENT_TYPE").'</td>'."\n";
367print '<td class="center">&nbsp;</td>'."\n";
368print '<td class="right">'."\n";
369//print ajax_constantonoff('AGENDA_USE_EVENT_TYPE'); Do not use ajax here, we need to reload page to change other combo list
370if (!getDolGlobalString('AGENDA_USE_EVENT_TYPE')) {
371 print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_USE_EVENT_TYPE&token='.newToken().'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
372} else {
373 print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_USE_EVENT_TYPE&token='.newToken().'">'.img_picto($langs->trans("Enabled"), 'switch_on').'</a>';
374}
375print '</td></tr>'."\n";
376
377if (getDolGlobalString('AGENDA_USE_EVENT_TYPE')) {
378 print '<!-- AGENDA_USE_EVENT_TYPE_DEFAULT -->';
379 print '<tr class="oddeven">'."\n";
380 print '<td>'.$langs->trans("AGENDA_USE_EVENT_TYPE_DEFAULT").'</td>'."\n";
381 print '<td class="center">&nbsp;</td>'."\n";
382 print '<td class="right parentonrightofpage">'."\n";
383 print $formactions->select_type_actions(getDolGlobalString('AGENDA_USE_EVENT_TYPE_DEFAULT'), "AGENDA_USE_EVENT_TYPE_DEFAULT", 'systemauto', 0, 1, 0, 1, 'minwidth300 right onrightofpage', 1);
384 print '</td></tr>'."\n";
385}
386
387// AGENDA_EVENT_DEFAULT_STATUS
388print '<tr class="oddeven">'."\n";
389print '<td>'.$langs->trans("AGENDA_EVENT_DEFAULT_STATUS").'</td>'."\n";
390print '<td class="center">&nbsp;</td>'."\n";
391print '<td class="right parentonrightofpage">'."\n";
392$defval = 'na';
393$defaultValues = new DefaultValues($db);
394$result = $defaultValues->fetchAll('', '', 0, 0, "(t.page:=:'comm/action/card.php') AND (t.param:=:'complete') AND (t.user_id:=:0) AND (t.type:=:'createform') AND (t.entity:=:".((int) $conf->entity).")");
395if (!is_array($result) && $result < 0) {
396 setEventMessages($defaultValues->error, $defaultValues->errors, 'errors');
397} elseif (count($result) > 0) {
398 $defval = reset($result)->value;
399}
400$formactions->form_select_status_action('agenda', $defval, 1, "AGENDA_EVENT_DEFAULT_STATUS", 0, 1, 'right width200 onrightofpage');
401print '</td></tr>'."\n";
402
403// AGENDA_DEFAULT_FILTER_TYPE
404print '<tr class="oddeven">'."\n";
405print '<td>'.$langs->trans("AGENDA_DEFAULT_FILTER_TYPE").'</td>'."\n";
406print '<td class="center">&nbsp;</td>'."\n";
407print '<td class="right nowrap">'."\n";
408$multiselect = 0;
409if (getDolGlobalString('MAIN_ENABLE_MULTISELECT_TYPE')) {
410 // We use an option here because it adds bugs when used on agenda page "peruser" and "list"
411 $multiselect = (getDolGlobalString('AGENDA_USE_EVENT_TYPE'));
412}
413print $formactions->select_type_actions(getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE'), "AGENDA_DEFAULT_FILTER_TYPE", '', (getDolGlobalString('AGENDA_USE_EVENT_TYPE') ? -1 : 1), 1, $multiselect, 1, 'minwidth300', 1);
414print '</td></tr>'."\n";
415
416// AGENDA_DEFAULT_FILTER_STATUS
417// TODO Remove to use the default generic feature
418print '<tr class="oddeven">'."\n";
419print '<td>'.$langs->trans("AGENDA_DEFAULT_FILTER_STATUS").'</td>'."\n";
420print '<td class="center">&nbsp;</td>'."\n";
421print '<td class="right">'."\n";
422$formactions->form_select_status_action('agenda', getDolGlobalString('AGENDA_DEFAULT_FILTER_STATUS'), 1, 'AGENDA_DEFAULT_FILTER_STATUS', 1, 2, 'minwidth100');
423print '</td></tr>'."\n";
424
425print '</table>';
426print '</div>';
427
428print $form->buttonsSaveCancel("Save", '');
429
430print '</form>';
431
432
433print dol_get_fiche_end();
434
435// End of page
436llxFooter();
437$db->close();
addDocumentModel($name, $type, $label='', $description='')
Add document model used by doc generator.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
delDocumentModel($name, $type)
Delete document model used by doc generator.
agenda_prepare_head()
Prepare array with list of tabs.
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') $form
View.
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 agenda events (actions)
Class for MyObject.
Class to manage building of HTML components.
Class to manage generation of HTML components Only common components must be here.
Class to manage third parties objects (customers, suppliers, prospects...)
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
yn($yesno, $format=1, $color=0)
Return yes or no in current language.
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.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition repair.php:128
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.