public function hidePageForLanguageUid($page = null, $languageUid = -1, $normalWhenNoLanguage = true) { if (is_array($page)) { $pageUid = $page['uid']; $pageRecord = $page; } else { $pageUid = 0 === (int) $page ? $GLOBALS['TSFE']->id : (int) $page; $pageRecord = $this->getPage($pageUid); } if (-1 === (int) $languageUid) { $languageUid = $GLOBALS['TSFE']->sys_language_uid; } $l18nCfg = true === isset($pageRecord['l18n_cfg']) ? $pageRecord['l18n_cfg'] : 0; $hideIfNotTranslated = (bool) GeneralUtility::hideIfNotTranslated($l18nCfg); $hideIfDefaultLanguage = (bool) GeneralUtility::hideIfDefaultLanguage($l18nCfg); $pageOverlay = []; if (0 !== $languageUid) { $pageOverlay = $this->getPageRepository()->getPageOverlay($pageUid, $languageUid); } $translationAvailable = 0 !== count($pageOverlay); return true === $hideIfNotTranslated && 0 !== $languageUid && false === $translationAvailable || true === $hideIfDefaultLanguage && (0 === $languageUid || false === $translationAvailable) || false === $normalWhenNoLanguage && 0 !== $languageUid && false === $translationAvailable; }
/** * @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; }