'dispatch', 'Config.badConfigurationFile' => 'dispatch', 'Request.dispatch' => 'dispatchIfNotInstalledYet', 'Menu.Admin.addItems' => 'addMenu', 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', ); return $hooks; } public function dispatchIfNotInstalledYet(&$module, &$action, &$parameters) { $general = Config::getInstance()->General; if (empty($general['installation_in_progress'])) { return; } if ($module == 'Installation') { return; } $module = 'Installation'; if (!$this->isAllowedAction($action)) { $action = 'welcome'; } $parameters = array(); } public function setControllerToLoad($newControllerName) { $this->installationControllerName = $newControllerName; } protected function getInstallationController() { return new $this->installationControllerName(); } /** * @param \Exception|null $exception */ public function dispatch($exception = null) { if ($exception) { $message = $exception->getMessage(); } else { $message = ''; } Translate::loadCoreTranslation(); $action = Common::getRequestVar('action', 'welcome', 'string'); if ($this->isAllowedAction($action)) { echo FrontController::getInstance()->dispatch('Installation', $action, array($message)); } else { Piwik::exitWithErrorMessage(Piwik::translate('Installation_NoConfigFound')); } exit; } /** * Adds the 'System Check' admin page if the user is the Super User. */ public function addMenu() { MenuAdmin::addEntry('Installation_SystemCheck', array('module' => 'Installation', 'action' => 'systemCheckPage'), Piwik::hasUserSuperUserAccess(), $order = 15); } /** * Adds CSS files to list of CSS files for asset manager. */ public function getStylesheetFiles(&$stylesheets) { $stylesheets[] = "plugins/Installation/stylesheets/systemCheckPage.less"; } private function isAllowedAction($action) { $controller = $this->getInstallationController(); $isActionWhiteListed = in_array($action, array('saveLanguage', 'getBaseCss', 'reuseTables')); return in_array($action, array_keys($controller->getInstallationSteps())) || $isActionWhiteListed; } }