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 . '&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;
}