111 global $langs, $user, $dolibarr_main_db_name;
115 require_once DOL_DOCUMENT_ROOT.
'/core/class/menu.class.php';
116 $this->menu =
new Menu();
121 if ($mode ==
'topnb') {
125 if ($mode ==
'top') {
133 if ($mode !=
'jmobile' && $mode !=
'topnb' && $usemenuhider && !
getDolGlobalString(
'MAIN_OPTIMIZEFORTEXTBROWSER')) {
135 $classname =
'class="tmenu menuhider nohover"';
138 $this->menu->add(
'#',
'', 0, $showmode, $this->atarget,
"xxx",
'', 0,
$id, $idsel, $classname);
143 $classname =
'class="tmenusel"';
146 $this->menu->add(
'/index.php', $langs->trans(
"Home"), 0, $showmode, $this->atarget,
'home',
'', 10,
$id, $idsel, $classname);
150 $this->menu->liste =
dol_sort_array($this->menu->liste,
'position');
154 foreach ($this->menu->liste as $menkey => $menuval) {
157 print_text_menu_entry_empty($menuval[
'titre'], $menuval[
'enabled'], ($menuval[
'url'] !=
'#' ? DOL_URL_ROOT :
'').$menuval[
'url'], $menuval[
'id'], $menuval[
'idsel'], $menuval[
'classname'], ($menuval[
'target'] ? $menuval[
'target'] : $this->atarget));
172 if ($mode ==
'jmobile') {
175 $classname =
'class="tmenusel"';
178 $this->menu->add(
'/index.php', $langs->trans(
"Home"), 0, $showmode, $this->atarget,
'home',
'', 10,
$id, $idsel, $classname);
180 $substitarray = getCommonSubstitutionArray($langs, 0,
null,
null);
184 $lastlevel = array();
186 print
'<!-- Generate menu list from menu handler '.$this->name.
' -->'.
"\n";
187 foreach ($this->menu->liste as $key => $val) {
188 print
'<ul class="ulmenu" data-inset="true">';
189 print
'<li class="lilevel0">';
191 if ($val[
'enabled'] == 1) {
192 $substitarray = array(
'__LOGIN__' => $user->login,
'__USER_ID__' => $user->id,
'__USER_SUPERVISOR_ID__' => $user->fk_user);
193 $substitarray[
'__USERID__'] = $user->id;
196 if (!preg_match(
'/^http/', $val[
'url'])) {
199 $relurl = $val[
'url'];
202 $canonurl = preg_replace(
'/\?.*$/',
'', $val[
'url']);
204 print
'<a class="alilevel0" href="#">';
207 if ($val[
'level'] == 0 && $val[
'mainmenu'] ==
'home') {
208 print
'<span class="fas fa-home fa-fw paddingright" aria-hidden="true"></span>';
215 $tmpmainmenu = $val[
'mainmenu'];
216 $tmpleftmenu =
'all';
217 $submenu =
new Menu();
219 $langs->load(
"admin");
220 $submenu->add(
"/admin/index.php?leftmenu=setup", $langs->trans(
"Setup"), 0);
221 $submenu->add(
"/admin/company.php", $langs->trans(
"MenuCompanySetup"), 1);
222 $submenu->add(
"/admin/modules.php", $langs->trans(
"Modules"), 1);
223 $submenu->add(
"/admin/menus.php", $langs->trans(
"Menus"), 1);
224 $submenu->add(
"/admin/ihm.php", $langs->trans(
"GUISetup"), 1);
225 $submenu->add(
"/admin/translation.php?mainmenu=home", $langs->trans(
"Translation"), 1);
226 $submenu->add(
"/admin/defaultvalues.php?mainmenu=home", $langs->trans(
"DefaultValues"), 1);
228 $submenu->add(
"/admin/boxes.php?mainmenu=home", $langs->trans(
"Boxes"), 1);
229 $submenu->add(
"/admin/delais.php?mainmenu=home", $langs->trans(
"Alerts"), 1);
230 $submenu->add(
"/admin/proxy.php?mainmenu=home", $langs->trans(
"Security"), 1);
231 $submenu->add(
"/admin/limits.php?mainmenu=home", $langs->trans(
"MenuLimits"), 1);
232 $submenu->add(
"/admin/pdf.php?mainmenu=home", $langs->trans(
"PDF"), 1);
233 $submenu->add(
"/admin/mails.php?mainmenu=home", $langs->trans(
"Emails"), 1);
234 $submenu->add(
"/admin/sms.php?mainmenu=home", $langs->trans(
"SMS"), 1);
235 $submenu->add(
"/admin/dict.php?mainmenu=home", $langs->trans(
"DictionarySetup"), 1);
236 $submenu->add(
"/admin/const.php?mainmenu=home", $langs->trans(
"OtherSetup"), 1);
246 $canonrelurl = preg_replace(
'/\?.*$/',
'', $relurl);
247 $canonnexturl = preg_replace(
'/\?.*$/',
'', $nexturl);
250 if (($canonrelurl != $canonnexturl && !in_array($val[
'mainmenu'], array(
'tools')))
251 || (strpos($canonrelurl,
'/product/index.php') !==
false || strpos($canonrelurl,
'/compta/bank/list.php') !==
false)) {
253 print str_pad(
'', 1).
'<li class="lilevel1 ui-btn-icon-right ui-btn">';
254 print
'<a href="'.$relurl.
'">';
255 if ($langs->trans(ucfirst($val[
'mainmenu']).
"Dashboard") == ucfirst($val[
'mainmenu']).
"Dashboard") {
256 if (in_array($val[
'mainmenu'], array(
'cashdesk',
'websites'))) {
257 print $langs->trans(
"Access");
259 print $langs->trans(
"Dashboard");
262 print $langs->trans(ucfirst($val[
'mainmenu']).
"Dashboard");
268 if ($val[
'level'] == 0) {
269 if ($val[
'enabled']) {
270 $lastlevel[0] =
'enabled';
271 } elseif ($showmenu) {
272 $lastlevel[0] =
'greyed';
274 $lastlevel[0] =
'hidden';
278 $lastlevel2 = array();
279 foreach ($submenu->liste as $key2 => $val2) {
286 if ($val2[
'level'] > 0) {
287 $levelcursor = $val2[
'level'] - 1;
288 while ($levelcursor >= 0) {
290 if ($lastlevel2[$levelcursor] !=
'enabled') {
301 $canonurl2 = preg_replace(
'/\?.*$/',
'', $val2[
'url']);
303 if (in_array($canonurl2, array(
'/admin/index.php',
'/admin/tools/index.php',
'/core/tools.php'))) {
308 if (!$val2[
'enabled']) {
309 $disabled =
" vsmenudisabled";
313 print str_pad(
'', $val2[
'level'] + 1);
314 print
'<li class="lilevel'.($val2[
'level'] + 1);
315 if ($val2[
'level'] == 0) {
316 print
' ui-btn-icon-right ui-btn';
318 print $disabled.
'">';
320 if ($val2[
'enabled']) {
322 print
'<a href="'.$relurl2.
'">';
323 $lastlevel2[$val2[
'level']] =
'enabled';
326 print
'<a href="#" class="vsmenudisabled">';
327 $lastlevel2[$val2[
'level']] =
'greyed';
330 if ($val2[
'enabled']) {
331 $lastlevel2[$val2[
'level']] =
'enabled';
333 $lastlevel2[$val2[
'level']] =
'greyed';
338 if ($val2[
'level'] == 0 && !empty($val2[
'prefix'])) {
339 print $val2[
'prefix'];
341 print
'<i class="fa fa-does-not-exists fa-fw paddingright pictofixedwidth"></i>';
352 if ($val[
'enabled'] == 2) {
353 print
'<span class="spanlilevel0 vsmenudisabled">';
356 if ($val[
'level'] == 0 && !empty($val[
'prefix'])) {
357 print $val[
'prefix'];
368 if ($mode ==
'left') {
372 $langs->load(
"admin");
373 $this->menu->add(
"/admin/index.php?leftmenu=setup", $langs->trans(
"Setup"), 0);
374 $this->menu->add(
"/admin/company.php", $langs->trans(
"MenuCompanySetup"), 1);
375 $this->menu->add(
"/admin/modules.php", $langs->trans(
"Modules"), 1);
376 $this->menu->add(
"/admin/menus.php", $langs->trans(
"Menus"), 1);
377 $this->menu->add(
"/admin/ihm.php", $langs->trans(
"GUISetup"), 1);
378 $this->menu->add(
"/admin/translation.php?mainmenu=home", $langs->trans(
"Translation"), 1);
379 $this->menu->add(
"/admin/defaultvalues.php?mainmenu=home", $langs->trans(
"DefaultValues"), 1);
381 $this->menu->add(
"/admin/boxes.php?mainmenu=home", $langs->trans(
"Boxes"), 1);
382 $this->menu->add(
"/admin/delais.php?mainmenu=home", $langs->trans(
"Alerts"), 1);
383 $this->menu->add(
"/admin/proxy.php?mainmenu=home", $langs->trans(
"Security"), 1);
384 $this->menu->add(
"/admin/limits.php?mainmenu=home", $langs->trans(
"MenuLimits"), 1);
385 $this->menu->add(
"/admin/pdf.php?mainmenu=home", $langs->trans(
"PDF"), 1);
386 $this->menu->add(
"/admin/mails.php?mainmenu=home", $langs->trans(
"Emails"), 1);
387 $this->menu->add(
"/admin/sms.php?mainmenu=home", $langs->trans(
"SMS"), 1);
388 $this->menu->add(
"/admin/dict.php?mainmenu=home", $langs->trans(
"DictionarySetup"), 1);
389 $this->menu->add(
"/admin/const.php?mainmenu=home", $langs->trans(
"OtherSetup"), 1);
393 $menu_array_before = array();
394 $menu_array_after = array();
398 $menu_array = $this->menu->liste;
399 if (is_array($menu_array_before)) {
400 $menu_array = array_merge($menu_array_before, $menu_array);
402 if (is_array($menu_array_after)) {
403 $menu_array = array_merge($menu_array, $menu_array_after);
406 if (!is_array($menu_array)) {
410 '@phan-var-force array<array{rowid:string,fk_menu:string,langs:string,enabled:int<0,2>,type:string,fk_mainmenu:string,fk_leftmenu:string,url:string,titre:string,perms:string,target:string,mainmenu:string,leftmenu:string,position:int,positionfull:int|string,showtopmenuinframe:int,level?:int,prefix:string}> $menu_array';
415 $blockvmenuopened =
false;
416 $num = count($menu_array);
417 foreach (array_keys($menu_array) as $i) {
419 if (empty($menu_array[$i][
'level'])) {
421 $blockvmenuopened =
true;
423 for ($j = ($i + 1); $j < $num; $j++) {
424 if (empty($menu_array[$j][
'level'])) {
430 if (($alt % 2 == 0)) {
431 print
'<div class="blockvmenub lockvmenuimpair blockvmenuunique'.($lastopened ?
' blockvmenulast' :
'').($alt == 1 ?
' blockvmenufirst' :
'').
'">'.
"\n";
433 print
'<div class="blockvmenu blockvmenupair blockvmenuunique'.($lastopened ?
' blockvmenulast' :
'').($alt == 1 ?
' blockvmenufirst' :
'').
'">'.
"\n";
439 $tabul = ($menu_array[$i][
'level'] - 1);
441 for ($j = 0; $j < $tabul; $j++) {
442 $tabstring .=
' ';
446 if ($menu_array[$i][
'level'] == 0) {
447 if ($menu_array[$i][
'enabled']) {
448 print
'<div class="menu_titre">'.$tabstring.
'<a class="vmenu" href="'.
dol_buildpath($menu_array[$i][
'url'], 1).
'"'.($menu_array[$i][
'target'] ?
' target="'.$menu_array[$i][
'target'].
'"' :
'').
'>'.$menu_array[$i][
'titre'].
'</a></div>'.
"\n";
450 print
'<div class="menu_titre">'.$tabstring.
'<span class="vmenudisabled">'.$menu_array[$i][
'titre'].
'</span></div>'.
"\n";
452 print
'<div class="menu_top"></div>'.
"\n";
455 if ($menu_array[$i][
'level'] > 0) {
457 if ($menu_array[$i][
'url']) {
458 $cssmenu =
' menu_contenu'.dol_string_nospecial(preg_replace(
'/\.php.*$/',
'', $menu_array[$i][
'url']));
461 print
'<div class="menu_contenu'.$cssmenu.
'">';
463 if ($menu_array[$i][
'enabled']) {
465 if ($menu_array[$i][
'url']) {
466 print
'<a class="vsmenu" itle="'.dol_escape_htmltag($menu_array[$i][
'titre']).
'" href="'.
dol_buildpath($menu_array[$i][
'url'], 1).
'"'.($menu_array[$i][
'target'] ?
' target="'.$menu_array[$i][
'target'].
'"' :
'').
'>';
468 print
'<span class="vsmenu" title="'.dol_escape_htmltag($menu_array[$i][
'titre']).
'">';
470 if ($menu_array[$i][
'url']) {
471 print $menu_array[$i][
'titre'].
'</a>';
476 print $tabstring.
'<span class="vsmenudisabled vsmenudisabledmargin">'.$menu_array[$i][
'titre'].
'</span>';
480 if (!strstr($menu_array[$i][
'titre'],
'<table')) {
487 if (empty($menu_array[$i + 1][
'level'])) {
488 print
'<div class="menu_end"></div>'.
"\n";
494 print
'<div class="blockvmenuend"></div>';
498 if ($mode ==
'jmobile') {
499 $this->leftmenu = clone $this->menu;
print_text_menu_entry_empty($text, $showmode, $url, $id, $idsel, $classname, $atarget, $menuval=array())
Output menu entry.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
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...