/** * __construct() */ public function __construct() { parent::__construct(); $this->aPathRequestParams = array(); $this->bIsNotFound = false; $this->initLanguage(); // Find requested page $oRootPage = PagePeer::getRootPage(); if ($oRootPage === null) { throw new Exception("No root node exists in the database. Use the admin tool to create one."); } $this->oRootNavigationItem = PageNavigationItem::navigationItemForPage($oRootPage); $oMatchingNavigationItem = $this->oRootNavigationItem; while (self::hasNextPathItem()) { $oNextNavigationItem = $oMatchingNavigationItem->namedChild(self::usePath(), Session::language(), false, true); if ($oNextNavigationItem !== null) { $oMatchingNavigationItem = $oNextNavigationItem; } else { self::unusePath(); break; } } self::$CURRENT_NAVIGATION_ITEM = $oMatchingNavigationItem; $oParent = $oMatchingNavigationItem; while (!$oParent instanceof PageNavigationItem) { $oParent = $oParent->getParent(); } if ($oParent !== $oMatchingNavigationItem) { $oParent->setCurrent(false); } self::$CURRENT_PAGE = $oParent->getMe(); // See if the filter(s) changed anything FilterModule::getFilters()->handleNavigationPathFound($this->oRootNavigationItem, $oMatchingNavigationItem); // There may now be new, virtual navigation items. Follow them. while (self::hasNextPathItem()) { $oNextNavigationItem = $oMatchingNavigationItem->namedChild(self::usePath(), Session::language(), false, true); if ($oNextNavigationItem !== null) { $oMatchingNavigationItem = $oNextNavigationItem; } else { self::unusePath(); break; } } // See if anything has changed if (self::$CURRENT_NAVIGATION_ITEM !== $oMatchingNavigationItem && self::$CURRENT_NAVIGATION_ITEM instanceof PageNavigationItem) { self::$CURRENT_NAVIGATION_ITEM->setCurrent(false); //It is, however, still active } self::$CURRENT_NAVIGATION_ITEM = $oMatchingNavigationItem; $iTimesUsed = 0; while (self::hasNextPathItem()) { $sKey = self::usePath(); $iTimesUsed++; $sValue = null; if (self::hasNextPathItem()) { $sValue = self::usePath(); $iTimesUsed++; } $this->aPathRequestParams[] = $sKey; if (!isset($_REQUEST[$sKey]) && $sValue !== null) { $_REQUEST[$sKey] = $sValue; } } for ($i = 1; $i <= $iTimesUsed; $i++) { self::unusePath(); } if ($oMatchingNavigationItem->isFolder()) { $oFirstChild = $oMatchingNavigationItem->getFirstChild(Session::language(), false, true); if ($oFirstChild !== null) { $aAdditionalPathItems = array(); $aRequestParams = LinkUtil::getRequestedParameters(); foreach (self::getRequestPath() as $iKey => $sPathItem) { if ($iKey % 2 === 0 && isset($aRequestParams[$sPathItem])) { unset($aRequestParams[$sPathItem]); } $aAdditionalPathItems[] = $sPathItem; } LinkUtil::redirectToManager(array_merge($oFirstChild->getLink(), $aAdditionalPathItems), null, $aRequestParams); } else { $this->bIsNotFound = true; } } if ($oMatchingNavigationItem->isProtected()) { if (!$oMatchingNavigationItem->isAccessible()) { $oLoginPage = self::$CURRENT_PAGE->getLoginPage(); if ($oLoginPage !== self::$CURRENT_PAGE) { Session::getSession()->setAttribute('login_referrer_page', self::$CURRENT_PAGE); Session::getSession()->setAttribute('login_referrer', LinkUtil::link($oMatchingNavigationItem->getLink(), "FrontendManager")); } if ($oLoginPage === null) { LinkUtil::redirect(LinkUtil::link('', "LoginManager")); } self::$CURRENT_PAGE = $oLoginPage; } } FilterModule::getFilters()->handlePageHasBeenSet(self::$CURRENT_PAGE, $this->bIsNotFound, self::$CURRENT_NAVIGATION_ITEM); }