Example #1
0
 /**
  * Lightweight method to get the parser output for a page, checking the parser cache
  * and so on. Doesn't consider most of the stuff that WikiPage::view is forced to
  * consider, so it's not appropriate to use there.
  *
  * @since 1.16 (r52326) for LiquidThreads
  *
  * @param $oldid mixed integer Revision ID or null
  * @param $user User The relevant user
  * @return ParserOutput or false if the given revsion ID is not found
  */
 public function getParserOutput($oldid = null, User $user = null)
 {
     global $wgUser;
     $user = is_null($user) ? $wgUser : $user;
     $parserOptions = $this->mPage->makeParserOptions($user);
     return $this->mPage->getParserOutput($parserOptions, $oldid);
 }
Example #2
0
 /**
  * Lightweight method to get the parser output for a page, checking the parser cache
  * and so on. Doesn't consider most of the stuff that WikiPage::view is forced to
  * consider, so it's not appropriate to use there.
  *
  * @since 1.16 (r52326) for LiquidThreads
  *
  * @param $oldid mixed integer Revision ID or null
  * @param $user User The relevant user
  * @return ParserOutput or false if the given revsion ID is not found
  */
 public function getParserOutput($oldid = null, User $user = null)
 {
     if ($user === null) {
         $parserOptions = $this->getParserOptions();
     } else {
         $parserOptions = $this->mPage->makeParserOptions($user);
     }
     return $this->mPage->getParserOutput($parserOptions, $oldid);
 }
Example #3
0
 /**
  * Lightweight method to get the parser output for a page, checking the parser cache
  * and so on. Doesn't consider most of the stuff that WikiPage::view is forced to
  * consider, so it's not appropriate to use there.
  *
  * @since 1.16 (r52326) for LiquidThreads
  *
  * @param $oldid mixed integer Revision ID or null
  * @param $user User The relevant user
  * @return ParserOutput or false if the given revsion ID is not found
  */
 public function getParserOutput($oldid = null, User $user = null)
 {
     //XXX: bypasses mParserOptions and thus setParserOptions()
     if ($user === null) {
         $parserOptions = $this->getParserOptions();
     } else {
         $parserOptions = $this->mPage->makeParserOptions($user);
     }
     return $this->mPage->getParserOutput($parserOptions, $oldid);
 }
Example #4
0
 /**
  * @param $page WikiPage
  * @param $popts ParserOptions
  * @param $pageId Int
  * @param $getWikitext Bool
  * @return ParserOutput
  */
 private function getParsedContent(WikiPage $page, $popts, $pageId = null, $getWikitext = false)
 {
     $this->content = $page->getContent(Revision::RAW);
     //XXX: really raw?
     if ($this->section !== false && $this->content !== null) {
         $this->content = $this->getSectionContent($this->content, !is_null($pageId) ? 'page id ' . $pageId : $page->getTitle()->getText());
         // Not cached (save or load)
         return $this->content->getParserOutput($page->getTitle(), null, $popts);
     } else {
         // Try the parser cache first
         // getParserOutput will save to Parser cache if able
         $pout = $page->getParserOutput($popts);
         if (!$pout) {
             $this->dieUsage("There is no revision ID {$page->getLatest()}", 'missingrev');
         }
         if ($getWikitext) {
             $this->content = $page->getContent(Revision::RAW);
         }
         return $pout;
     }
 }
 protected function getParserOutput(WikiPage $page, Revision $rev)
 {
     $parserOptions = $page->makeParserOptions($this->getContext());
     if (!$rev->isCurrent() || !$rev->getTitle()->quickUserCan('edit', $this->getUser())) {
         $parserOptions->setEditSection(false);
     }
     $parserOutput = $page->getParserOutput($parserOptions, $rev->getId());
     return $parserOutput;
 }
Example #6
0
 public function testOnAddingAndRemovingCategoryToTemplates_embeddingPagesAreIgnored()
 {
     $this->setMwGlobals('wgCategoryCollation', 'uppercase');
     $templateTitle = Title::newFromText('Template:TestingTemplate');
     $templatePage = new WikiPage($templateTitle);
     $wikiPage = new WikiPage(Title::newFromText('Testing'));
     $wikiPage->doEditContent(new WikitextContent('{{TestingTemplate}}'), 'added template');
     $this->runAllRelatedJobs();
     $otherWikiPage = new WikiPage(Title::newFromText('Some_other_page'));
     $otherWikiPage->doEditContent(new WikitextContent('{{TestingTemplate}}'), 'added template');
     $this->runAllRelatedJobs();
     $this->assertRecentChangeByCategorization($templateTitle, $templatePage->getParserOutput(new ParserOptions()), Title::newFromText('Baz'), []);
     $templatePage->doEditContent(new WikitextContent('[[Category:Baz]]'), 'added category');
     $this->runAllRelatedJobs();
     $this->assertRecentChangeByCategorization($templateTitle, $templatePage->getParserOutput(new ParserOptions()), Title::newFromText('Baz'), [['Baz', '[[:Template:TestingTemplate]] added to category, ' . '[[Special:WhatLinksHere/Template:TestingTemplate|this page is included within other pages]]']]);
 }
 /**
  * @covers WikiPage::getParserOutput
  */
 public function testGetParserOutput_nonexisting()
 {
     static $count = 0;
     $count++;
     $page = new WikiPage(new Title("WikiPageTest_testGetParserOutput_nonexisting_{$count}"));
     $opt = new ParserOptions();
     $po = $page->getParserOutput($opt);
     $this->assertFalse($po, "getParserOutput() shall return false for non-existing pages.");
 }
 /**
  * Performs a page parse
  * @param WikiPage $wp
  * @param ParserOptions $parserOptions
  * @return ParserOutput
  */
 protected function getParserOutput(WikiPage $wp, ParserOptions $parserOptions)
 {
     $time = microtime(true);
     $parserOutput = $wp->getParserOutput($parserOptions);
     $time = microtime(true) - $time;
     if (!$parserOutput) {
         wfDebugLog('mobile', "Empty parser output on '{$wp->getTitle()->getPrefixedText()}'" . ": rev {$wp->getId()}, time {$time}");
         throw new Exception(__METHOD__ . ": PoolCounter didn't return parser output");
     }
     $parserOutput->setTOCEnabled(false);
     return $parserOutput;
 }
 public function execute()
 {
     global $IP;
     require_once "{$IP}/extensions/wikihow/common/S3.php";
     define('WH_USE_BACKUP_DB', true);
     $pageIds = array();
     // allow for the input files to be specified on the command line
     if ($this->getOption('stream')) {
         $data = stream_get_contents(STDIN);
         $data = array_map('trim', explode("\n", $data));
         foreach ($data as $inputTitle) {
             $title = Title::newFromText($inputTitle, 6);
             if (!$title) {
                 continue;
             }
             $id = $title->getArticleID();
             $pageIds[] = $id;
         }
     }
     // if provided title, add that to the array
     $titleText = $this->getOption('title');
     if ($titleText) {
         $title = Title::newFromText($titleText, 6);
         $id = $title->getArticleID();
         $pageIds[] = $id;
     }
     // if there is a start, add articles to the array
     $start = $this->getOption('start');
     if ($start) {
         $dbr = wfGetDB(DB_SLAVE);
         $options = array("page_id > {$start}", "page_namespace = 6");
         $stop = $this->getOption('stop');
         if ($stop) {
             $options[] = "page_id < {$stop}";
         }
         $res = $dbr->select("page", "page_id", $options, __FILE__);
         // put them all into an array first
         foreach ($res as $row) {
             $pageIds[] = $row->page_id;
         }
     }
     $purgeTitles = array();
     $filesToPurgeFromCDN = array();
     foreach ($pageIds as $pageId) {
         $title = Title::newFromID($pageId);
         $file = wfLocalFile($title);
         if (!$file) {
             continue;
         }
         $userName = $file->getUser("text");
         if (WatermarkSupport::isWikihowCreator($userName)) {
             decho("file", $title->getText(), false);
             if ($this->getOption('s3')) {
                 decho("will purge from s3", false, false);
                 self::purgeThumbnailsFromS3($file);
             }
             if ($this->getOption('regenerate')) {
                 decho("will regenerate thumbnails", $file->getThumbnails(), false);
                 WatermarkSupport::recreateThumbnails($file);
                 decho("regeneration of thumbnails complete", false, false);
             }
             if ($this->getOption('purgelocal')) {
                 decho("will purge local cache thumbnails", $file->getThumbnails(), false);
                 $file->purgeCache();
                 // get titles that point here so we can purge them and
                 // regenerate those pages so the thumbnails come back
                 $purgeTitles = array_unique(array_merge($purgeTitles, ImageHelper::getLinkedArticles($title)));
                 decho("purging of thumbnails complete", false, false);
             }
             if ($this->getOption('cdn')) {
                 $filesToPurgeFromCDN[] = $file;
             }
         }
     }
     //purge the titles that have linked to these images
     foreach ($purgeTitles as $linkedTitle) {
         decho('will purge', $linkedTitle, false);
         // will now get the parser output to refresh the thumbnail
         // or else cdn may get reset before the thumbnails are regenerated
         $wp = new WikiPage($linkedTitle);
         $wp->doPurge();
         $po = ParserOptions::newFromUser($wgUser);
         $wp->getParserOutput($po);
     }
     if ($this->getOption('cdn')) {
         decho("will purge from cdn", false, false);
         $this->purgeThumbnailsFromCDNetworks($filesToPurgeFromCDN);
     }
 }
Example #10
0
 public function testOnAddingAndRemovingCategoryToTemplates_embeddingPagesAreIgnored()
 {
     $this->setMwGlobals('wgCategoryCollation', 'uppercase');
     $templateTitle = Title::newFromText('Template:TestingTemplate');
     $templatePage = new WikiPage($templateTitle);
     $wikiPage = new WikiPage(Title::newFromText('Testing'));
     $wikiPage->doEditContent(new WikitextContent('{{TestingTemplate}}'), 'added template');
     $otherWikiPage = new WikiPage(Title::newFromText('Some_other_page'));
     $otherWikiPage->doEditContent(new WikitextContent('{{TestingTemplate}}'), 'added template');
     $templatePage->doEditContent(new WikitextContent('[[Category:Foo]]'), 'added category');
     $this->assertRecentChangeByCategorization($templateTitle, $templatePage->getParserOutput(new ParserOptions()), Title::newFromText('Foo'), array(array('Foo', '[[:Template:TestingTemplate]] and 2 pages added to category')));
 }