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