/** * Internal function for parsing menu configuration. * * @param string $lng Language code * * @return void */ protected function parseMenuConfig($lng) { $translator = $this->getView()->plugin('translate'); $parseUrl = function ($url) { $url = trim($url); $data = []; if (strpos($url, ',') !== false) { list($url, $target) = explode(',', $url, 2); $url = trim($url); $data['target'] = trim($target); } if (preg_match('/^(http|https):\\/\\//', $url)) { // external url $data['url'] = $url; $data['route'] = false; return $data; } $data['route'] = true; $needle = 'content-'; if (($pos = strpos($url, $needle)) === 0) { // Content pages do not have static routes, so we // need to add required route parameters for url view helper. $page = substr($url, $pos + strlen($needle)); $data['routeParams'] = []; $data['routeParams']['page'] = $page; $url = 'content-page'; } $data['url'] = $url; return $data; }; $this->menuItems = []; foreach ($this->config as $menuKey => $items) { if ($menuKey === 'Parent_Config') { continue; } if (!count($items)) { continue; } $item = ['label' => "menu_{$menuKey}"]; $desc = 'menu_' . $menuKey . '_desc'; if ($translator->translate($desc, null, false) !== false) { $item['desc'] = $desc; } $options = []; foreach ($items as $itemKey => $action) { if (!$action) { continue; } if (!is_string($action)) { if (!isset($action[$lng])) { continue; } else { $action = $action[$lng]; } } $option = array_merge(['label' => "menu_{$itemKey}"], $parseUrl($action)); if ($option['route']) { if (strpos('metalib-', $option['url']) === 0) { if (!$this->metaLibHelper->isAvailable()) { continue; } } if (strpos('primo-', $option['url']) === 0) { if (!$this->primoHelper->isAvailable()) { continue; } } if ($option['url'] === 'browse-database' && !$this->browseHelper->isAvailable('Database')) { continue; } if ($option['url'] === 'browse-journal' && !$this->browseHelper->isAvailable('Journal')) { continue; } } $desc = 'menu_' . $itemKey . '_desc'; if ($translator->translate($desc, null, false) !== false) { $option['desc'] = $desc; } $options[] = $option; } if (empty($options)) { continue; } else { $item['items'] = $options; $this->menuItems[] = $item; } } }