* Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/core/menus/standard/empty.php * \brief This is an example of an empty top menu handler */ /** * Class to manage empty menu * * @phan-suppress PhanRedefineClass */ class MenuManager { /** * @var DoliDB Database handler. */ public $db; /** * @var int<0,1> 0 for internal users, 1 for external users */ public $type_user = 0; /** * @var string Default target to use in links */ public $atarget = ""; /** * @var string */ public $name = "empty"; /** * @var Menu */ public $menu; /** * @var array,type:string,fk_mainmenu:string,fk_leftmenu:string,url:string,titre:string,perms:string,target:string,mainmenu:string,leftmenu:string,position:int,level:int,prefix:string}> */ public $menu_array_after; /** * @var array,type:string,fk_mainmenu:string,fk_leftmenu:string,url:string,titre:string,perms:string,target:string,mainmenu:string,leftmenu:string,position:int,level:int,prefix:string}> */ public $tabMenu; /** * @var Menu */ public $topmenu; /** * @var Menu */ public $leftmenu; /** * Constructor * * @param DoliDB $db Database handler * @param int<0,1> $type_user Type of user */ public function __construct($db, $type_user) { $this->type_user = $type_user; $this->db = $db; } /** * Load this->tabMenu * * @param string $forcemainmenu To force mainmenu to load * @param string $forceleftmenu To force leftmenu to load * @return void */ public function loadMenu($forcemainmenu = '', $forceleftmenu = '') { // Do nothing $this->tabMenu = array(); } /** * Show menu * * @param string $mode 'top', 'left', 'jmobile' * @param ?array $moredata An array with more data to output * @return int<0,max>|string 0 or nb of top menu entries if $mode = 'topnb', string inc ase of bad parameter */ public function showmenu($mode, $moredata = null) { global $user, $conf, $langs, $dolibarr_main_db_name; $id = 'mainmenu'; require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php'; $this->menu = new Menu(); $res = 'ErrorBadParameterForMode'; $noout = 0; //if ($mode == 'jmobile') $noout=1; if ($mode == 'topnb') { return 1; } if ($mode == 'top') { if (empty($noout)) { print_start_menu_array_empty(); } $usemenuhider = 1; // Show/Hide vertical menu if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && !getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) { $showmode = 1; $classname = 'class="tmenu menuhider nohover"'; $idsel = 'menu'; $this->menu->add('#', '', 0, $showmode, $this->atarget, "xxx", '', 0, $id, $idsel, $classname); } // Home $showmode = 1; $classname = 'class="tmenusel"'; $idsel = 'home'; $this->menu->add('/index.php', $langs->trans("Home"), 0, $showmode, $this->atarget, 'home', '', 10, $id, $idsel, $classname); // Sort on position $this->menu->liste = dol_sort_array($this->menu->liste, 'position'); // Output menu entries foreach ($this->menu->liste as $menkey => $menuval) { if (empty($noout)) { print_start_menu_entry_empty($menuval['idsel'], $menuval['classname'], $menuval['enabled']); } if (empty($noout)) { 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)); } if (empty($noout)) { print_end_menu_entry_empty($menuval['enabled']); } } if (empty($noout) && !getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) { print_start_menu_entry_empty('', 'class="tmenuend"', $showmode); } if (empty($noout)) { print_end_menu_entry_empty($showmode); } if (empty($noout)) { print_end_menu_array_empty(); } if ($mode == 'jmobile') { $this->topmenu = clone $this->menu; unset($this->menu->liste); } } if ($mode == 'jmobile') { // Used to get menu in xml ul/li // Home $showmode = 1; $classname = 'class="tmenusel"'; $idsel = 'home'; $this->menu->add('/index.php', $langs->trans("Home"), 0, $showmode, $this->atarget, 'home', '', 10, $id, $idsel, $classname); $substitarray = getCommonSubstitutionArray($langs, 0, null, null); // $this->menu->liste is top menu //var_dump($this->menu->liste);exit; $lastlevel = array(); $showmenu = true; // Is current menu shown - define here to keep static code checker happy print ''."\n"; foreach ($this->menu->liste as $key => $val) { // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu' print '
    '; print '
  • '; $val['url'] = make_substitutions($val['url'], $substitarray); if ($val['enabled'] == 1) { $relurl = dol_buildpath($val['url'], 1); $canonurl = preg_replace('/\?.*$/', '', $val['url']); print ''; // Add font-awesome if ($val['level'] == 0 && $val['mainmenu'] == 'home') { print ''; } print $val['titre']; print ''."\n"; // Search submenu for this mainmenu entry $tmpmainmenu = $val['mainmenu']; $tmpleftmenu = 'all'; $submenu = new Menu(); $langs->load("admin"); // Load translation file admin.lang $submenu->add("/admin/index.php?leftmenu=setup", $langs->trans("Setup"), 0); $submenu->add("/admin/company.php", $langs->trans("MenuCompanySetup"), 1); $submenu->add("/admin/modules.php", $langs->trans("Modules"), 1); $submenu->add("/admin/menus.php", $langs->trans("Menus"), 1); $submenu->add("/admin/ihm.php", $langs->trans("GUISetup"), 1); $submenu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1); $submenu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1); $submenu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"), 1); $submenu->add("/admin/delais.php?mainmenu=home", $langs->trans("Alerts"), 1); $submenu->add("/admin/proxy.php?mainmenu=home", $langs->trans("Security"), 1); $submenu->add("/admin/limits.php?mainmenu=home", $langs->trans("MenuLimits"), 1); $submenu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1); $submenu->add("/admin/mails.php?mainmenu=home", $langs->trans("Emails"), 1); $submenu->add("/admin/sms.php?mainmenu=home", $langs->trans("SMS"), 1); $submenu->add("/admin/dict.php?mainmenu=home", $langs->trans("DictionarySetup"), 1); $submenu->add("/admin/const.php?mainmenu=home", $langs->trans("OtherSetup"), 1); //if ($tmpmainmenu.'-'.$tmpleftmenu == 'home-all') { //var_dump($submenu); exit; //} //if ($tmpmainmenu=='accountancy') { //var_dump($submenu->liste); exit; //} $nexturl = dol_buildpath($submenu->liste[0]['url'], 1); $canonrelurl = preg_replace('/\?.*$/', '', $relurl); $canonnexturl = preg_replace('/\?.*$/', '', $nexturl); print ''; } if ($val['enabled'] == 2) { print ''.$val['titre'].''; } print '
  • '; print '
'."\n"; } } if ($mode == 'left') { // Put here left menu entries // ***** START ***** $langs->load("admin"); // Load translation file admin.lang $this->menu->add("/admin/index.php?leftmenu=setup", $langs->trans("Setup"), 0); $this->menu->add("/admin/company.php", $langs->trans("MenuCompanySetup"), 1); $this->menu->add("/admin/modules.php", $langs->trans("Modules"), 1); $this->menu->add("/admin/menus.php", $langs->trans("Menus"), 1); $this->menu->add("/admin/ihm.php", $langs->trans("GUISetup"), 1); $this->menu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1); $this->menu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1); $this->menu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"), 1); $this->menu->add("/admin/delais.php?mainmenu=home", $langs->trans("Alerts"), 1); $this->menu->add("/admin/proxy.php?mainmenu=home", $langs->trans("Security"), 1); $this->menu->add("/admin/limits.php?mainmenu=home", $langs->trans("MenuLimits"), 1); $this->menu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1); $this->menu->add("/admin/mails.php?mainmenu=home", $langs->trans("Emails"), 1); $this->menu->add("/admin/sms.php?mainmenu=home", $langs->trans("SMS"), 1); $this->menu->add("/admin/dict.php?mainmenu=home", $langs->trans("DictionarySetup"), 1); $this->menu->add("/admin/const.php?mainmenu=home", $langs->trans("OtherSetup"), 1); // ***** END ***** $menu_array_before = array(); $menu_array_after = array(); // do not change code after this $menu_array = $this->menu->liste; if (is_array($menu_array_before)) { $menu_array = array_merge($menu_array_before, $menu_array); } if (is_array($menu_array_after)) { $menu_array = array_merge($menu_array, $menu_array_after); } //var_dump($menu_array);exit; if (!is_array($menu_array)) { return 0; } '@phan-var-force array,type:string,fk_mainmenu:string,fk_leftmenu:string,url:string,titre:string,perms:string,target:string,mainmenu:string,leftmenu:string,position:int,level?:int,prefix:string}> $menu_array'; if (empty($noout)) { $alt = 0; $altok = 0; $blockvmenuopened = false; $num = count($menu_array); foreach (array_keys($menu_array) as $i) { $alt++; if (empty($menu_array[$i]['level'])) { $altok++; $blockvmenuopened = true; $lastopened = true; for ($j = ($i + 1); $j < $num; $j++) { if (empty($menu_array[$j]['level'])) { $lastopened = false; } } $alt = 0; // For menu manager "empty", we force to not have blockvmenufirst defined $lastopened = 1; // For menu manager "empty", we force to not have blockvmenulast defined if (($alt % 2 == 0)) { print '
'."\n"; } else { print '
'."\n"; } } // Add tabulation $tabstring = ''; $tabul = ($menu_array[$i]['level'] - 1); if ($tabul > 0) { for ($j = 0; $j < $tabul; $j++) { $tabstring .= '   '; } } if ($menu_array[$i]['level'] == 0) { if ($menu_array[$i]['enabled']) { print ''."\n"; } else { print ''."\n"; } print ''."\n"; } if ($menu_array[$i]['level'] > 0) { $cssmenu = ''; if ($menu_array[$i]['url']) { $cssmenu = ' menu_contenu'.dol_string_nospecial(preg_replace('/\.php.*$/', '', $menu_array[$i]['url'])); } print ''."\n"; } // If next is a new block or end if (empty($menu_array[$i + 1]['level'])) { print ''."\n"; print "
\n"; } } if ($altok) { print '
'; } } if ($mode == 'jmobile') { $this->leftmenu = clone $this->menu; unset($menu_array); } } unset($this->menu); return $res; } } /** * Output menu entry * * @return void */ function print_start_menu_array_empty() { print '
'; print ''; print '
'; print "\n"; }