/** * @brief This returns the HTML output of any SpecialPage::execute function * @details * SpecialPage::capturePath will skip SpecialPages which are not "includable" * (which is all the interesting ones) So we need to force it. * * @requestParam string page the name of the Special page to invoke * @responseParam string output the HTML output of the special page */ public function GetSpecialPage() { if (!$this->wg->User->isAllowed('admindashboard')) { $this->displayRestrictionError(); return false; // skip rendering } // Construct title object from request params $pageName = $this->getVal("page"); $title = SpecialPage::getTitleFor($pageName); // Save global variables and initialize context for special page global $wgOut, $wgTitle; $oldTitle = $wgTitle; $oldOut = $wgOut; $wgOut = new OutputPage(); $wgOut->setTitle($title); $wgTitle = $title; // Construct special page object try { $basePages = array("Categories", "Recentchanges", "Specialpages"); if (in_array($pageName, $basePages)) { $sp = SpecialPageFactory::getPage($pageName); } else { $sp = new $pageName(); } } catch (Exception $e) { print_pre("Could not construct special page object"); } if ($sp instanceof SpecialPage) { $ret = $sp->execute(false); } else { print_pre("Object is not a special page."); } // TODO: check retval of special page call? $this->output = $wgOut->getHTML(); // Restore global variables $wgTitle = $oldTitle; $wgOut = $oldOut; }
/** * Just like executePath() except it returns the HTML instead of outputting it * Returns false if there was no such special page, or a title object if it was * a redirect. * @static */ static function capturePath(&$title) { global $wgOut, $wgTitle; $oldTitle = $wgTitle; $oldOut = $wgOut; $wgOut = new OutputPage(); $wgOut->setTitle($title); $ret = SpecialPage::executePath($title, true); if ($ret === true) { $ret = $wgOut->getHTML(); } $wgTitle = $oldTitle; $wgOut = $oldOut; return $ret; }