dolibarr 21.0.0-beta
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 MDW <mdeweerd@users.noreply.github.com>
9 * Copyright (C) 2024 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';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
36require_once DOL_DOCUMENT_ROOT.'/core/class/defaultvalues.class.php';
37require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
38
47if (!$user->admin) {
49}
50
51// Load translation files required by the page
52$langs->loadLangs(array('admin', 'other', 'agenda', 'users'));
53
54$action = GETPOST('action', 'aZ09');
55$value = GETPOST('value', '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, array('t.page' => 'comm/action/card.php', 't.param' => 'complete', 't.user_id' => '0', 't.type' => 'createform', 't.entity' => $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 ($conf->global->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 if (dolibarr_set_const($db, "ACTION_EVENT_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity)) {
179 // La constante qui a ete lue en avant du nouveau set
180 // on passe donc par une variable pour avoir un affichage coherent
181 $conf->global->ACTION_EVENT_ADDON_PDF = $value;
182 }
183
184 // On active le modele
185 $ret = delDocumentModel($value, $type);
186 if ($ret > 0) {
187 $ret = addDocumentModel($value, $type, $label, $scandir);
188 }
189}
190
191
196$form = new Form($db);
197$formactions = new FormActions($db);
198
199$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
200
201$wikihelp = 'EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda|DE:Modul_Terminplanung';
202llxHeader('', $langs->trans("AgendaSetup"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-agenda_other');
203
204$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
205print load_fiche_titre($langs->trans("AgendaSetup"), $linkback, 'title_setup');
206
207
208
209$head = agenda_prepare_head();
210
211print dol_get_fiche_head($head, 'other', $langs->trans("Agenda"), -1, 'action');
212
213
214/*
215 * Miscellaneous
216 */
217
218// Define an array def of models
219$def = array();
220
221$sql = "SELECT nom";
222$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
223$sql .= " WHERE type = 'action'";
224$sql .= " AND entity = ".((int) $conf->entity);
225
226$resql = $db->query($sql);
227if ($resql) {
228 $i = 0;
229 $num_rows = $db->num_rows($resql);
230 while ($i < $num_rows) {
231 $array = $db->fetch_array($resql);
232 if (is_array($array)) {
233 array_push($def, $array[0]);
234 }
235 $i++;
236 }
237} else {
238 dol_print_error($db);
239}
240
241if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) {
242 print load_fiche_titre($langs->trans("AgendaModelModule"), '', '');
243
244 print '<table class="noborder centpercent">'."\n";
245 print '<tr class="liste_titre">'."\n";
246 print '<td width="100">'.$langs->trans("Name").'</td>'."\n";
247 print '<td>'.$langs->trans("Description").'</td>'."\n";
248 print '<td class="center" width="60">'.$langs->trans("Status").'</td>'."\n";
249 print '<td class="center" width="60">'.$langs->trans("Default").'</td>'."\n";
250 print '<td class="center" width="40">'.$langs->trans("ShortInfo").'</td>';
251 print '<td class="center" width="40">'.$langs->trans("Preview").'</td>';
252 print '</tr>'."\n";
253
254 clearstatcache();
255
256 $specimenthirdparty = new Societe($db);
257 $specimenthirdparty->initAsSpecimen();
258
259 foreach ($dirmodels as $reldir) {
260 $dir = dol_buildpath($reldir."core/modules/action/doc");
261
262 if (is_dir($dir)) {
263 $handle = opendir($dir);
264 if (is_resource($handle)) {
265 while (($file = readdir($handle)) !== false) {
266 if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
267 $name = substr($file, 4, dol_strlen($file) - 16);
268 $classname = substr($file, 0, dol_strlen($file) - 12);
269 require_once $dir.'/'.$file;
270 $module = new $classname($db, new ActionComm($db));
271
272 '@phan-var-force ModeleAction $module';
273
274 print '<tr class="oddeven">'."\n";
275 print "<td>";
276 print(empty($module->name) ? $name : $module->name);
277 print "</td>\n";
278 print "<td>\n";
279 require_once $dir.'/'.$file;
280 $module = new $classname($db, $specimenthirdparty);
281 '@phan-var-force ModeleAction $module';
282 if (method_exists($module, 'info')) {
283 print $module->info($langs); // @phan-suppress-current-line PhanUndeclaredMethod
284 } else {
285 print $module->description;
286 }
287 print "</td>\n";
288
289 // Active
290 if (in_array($name, $def)) {
291 print '<td class="center">'."\n";
292 if ($conf->global->ACTION_EVENT_ADDON_PDF != "$name") {
293 print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=action">';
294 print img_picto($langs->trans("Enabled"), 'switch_on');
295 print '</a>';
296 } else {
297 print img_picto($langs->trans("Enabled"), 'switch_on');
298 }
299 print "</td>";
300 } else {
301 print '<td class="center">'."\n";
302 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>';
303 print "</td>";
304 }
305
306 // Default
307 print '<td class="center">';
308 if ($conf->global->ACTION_EVENT_ADDON_PDF == "$name") {
309 print img_picto($langs->trans("Default"), 'on');
310 } else {
311 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>';
312 }
313 print '</td>';
314
315 // Info
316 $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
317 $htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
318 $htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
319 $htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
320 $htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
321 print '<td class="center">';
322 print $form->textwithpicto('', $htmltooltip, 1, 0);
323 print '</td>';
324 print '<td class="center">';
325 print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&amp;module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
326 print '</td>';
327
328 print "</tr>\n";
329 }
330 }
331 closedir($handle);
332 }
333 }
334 }
335 print '</table><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 '<table class="noborder allwidth">'."\n";
346print '<tr class="liste_titre">'."\n";
347print '<td>'.$langs->trans("Parameters").'</td>'."\n";
348print '<td class="center">&nbsp;</td>'."\n";
349print '<td class="right"></td>'."\n";
350print '</tr>'."\n";
351
352// AGENDA_DEFAULT_VIEW
353print '<tr class="oddeven">'."\n";
354$htmltext = $langs->trans("ThisValueCanOverwrittenOnUserLevel", $langs->transnoentitiesnoconv("UserGUISetup"));
355print '<td>'.$form->textwithpicto($langs->trans("AGENDA_DEFAULT_VIEW"), $htmltext).'</td>'."\n";
356print '<td class="center">&nbsp;</td>'."\n";
357print '<td class="right">'."\n";
358$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"));
359print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, getDolGlobalString('AGENDA_DEFAULT_VIEW'));
360print '</td></tr>'."\n";
361
362// Manual or automatic
363
364print '<tr class="oddeven">'."\n";
365print '<td>'.$langs->trans("AGENDA_USE_EVENT_TYPE").'</td>'."\n";
366print '<td class="center">&nbsp;</td>'."\n";
367print '<td class="right">'."\n";
368//print ajax_constantonoff('AGENDA_USE_EVENT_TYPE'); Do not use ajax here, we need to reload page to change other combo list
369if (!getDolGlobalString('AGENDA_USE_EVENT_TYPE')) {
370 print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_USE_EVENT_TYPE&token='.newToken().'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
371} else {
372 print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_USE_EVENT_TYPE&token='.newToken().'">'.img_picto($langs->trans("Enabled"), 'switch_on').'</a>';
373}
374print '</td></tr>'."\n";
375
376if (getDolGlobalString('AGENDA_USE_EVENT_TYPE')) {
377 print '<!-- AGENDA_USE_EVENT_TYPE_DEFAULT -->';
378 print '<tr class="oddeven">'."\n";
379 print '<td>'.$langs->trans("AGENDA_USE_EVENT_TYPE_DEFAULT").'</td>'."\n";
380 print '<td class="center">&nbsp;</td>'."\n";
381 print '<td class="right nowrap">'."\n";
382 print $formactions->select_type_actions(getDolGlobalString('AGENDA_USE_EVENT_TYPE_DEFAULT'), "AGENDA_USE_EVENT_TYPE_DEFAULT", 'systemauto', 0, 1, 0, 1, 'minwidth300', 1);
383 print '</td></tr>'."\n";
384}
385
386// AGENDA_EVENT_DEFAULT_STATUS
387print '<tr class="oddeven">'."\n";
388print '<td>'.$langs->trans("AGENDA_EVENT_DEFAULT_STATUS").'</td>'."\n";
389print '<td class="center">&nbsp;</td>'."\n";
390print '<td class="right nowrap">'."\n";
391$defval = 'na';
392$defaultValues = new DefaultValues($db);
393$result = $defaultValues->fetchAll('', '', 0, 0, array('t.page' => 'comm/action/card.php', 't.param' => 'complete', 't.user_id' => '0', 't.type' => 'createform', 't.entity' => $conf->entity));
394if (!is_array($result) && $result < 0) {
395 setEventMessages($defaultValues->error, $defaultValues->errors, 'errors');
396} elseif (count($result) > 0) {
397 $defval = reset($result)->value;
398}
399$formactions->form_select_status_action('agenda', $defval, 1, "AGENDA_EVENT_DEFAULT_STATUS", 0, 1, 'maxwidth200 onrightofpage');
400print '</td></tr>'."\n";
401
402// AGENDA_DEFAULT_FILTER_TYPE
403print '<tr class="oddeven">'."\n";
404print '<td>'.$langs->trans("AGENDA_DEFAULT_FILTER_TYPE").'</td>'."\n";
405print '<td class="center">&nbsp;</td>'."\n";
406print '<td class="right nowrap">'."\n";
407$multiselect = 0;
408if (getDolGlobalString('MAIN_ENABLE_MULTISELECT_TYPE')) {
409 // We use an option here because it adds bugs when used on agenda page "peruser" and "list"
410 $multiselect = (getDolGlobalString('AGENDA_USE_EVENT_TYPE'));
411}
412print $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);
413print '</td></tr>'."\n";
414
415// AGENDA_DEFAULT_FILTER_STATUS
416// TODO Remove to use the default generic feature
417print '<tr class="oddeven">'."\n";
418print '<td>'.$langs->trans("AGENDA_DEFAULT_FILTER_STATUS").'</td>'."\n";
419print '<td class="center">&nbsp;</td>'."\n";
420print '<td class="right">'."\n";
421$formactions->form_select_status_action('agenda', getDolGlobalString('AGENDA_DEFAULT_FILTER_STATUS'), 1, 'AGENDA_DEFAULT_FILTER_STATUS', 1, 2, 'minwidth100');
422print '</td></tr>'."\n";
423
424print '</table>';
425
426print $form->buttonsSaveCancel("Save", '');
427
428print '</form>';
429
430
431print dol_get_fiche_end();
432
433// End of page
434llxFooter();
435$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.
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:71
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...)
llxFooter()
Footer empty.
Definition document.php:107
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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)
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)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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...
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.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition repair.php:152
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.