/** * Checks page access for possible mandatory redirects. * * @param string $application * @param array $routeData */ protected function handleDefaultController($application, array &$routeData) { if (!RouteHandler::getInstance()->isDefaultController()) { return; } $landingPage = PageMenu::getInstance()->getLandingPage(); if ($landingPage === null) { return; } if (empty($routeData['controller'])) { $routeData['isImplicitController'] = true; } // resolve implicit application abbreviation for landing page controller $landingPageApplication = $landingPage->getApplication(); $primaryApplication = ApplicationHandler::getInstance()->getPrimaryApplication(); $primaryApplicationAbbr = ApplicationHandler::getInstance()->getAbbreviation($primaryApplication->packageID); if ($landingPageApplication == 'wcf') { $landingPageApplication = $primaryApplicationAbbr; } // check if currently invoked application matches the landing page if ($landingPageApplication == $application) { $routeData['controller'] = $landingPage->getController(); if (!URL_LEGACY_MODE) { $routeData['controller'] = self::getTokenizedController($routeData['controller']); } // use alias if defined to prevent incorrect recognition $alias = $this->getAliasByController($routeData['controller']); if ($alias !== null) { $routeData['controller'] = $alias; } return; } // redirect if this is the primary application if ($application === $primaryApplicationAbbr) { HeaderUtil::redirect($landingPage->getLink()); exit; } // set default controller $applicationObj = WCF::getApplicationObject(ApplicationHandler::getInstance()->getApplication($application)); $routeData['controller'] = preg_replace('~^.*?\\\\([^\\\\]+)(?:Action|Form|Page)$~', '\\1', $applicationObj->getPrimaryController()); if (!URL_LEGACY_MODE) { $routeData['controller'] = self::getTokenizedController($routeData['controller']); } }
/** * Loads the default controllers for each active application. */ protected function loadDefaultControllers() { if ($this->defaultControllers === null) { $this->defaultControllers = array(); foreach (ApplicationHandler::getInstance()->getApplications() as $application) { $app = WCF::getApplicationObject($application); if (!$app) { continue; } $controller = $app->getPrimaryController(); if (!$controller) { continue; } $controller = explode('\\', $controller); $controllerName = preg_replace('~(Action|Form|Page)$~', '', array_pop($controller)); $this->defaultControllers[$controller[0]] = $controllerName; } } }