extractRequestParams(); if ( !$wgUser->isAllowed( 'purge' ) && !$this->getMain()->isInternalMode() && !$this->getMain()->getRequest()->wasPosted() ) { $this->dieUsageMsg( array( 'mustbeposted', $this->getModuleName() ) ); } $forceLinkUpdate = $params['forcelinkupdate']; $result = array(); foreach ( $params['titles'] as $t ) { $r = array(); $title = Title::newFromText( $t ); if ( !$title instanceof Title ) { $r['title'] = $t; $r['invalid'] = ''; $result[] = $r; continue; } ApiQueryBase::addTitleInfo( $r, $title ); if ( !$title->exists() ) { $r['missing'] = ''; $result[] = $r; continue; } $context = $this->createContext(); $context->setTitle( $title ); $article = Article::newFromTitle( $title, $context ); $article->doPurge(); // Directly purge and skip the UI part of purge(). $r['purged'] = ''; if( $forceLinkUpdate ) { if ( !$wgUser->pingLimiter() ) { global $wgParser, $wgEnableParserCache; $popts = new ParserOptions(); $p_result = $wgParser->parse( $article->getContent(), $title, $popts ); # Update the links tables $u = new LinksUpdate( $title, $p_result ); $u->doUpdate(); $r['linkupdate'] = ''; if ( $wgEnableParserCache ) { $pcache = ParserCache::singleton(); $pcache->save( $p_result, $article, $popts ); } } else { $this->setWarning( $this->parseMsg( array( 'actionthrottledtext' ) ) ); $forceLinkUpdate = false; } } $result[] = $r; } $apiResult = $this->getResult(); $apiResult->setIndexedTagName( $result, 'page' ); $apiResult->addValue( null, $this->getModuleName(), $result ); } public function isWriteMode() { return true; } public function getAllowedParams() { return array( 'titles' => array( ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_REQUIRED => true ), 'forcelinkupdate' => false, ); } public function getParamDescription() { return array( 'titles' => 'A list of titles', 'forcelinkupdate' => 'Update the links tables', ); } public function getDescription() { return array( 'Purge the cache for the given titles.', 'Requires a POST request if the user is not logged in.' ); } public function getPossibleErrors() { return array_merge( parent::getPossibleErrors(), array( array( 'cantpurge' ), ) ); } protected function getExamples() { return array( 'api.php?action=purge&titles=Main_Page|API' ); } public function getHelpUrls() { return 'https://www.mediawiki.org/wiki/API:Purge'; } public function getVersion() { return __CLASS__ . ': $Id: ApiPurge.php 104449 2011-11-28 15:52:04Z reedy $'; } }