Exemplo n.º 1
0
 /**
  * Main entry point.
  *
  * @param $session Array: 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 = new LocalSettingsGenerator($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();
 }