public function getShortcutTargetPage(array $page) { if ((int) $page['doktype'] !== PageRepository::DOKTYPE_SHORTCUT) { return null; } $originalPageUid = $page['uid']; switch ($page['shortcut_mode']) { case 3: // mode: parent page of current page (using PID of current page) $targetPage = $this->getPage($page['pid']); break; case 2: // mode: random subpage of selected or current page $menu = $this->getMenu($page['shortcut'] > 0 ? $page['shortcut'] : $originalPageUid); $targetPage = 0 < count($menu) ? $menu[array_rand($menu)] : $page; break; case 1: // mode: first subpage of selected or current page $menu = $this->getMenu($page['shortcut'] > 0 ? $page['shortcut'] : $originalPageUid); $targetPage = 0 < count($menu) ? reset($menu) : $page; break; case 0: default: // mode: selected page $targetPage = $this->getPage($page['shortcut']); } return $targetPage; }
/** * @param array $pages * @return array */ public function parseMenu(array $pages) { $count = 0; $total = count($pages); $processedPages = []; foreach ($pages as $index => $page) { if (true === $this->pageService->hidePageForLanguageUid($page)) { continue; } $count++; $class = []; $originalPageUid = $page['uid']; $showAccessProtected = (bool) $this->arguments['showAccessProtected']; if ($showAccessProtected) { $pages[$index]['accessProtected'] = $this->pageService->isAccessProtected($page); if (true === $pages[$index]['accessProtected']) { $class[] = $this->arguments['classAccessProtected']; } $pages[$index]['accessGranted'] = $this->pageService->isAccessGranted($page); if (true === $pages[$index]['accessGranted'] && true === $this->pageService->isAccessProtected($page)) { $class[] = $this->arguments['classAccessGranted']; } } $targetPage = $this->pageService->getShortcutTargetPage($page); if ($targetPage !== null) { if ($this->pageService->shouldUseShortcutTarget($this->arguments)) { $pages[$index] = $targetPage; } if ($this->pageService->shouldUseShortcutUid($this->arguments)) { $page['uid'] = $targetPage['uid']; } } if (true === $this->pageService->isActive($originalPageUid, $showAccessProtected)) { $pages[$index]['active'] = true; $class[] = $this->arguments['classActive']; } if (true === $this->pageService->isCurrent($page['uid'])) { $pages[$index]['current'] = true; $class[] = $this->arguments['classCurrent']; } if (0 < count($this->pageService->getMenu($originalPageUid))) { $pages[$index]['hasSubPages'] = true; //TODO: Remove deprecated argument in next major version $class[] = $this->arguments[$this->hasArgument('classHasSubpages') ? 'classHasSubpages' : 'classHasSubPages']; } if (1 === $count) { $class[] = $this->arguments['classFirst']; } if ($count === $total) { $class[] = $this->arguments['classLast']; } $pages[$index]['class'] = implode(' ', $class); $pages[$index]['linktext'] = $this->getItemTitle($pages[$index]); $forceAbsoluteUrl = $this->arguments['forceAbsoluteUrl']; $pages[$index]['link'] = $this->pageService->getItemLink($page, $forceAbsoluteUrl); $processedPages[$index] = $pages[$index]; } return $processedPages; }