dolibarr 18.0.6
index.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2006-2013 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2015 Raphaƫl Doursenaud <rdoursenaud@gpcsolutions.fr>
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
27if (!defined('NOLOGIN')) {
28 define('NOLOGIN', '1');
29}
30if (!defined('NOBROWSERNOTIF')) {
31 define('NOBROWSERNOTIF', 1);
32}
33if (!defined('NOIPCHECK')) {
34 define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip
35}
36
37// Load Dolibarr environment
38require '../../main.inc.php';
39require_once '../../core/lib/functions2.lib.php';
40
41$langs->loadLangs(array("main", "install", "other"));
42
43$conf->dol_hide_topmenu = GETPOST('dol_hide_topmenu', 'int');
44$conf->dol_hide_leftmenu = GETPOST('dol_hide_leftmenu', 'int');
45$conf->dol_optimize_smallscreen = GETPOST('dol_optimize_smallscreen', 'int');
46$conf->dol_no_mouse_hover = GETPOST('dol_no_mouse_hover', 'int');
47$conf->dol_use_jmobile = GETPOST('dol_use_jmobile', 'int');
48
49// Security check
50global $dolibarr_main_demo;
51if (empty($dolibarr_main_demo)) {
52 httponly_accessforbidden('Parameter dolibarr_main_demo must be defined in conf file with value "default login,default pass" to enable the demo entry page');
53}
54
55// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
56$res = $hookmanager->initHooks(array('demo'));
57
58$demoprofiles = array();
59$alwayscheckedmodules = array();
60$alwaysuncheckedmodules = array();
61$alwayshiddencheckedmodules = array();
62$alwayshiddenuncheckedmodules = array();
63
64$url = '';
65$url .= ($url ? '&' : '').($conf->dol_hide_topmenu ? 'dol_hide_topmenu='.$conf->dol_hide_topmenu : '');
66$url .= ($url ? '&' : '').($conf->dol_hide_leftmenu ? 'dol_hide_leftmenu='.$conf->dol_hide_leftmenu : '');
67$url .= ($url ? '&' : '').($conf->dol_optimize_smallscreen ? 'dol_optimize_smallscreen='.$conf->dol_optimize_smallscreen : '');
68$url .= ($url ? '&' : '').($conf->dol_no_mouse_hover ? 'dol_no_mouse_hover='.$conf->dol_no_mouse_hover : '');
69$url .= ($url ? '&' : '').($conf->dol_use_jmobile ? 'dol_use_jmobile='.$conf->dol_use_jmobile : '');
70$url = DOL_URL_ROOT.'/index.php'.($url ? '?'.$url : '');
71
72$tmpaction = 'view';
73$parameters = array();
74$object = new stdClass();
75$reshook = $hookmanager->executeHooks('addDemoProfile', $parameters, $object, $tmpaction); // Note that $action and $object may have been modified by some hooks
76$error = $hookmanager->error; $errors = $hookmanager->errors;
77if (empty($reshook)) {
78 $demoprofiles = array(
79 array('default'=>'1', 'key'=>'profdemoservonly', 'label'=>'DemoCompanyServiceOnly',
80 'disablemodules'=>'adherent,barcode,bom,cashdesk,don,expedition,externalsite,ftp,incoterm,mailmanspip,margin,mrp,prelevement,product,productbatch,stock,takepos',
81 //'icon'=>DOL_URL_ROOT.'/public/demo/dolibarr_screenshot8.png',
82 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-service.jpg',
83 'url'=>$url
84 ),
85 array('default'=>'0', 'key'=>'profmanufacture', 'label'=>'DemoCompanyManufacturing',
86 'disablemodules'=>'adherent,contrat,don,externalsite,ficheinter,ftp,mailmanspip,prelevement,service',
87 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-manufacturing.jpg',
88 'url'=>$url
89 ),
90 array('default'=>'0', 'key'=>'profdemoprodstock', 'label'=>'DemoCompanyProductAndStocks',
91 'disablemodules'=>'adherent,bom,contrat,don,externalsite,ficheinter,ftp,mailmanspip,mrp,prelevement,service',
92 //'icon'=>DOL_URL_ROOT.'/public/demo/dolibarr_screenshot2.png',
93 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-product.jpg',
94 'url'=>$url
95 ),
96 array('default'=>'0', 'key'=>'profdemofun2', 'label'=>'DemoFundation2',
97 'disablemodules'=>'barcode,cashdesk,bom,commande,commercial,compta,comptabilite,contrat,expedition,externalsite,ficheinter,ftp,incoterm,mailmanspip,margin,mrp,prelevement,product,productbatch,projet,propal,propale,service,societe,stock,tax,takepos',
98 //'icon'=>DOL_URL_ROOT.'/public/demo/dolibarr_screenshot6.png',
99 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-foundation.jpg',
100 'url'=>$url
101 ),
102 // All demo profile
103 array('default'=>'0', 'key'=>'profdemoall', 'label'=>'ChooseYourDemoProfilMore',
104 'disablemodules'=>'adherent,cashdesk,don,externalsite,mailmanspip',
105 //'icon'=>DOL_URL_ROOT.'/public/demo/dolibarr_screenshot9.png'
106 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-all.jpg'
107 )
108 );
109
110
111 // Visible
112 $alwayscheckedmodules = array('barcode', 'bookmark', 'categorie', 'externalrss', 'fckeditor', 'geoipmaxmind', 'gravatar', 'memcached', 'syslog', 'user', 'webservices'); // Technical module we always want
113 $alwaysuncheckedmodules = array('dav', 'dynamicprices', 'incoterm', 'loan', 'multicurrency', 'paybox', 'paypal', 'stripe', 'google', 'printing', 'scanner', 'skype', 'website'); // Module we dont want by default
114 // Not visible
115 $alwayshiddencheckedmodules = array('accounting', 'api', 'barcode', 'blockedlog', 'bookmark', 'clicktodial', 'comptabilite', 'cron', 'document', 'domain', 'externalrss', 'externalsite', 'fckeditor', 'geoipmaxmind', 'gravatar', 'label', 'ldap',
116 'mailmanspip', 'notification', 'oauth', 'syslog', 'user', 'webservices', 'workflow',
117 // Extended modules
118 'memcached', 'numberwords', 'zipautofillfr');
119 $alwayshiddenuncheckedmodules = array('cashdesk', 'collab', 'dav', 'debugbar', 'emailcollector', 'ftp', 'hrm', 'modulebuilder', 'printing', 'webservicesclient', 'zappier',
120 // Extended modules
121 'awstats', 'bittorrent', 'bootstrap', 'cabinetmed', 'cmcic', 'concatpdf', 'customfield', 'datapolicy', 'deplacement', 'dolicloud', 'filemanager', 'lightbox', 'mantis', 'monitoring', 'moretemplates', 'multicompany', 'nltechno', 'numberingpack', 'openstreetmap',
122 'ovh', 'phenix', 'phpsysinfo', 'pibarcode', 'postnuke', 'dynamicprices', 'receiptprinter', 'selectbank', 'skincoloreditor', 'submiteverywhere', 'survey', 'thomsonphonebook', 'topten', 'tvacerfa', 'voyage', 'webcalendar', 'webmail');
123}
124
125// Search modules
126$dirlist = $conf->file->dol_document_root;
127
128
129// Search modules dirs
130$modulesdir = dolGetModulesDirs();
131
132
133$filename = array();
134$modules = array();
135$orders = array();
136$categ = array();
137$i = 0; // is a sequencer of modules found
138$j = 0; // j is module number. Automatically affected if module number not defined.
139
140foreach ($modulesdir as $dir) {
141 // Charge tableaux modules, nom, numero, orders depuis repertoire dir
142 $handle = @opendir($dir);
143 if (is_resource($handle)) {
144 while (($file = readdir($handle)) !== false) {
145 //print "$i ".$file."\n<br>";
146 if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, dol_strlen($file) - 10) == '.class.php') {
147 $modName = substr($file, 0, dol_strlen($file) - 10);
148
149 if ($modName) {
150 try {
151 include_once $dir.$file;
152 $objMod = new $modName($db);
153
154 if ($objMod->numero > 0) {
155 $j = $objMod->numero;
156 } else {
157 $j = 1000 + $i;
158 }
159
160 $modulequalified = 1;
161
162 // We discard modules according to features level (PS: if module is activated we always show it)
163 $const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i', '', get_class($objMod)));
164 if ($objMod->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2 && empty($conf->global->$const_name)) {
165 $modulequalified = 0;
166 }
167 if ($objMod->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1 && empty($conf->global->$const_name)) {
168 $modulequalified = 0;
169 }
170
171 if ($modulequalified) {
172 $modules[$i] = $objMod;
173 $filename[$i] = $modName;
174 $orders[$i] = $objMod->family."_".$j; // Tri par famille puis numero module
175 //print "x".$modName." ".$orders[$i]."\n<br>";
176 $j++;
177 $i++;
178 }
179 } catch (Exception $e) {
180 dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR);
181 }
182 }
183 }
184 }
185 }
186}
187
188asort($orders);
189//var_dump($orders);
190
191
192/*
193 * Actions
194 */
195
196if (GETPOST('action', 'aZ09') == 'gotodemo') { // Action run when we click on "Start" after selection modules
197 //print 'ee'.GETPOST("demochoice");
198 $disablestring = '';
199 // If we disable modules using a profile choice
200 if (GETPOST("demochoice")) {
201 foreach ($demoprofiles as $profilearray) {
202 if ($profilearray['key'] == GETPOST("demochoice")) {
203 $disablestring = $profilearray['disablemodules'];
204 break;
205 }
206 }
207 }
208 // If we disable modules using personalized list
209 foreach ($modules as $val) {
210 $modulekeyname = strtolower($val->name);
211 if (!GETPOST($modulekeyname) && empty($val->always_enabled) && !in_array($modulekeyname, $alwayscheckedmodules)) {
212 $disablestring .= $modulekeyname.',';
213 if ($modulekeyname == 'propale') {
214 $disablestring .= 'propal,';
215 }
216 }
217 }
218
219 // Do redirect to login page
220 if ($disablestring) {
221 if (GETPOST('urlfrom')) {
222 $url .= (preg_match('/\?/', $url) ? '&amp;' : '?').'urlfrom='.urlencode(GETPOST('urlfrom', 'alpha'));
223 }
224 $url .= (preg_match('/\?/', $url) ? '&amp;' : '?').'disablemodules='.$disablestring;
225 //var_dump($url);exit;
226 header("Location: ".$url);
227 exit;
228 }
229}
230
231
232/*
233 * View
234 */
235
236$head = '';
237$head .= '<meta name="keywords" content="demo,online,demonstration,example,test,erp,crm,demos,web">'."\n";
238$head .= '<meta name="description" content="Dolibarr ERP and CRM demo. You can test here several profiles for Dolibarr ERP and CRM demonstration.">'."\n";
239
240$head .= '
241<script type="text/javascript">
242var openedId="";
243jQuery(document).ready(function () {
244 jQuery("tr.moduleline").hide();
245 // Enable this to allow personalized setup
246 jQuery(".modulelineshow").attr("href","#a1profdemoall");
247 jQuery(".cursorpointer").css("cursor","pointer");
248 jQuery(".modulelineshow").click(function() {
249 console.log("We select the custom demo");
250 var idstring=$(this).attr("id");
251 if (typeof idstring != "undefined")
252 {
253 var currentId = idstring.substring(2);
254 jQuery("tr.moduleline").hide();
255 if (currentId != openedId)
256 {
257 openedId=currentId;
258 jQuery("#tr1"+currentId).show();
259 jQuery("#tr2"+currentId).show();
260 }
261 else openedId = "";
262 }
263 });
264});
265</script>';
266
267llxHeaderVierge($langs->trans("DolibarrDemo"), $head);
268
269
270print "\n";
271
272print '<div class="demoban demobackground">';
273print '<div class="right" style="padding-right: 30px; padding-top: 30px;">';
274print '<a alt="Official portal of your ERP CRM application" targe="_blank" href="https://www.dolibarr.org?utm_medium=website&utm_source=demo"><img class="demologo" src="'.DOL_URL_ROOT.'/theme/dolibarr_logo.svg" alt="Dolibarr logo"></a>';
275print '</div>';
276print '</div>';
277
278print '<div class="demobantext" style="max-width: 1024px;">';
279print '<div style="font-size: 20px; padding: 40px;">';
280print '<div class="hideonsmartphone" style="text-align: justify;">'.$langs->trans("DemoDesc").'</div><br>';
281print '<div class="titre"><span style="font-size: 20px">'.$langs->trans("ChooseYourDemoProfil").'</span></div>';
282print '</div>';
283print '</div>';
284
285
286print '<div class="clearboth"></div>';
287print '<div class="demobanbox">';
288
289$i = 0;
290foreach ($demoprofiles as $profilearray) {
291 if ($profilearray['default'] >= 0) {
292 //print $profilearray['lang'];
293 if (!empty($profilearray['lang'])) {
294 $langs->load($profilearray['lang']);
295 }
296
297 $url = $_SERVER["PHP_SELF"].'?action=gotodemo';
298 $urlwithmod = $url.'&amp;demochoice='.$profilearray['key'];
299 // Should work with DOL_URL_ROOT='' or DOL_URL_ROOT='/dolibarr'
300 //print "xx".$_SERVER["PHP_SELF"].' '.DOL_URL_ROOT.'<br>';
301
302 $urlfrom = preg_replace('/^'.preg_quote(DOL_URL_ROOT, '/').'/i', '', $_SERVER["PHP_SELF"]);
303 //print $urlfrom;
304
305 if (!empty($profilearray['url'])) {
306 $urlwithmod = $profilearray['url'];
307 $urlwithmod = $urlwithmod.(preg_match('/\?/', $urlwithmod) ? '&amp;' : '?').'urlfrom='.urlencode($urlfrom);
308 if (!empty($profilearray['disablemodules'])) {
309 $urlwithmod = $urlwithmod.(preg_match('/\?/', $urlwithmod) ? '&amp;' : '?').'disablemodules='.$profilearray['disablemodules'];
310 }
311 }
312
313 if (empty($profilearray['url'])) {
314 print '<div class="clearboth"></div>';
315 }
316
317 print '<form method="POST" class="valigntop inline-block" name="form'.$profilearray['key'].'" id="form'.$profilearray['key'].'" action="'.$_SERVER["PHP_SELF"].'#a1'.$profilearray['key'].'">'."\n";
318 print '<input type="hidden" name="action" value="gotodemo">'."\n";
319 print '<input type="hidden" name="urlfrom" value="'.dol_escape_htmltag($urlfrom).'">'."\n";
320 print '<input type="hidden" name="token" value="'.newToken().'">'."\n";
321 print '<input type="hidden" name="username" value="demo">'."\n";
322 print '<input type="hidden" name="dol_hide_topmenu" value="'.$conf->dol_hide_topmenu.'">'."\n";
323 print '<input type="hidden" name="dol_hide_leftmenu" value="'.$conf->dol_hide_leftmenu.'">'."\n";
324 print '<input type="hidden" name="dol_optimize_smallscreen" value="'.$conf->dol_optimize_smallscreen.'">'."\n";
325 print '<input type="hidden" name="dol_no_mouse_hover" value="'.$conf->dol_no_mouse_hover.'">'."\n";
326 print '<input type="hidden" name="dol_use_jmobile" value="'.$conf->dol_use_jmobile.'">'."\n";
327
328 print '<div id="div'.$profilearray['key'].'" summary="Dolibarr online demonstration for profile '.$profilearray['label'].'" class="center inline-block CTable CTableRow'.($i % 2 == 0 ? '1' : '0').'">'."\n";
329
330
331 print '<div id="a1'.$profilearray['key'].'" class="demobox '.(empty($profilearray['url']) ? 'modulelineshow cursorpointer' : 'nomodulelines').'">';
332
333 print '<a href="'.$urlwithmod.'" class="'.(empty($profilearray['url']) ? 'modulelineshow' : 'nomodulelines').'">';
334 print '<div style="padding: 10px;">';
335
336 print '<img class="demothumb" src="'.$profilearray['icon'].'" alt="Demo '.$profilearray['label'].'">';
337
338 print '<div class="clearboth"></div>';
339
340 print '<div class="demothumbtext">';
341 print $langs->trans($profilearray['label']);
342 print '</div>';
343
344 print '</div>';
345 print '</a>';
346
347
348 // Modules (a profile you must choose modules)
349 if (empty($profilearray['url'])) {
350 print '<div id="tr1'.$profilearray['key'].'" class="moduleline hidden" style="margin-left: 8px; margin-right: 8px; text-align: justify; font-size:0.75em; line-height: 130%; padding-bottom: 8px">';
351
352 print '<span class="opacitymedium">'.$langs->trans("ThisIsListOfModules").'</span><br><br>';
353
354 print '<div class="csscolumns">';
355
356 $listofdisabledmodules = explode(',', $profilearray['disablemodules']);
357 $j = 0;
358 //$nbcolsmod = empty($conf->dol_optimize_smallscreen) ? 4 : 3;
359 //var_dump($modules);
360 foreach ($orders as $index => $key) { // Loop on qualified (enabled) modules
361 //print $index.' '.$key;
362 $val = $modules[$index];
363 $modulekeyname = strtolower($val->name);
364
365 $modulequalified = 1;
366 if (!empty($val->always_enabled) || in_array($modulekeyname, $alwayshiddenuncheckedmodules)) {
367 $modulequalified = 0;
368 }
369 if ($val->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2 && empty($conf->global->$const_name)) {
370 $modulequalified = 0;
371 }
372 if ($val->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1 && empty($conf->global->$const_name)) {
373 $modulequalified = 0;
374 }
375 if (!$modulequalified) {
376 continue;
377 }
378
379 if (in_array($modulekeyname, $alwayshiddencheckedmodules)) {
380 print "\n".'<!-- Module '.$modulekeyname.' hidden and always checked -->';
381 print '<input type="hidden" name="'.$modulekeyname.'" value="1">';
382 } else {
383 //$modulo = ($j % $nbcolsmod);
384 //if ($modulo == 0) print '<tr>';
385 print '<!-- id='.$val->numero.' -->';
386 print '<div class="nowrap">';
387 print '<input type="checkbox" class="checkbox valignmiddle paddingright" id="id'.$modulekeyname.'" name="'.$modulekeyname.'" value="1" title="'.dol_escape_htmltag($val->getName()).'"';
388 $disabled = '';
389 if (in_array($modulekeyname, $alwaysuncheckedmodules)) {
390 $disabled = 'disabled';
391 print ' '.$disabled;
392 }
393 if (!in_array($modulekeyname, $alwaysuncheckedmodules) && (!in_array($modulekeyname, $listofdisabledmodules) || in_array($modulekeyname, $alwayscheckedmodules))) {
394 print ' checked';
395 }
396 print '>';
397 /*
398 $s = img_picto('', $modulekeyname, 'class="pictofixedwidth paddingleft"');
399 if ($s) {
400 print $s;
401 } else {
402 print img_picto('', 'generic', 'class="pictofixedwidth paddingleft"');
403 }*/
404 print '<label for="id'.$modulekeyname.'" class="inline-block demomaxoveflow valignmiddle paddingleft'.($disabled ? ' opacitymedium' : '').'" title="'.dol_escape_htmltag($val->getName()).'">'.$val->getName().'</label><br>';
405 print '</div>';
406 //if ($modulo == ($nbcolsmod - 1)) print '</tr>';
407 $j++;
408 }
409 }
410
411 print '</div>';
412
413 print '<br><div class="center">';
414 print '<input type="submit" value=" &nbsp; &nbsp; '.$langs->trans("Start").' &nbsp; &nbsp; " class="button">';
415 print '<br><br>';
416 print '</div>';
417
418 print '</div>';
419 }
420
421 print '</div></div>';
422 print '</form>'."\n";
423
424 $i++;
425 }
426}
427
428print '</div>';
429
430print '<br>';
431
432
433// TODO Replace this with a hook
434// Google Adsense (need Google module)
435if (isModEnabled('google') && !empty($conf->global->MAIN_GOOGLE_AD_CLIENT) && !empty($conf->global->MAIN_GOOGLE_AD_SLOT)) {
436 if (empty($conf->dol_use_jmobile)) {
437 print '<div align="center">'."\n";
438 print '<script><!--'."\n";
439 print 'google_ad_client = "'.$conf->global->MAIN_GOOGLE_AD_CLIENT.'";'."\n";
440 print 'google_ad_slot = "'.$conf->global->MAIN_GOOGLE_AD_SLOT.'";'."\n";
441 print 'google_ad_width = '.$conf->global->MAIN_GOOGLE_AD_WIDTH.';'."\n";
442 print 'google_ad_height = '.$conf->global->MAIN_GOOGLE_AD_HEIGHT.';'."\n";
443 print '//-->'."\n";
444 print '</script>'."\n";
445 print '<script src="//pagead2.googlesyndication.com/pagead/show_ads.js"></script>'."\n";
446 print '</div>'."\n";
447 } else {
448 print '<!-- google js advert tag disabled with jmobile -->'."\n";
449 }
450}
451
453
454$db->close();
455
456
464function llxHeaderVierge($title, $head = "")
465{
466 top_httphead();
467
468 top_htmlhead($head, $title, 0, 0, array(), array('public/demo/demo.css'), 0, 1);
469
470 print '<body class="demobody"><div class="demobackgrounddiv">'."\n";
471}
472
479{
480 printCommonFooter('public');
481
482 print "\n";
483 print "</div></body>\n";
484 print "</html>\n";
485}
if(!defined( 'NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined( 'NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) if(!defined( 'NOLOGIN')) if(!defined('NOCSRFCHECK')) if(!defined( 'NOIPCHECK')) llxHeaderVierge()
Header function.
dolGetModulesDirs($subdir='')
Return list of modules directories.
printCommonFooter($zone='private')
Print common footer : conf->global->MAIN_HTML_FOOTER js for switch of menu hider js for conf->global-...
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined( 'NOREQUIREMENU')) if(!empty(GETPOST('seteventmessages', 'alpha'))) if(!function_exists("llxHeader")) top_httphead($contenttype='text/html', $forcenocache=0)
Show HTTP header.
top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $disableforlogin=0, $disablenofollow=0, $disablenoindex=0)
Ouput html header of a page.
llxFooterVierge()
Show footer for demo.
Definition index.php:478
httponly_accessforbidden($message=1, $http_response_code=403, $stringalreadysanitized=0)
Show a message to say access is forbidden and stop program.