/** * Main entry point. * * @param array $session initial session array * * @return Array: new session array */ public function execute(array $session) { $this->session = $session; if (isset($session['settings'])) { $this->settings = $session['settings'] + $this->settings; } $this->exportVars(); $this->setupLanguage(); if (($this->getVar('_InstallDone') || $this->getVar('_UpgradeDone')) && $this->request->getVal('localsettings')) { $this->request->response()->header('Content-type: application/x-httpd-php'); $this->request->response()->header('Content-Disposition: attachment; filename="LocalSettings.php"'); $ls = InstallerOverrides::getLocalSettingsGenerator($this); $rightsProfile = $this->rightsProfiles[$this->getVar('_RightsProfile')]; foreach ($rightsProfile as $group => $rightsArr) { $ls->setGroupRights($group, $rightsArr); } echo $ls->getText(); return $this->session; } $cssDir = $this->request->getVal('css'); if ($cssDir) { $cssDir = $cssDir == 'rtl' ? 'rtl' : 'ltr'; $this->request->response()->header('Content-type: text/css'); echo $this->output->getCSS($cssDir); return $this->session; } if (isset($session['happyPages'])) { $this->happyPages = $session['happyPages']; } else { $this->happyPages = array(); } if (isset($session['skippedPages'])) { $this->skippedPages = $session['skippedPages']; } else { $this->skippedPages = array(); } $lowestUnhappy = $this->getLowestUnhappy(); # Special case for Creative Commons partner chooser box. if ($this->request->getVal('SubmitCC')) { $page = $this->getPageByName('Options'); $this->output->useShortHeader(); $this->output->allowFrames(); $page->submitCC(); return $this->finish(); } if ($this->request->getVal('ShowCC')) { $page = $this->getPageByName('Options'); $this->output->useShortHeader(); $this->output->allowFrames(); $this->output->addHTML($page->getCCDoneBox()); return $this->finish(); } # Get the page name. $pageName = $this->request->getVal('page'); if (in_array($pageName, $this->otherPages)) { # Out of sequence $pageId = false; $page = $this->getPageByName($pageName); } else { # Main sequence if (!$pageName || !in_array($pageName, $this->pageSequence)) { $pageId = $lowestUnhappy; } else { $pageId = array_search($pageName, $this->pageSequence); } # If necessary, move back to the lowest-numbered unhappy page if ($pageId > $lowestUnhappy) { $pageId = $lowestUnhappy; if ($lowestUnhappy == 0) { # Knocked back to start, possible loss of session data. $this->showSessionWarning = true; } } $pageName = $this->pageSequence[$pageId]; $page = $this->getPageByName($pageName); } # If a back button was submitted, go back without submitting the form data. if ($this->request->wasPosted() && $this->request->getBool('submit-back')) { if ($this->request->getVal('lastPage')) { $nextPage = $this->request->getVal('lastPage'); } elseif ($pageId !== false) { # Main sequence page # Skip the skipped pages $nextPageId = $pageId; do { $nextPageId--; $nextPage = $this->pageSequence[$nextPageId]; } while (isset($this->skippedPages[$nextPage])); } else { $nextPage = $this->pageSequence[$lowestUnhappy]; } $this->output->redirect($this->getUrl(array('page' => $nextPage))); return $this->finish(); } # Execute the page. $this->currentPageName = $page->getName(); $this->startPageWrapper($pageName); if ($page->isSlow()) { $this->disableTimeLimit(); } $result = $page->execute(); $this->endPageWrapper(); if ($result == 'skip') { # Page skipped without explicit submission. # Skip it when we click "back" so that we don't just go forward again. $this->skippedPages[$pageName] = true; $result = 'continue'; } else { unset($this->skippedPages[$pageName]); } # If it was posted, the page can request a continue to the next page. if ($result === 'continue' && !$this->output->headerDone()) { if ($pageId !== false) { $this->happyPages[$pageId] = true; } $lowestUnhappy = $this->getLowestUnhappy(); if ($this->request->getVal('lastPage')) { $nextPage = $this->request->getVal('lastPage'); } elseif ($pageId !== false) { $nextPage = $this->pageSequence[$pageId + 1]; } else { $nextPage = $this->pageSequence[$lowestUnhappy]; } if (array_search($nextPage, $this->pageSequence) > $lowestUnhappy) { $nextPage = $this->pageSequence[$lowestUnhappy]; } $this->output->redirect($this->getUrl(array('page' => $nextPage))); } return $this->finish(); }
/** * Output stylesheet for web installer pages */ public function outputCss() { $this->request->response()->header('Content-type: text/css'); echo $this->output->getCSS(); }