Example #1
0
 /**
  * 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;
         }
     }
 }