Contao\BackendUser::navigation PHP Method

navigation() public method

Generate the navigation menu and return it as array
public navigation ( boolean $blnShowAll = false ) : array
$blnShowAll boolean
return array
    public function navigation($blnShowAll = false)
    {
        /** @var AttributeBagInterface $objSessionBag */
        $objSessionBag = \System::getContainer()->get('session')->getBag('contao_backend');
        $arrModules = array();
        $session = $objSessionBag->all();
        // Toggle nodes
        if (\Input::get('mtg')) {
            $session['backend_modules'][\Input::get('mtg')] = isset($session['backend_modules'][\Input::get('mtg')]) && $session['backend_modules'][\Input::get('mtg')] == 0 ? 1 : 0;
            $objSessionBag->replace($session);
            \Controller::redirect(preg_replace('/(&(amp;)?|\\?)mtg=[^& ]*/i', '', \Environment::get('request')));
        }
        foreach ($GLOBALS['BE_MOD'] as $strGroupName => $arrGroupModules) {
            if (!empty($arrGroupModules) && ($strGroupName == 'system' || $this->hasAccess(array_keys($arrGroupModules), 'modules'))) {
                $arrModules[$strGroupName]['class'] = ' node-expanded';
                $arrModules[$strGroupName]['title'] = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['collapseNode']);
                $arrModules[$strGroupName]['label'] = ($label = is_array($GLOBALS['TL_LANG']['MOD'][$strGroupName]) ? $GLOBALS['TL_LANG']['MOD'][$strGroupName][0] : $GLOBALS['TL_LANG']['MOD'][$strGroupName]) != false ? $label : $strGroupName;
                $arrModules[$strGroupName]['href'] = \Controller::addToUrl('mtg=' . $strGroupName);
                // Do not show the modules if the group is closed
                if (!$blnShowAll && isset($session['backend_modules'][$strGroupName]) && $session['backend_modules'][$strGroupName] < 1) {
                    $arrModules[$strGroupName]['modules'] = false;
                    $arrModules[$strGroupName]['class'] = ' node-collapsed';
                    $arrModules[$strGroupName]['title'] = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['expandNode']);
                } else {
                    foreach ($arrGroupModules as $strModuleName => $arrModuleConfig) {
                        // Check access
                        if ($strModuleName == 'undo' || $this->hasAccess($strModuleName, 'modules')) {
                            $arrModules[$strGroupName]['modules'][$strModuleName] = $arrModuleConfig;
                            $arrModules[$strGroupName]['modules'][$strModuleName]['title'] = \StringUtil::specialchars($GLOBALS['TL_LANG']['MOD'][$strModuleName][1]);
                            $arrModules[$strGroupName]['modules'][$strModuleName]['label'] = ($label = is_array($GLOBALS['TL_LANG']['MOD'][$strModuleName]) ? $GLOBALS['TL_LANG']['MOD'][$strModuleName][0] : $GLOBALS['TL_LANG']['MOD'][$strModuleName]) != false ? $label : $strModuleName;
                            $arrModules[$strGroupName]['modules'][$strModuleName]['class'] = 'navigation ' . $strModuleName;
                            $arrModules[$strGroupName]['modules'][$strModuleName]['href'] = TL_SCRIPT . '?do=' . $strModuleName . '&amp;ref=' . TL_REFERER_ID;
                            // Mark the active module and its group
                            if (\Input::get('do') == $strModuleName) {
                                $arrModules[$strGroupName]['class'] .= ' trail';
                                $arrModules[$strGroupName]['modules'][$strModuleName]['class'] .= ' active';
                            }
                        }
                    }
                }
            }
        }
        // HOOK: add custom logic
        if (isset($GLOBALS['TL_HOOKS']['getUserNavigation']) && is_array($GLOBALS['TL_HOOKS']['getUserNavigation'])) {
            foreach ($GLOBALS['TL_HOOKS']['getUserNavigation'] as $callback) {
                $this->import($callback[0]);
                $arrModules = $this->{$callback[0]}->{$callback[1]}($arrModules, $blnShowAll);
            }
        }
        return $arrModules;
    }