X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2Fapi%2FApiQueryInfo.php;h=9170b73261bcb8823ad764a22e934a20ea941447;hb=2ca31236720c7ba1127baf3cdf05d6a90458cccc;hp=fd0b1074ff0ae8fd62ef16d0d86837f39b6d10f6;hpb=5387b8a806cb3ef5144136d05a9ebf5bcdee3b99;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php index fd0b1074ff..9170b73261 100644 --- a/includes/api/ApiQueryInfo.php +++ b/includes/api/ApiQueryInfo.php @@ -1,9 +1,8 @@ @gmail.com * @@ -21,6 +20,8 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html + * + * @file */ if ( !defined( 'MEDIAWIKI' ) ) { @@ -40,15 +41,32 @@ class ApiQueryInfo extends ApiQueryBase { $fld_readable = false, $fld_watched = false, $fld_preload = false, $fld_displaytitle = false; + private $params, $titles, $missing, $everything, $pageCounter; + + private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched, + $pageLatest, $pageLength; + + private $protections, $watched, $talkids, $subjectids, $displaytitles; + + private $tokenFunctions; + public function __construct( $query, $moduleName ) { parent::__construct( $query, $moduleName, 'in' ); } + /** + * @param $pageSet ApiPageSet + * @return void + */ public function requestExtraData( $pageSet ) { + global $wgDisableCounters; + $pageSet->requestField( 'page_restrictions' ); $pageSet->requestField( 'page_is_redirect' ); $pageSet->requestField( 'page_is_new' ); - $pageSet->requestField( 'page_counter' ); + if ( !$wgDisableCounters ) { + $pageSet->requestField( 'page_counter' ); + } $pageSet->requestField( 'page_touched' ); $pageSet->requestField( 'page_latest' ); $pageSet->requestField( 'page_len' ); @@ -80,6 +98,7 @@ class ApiQueryInfo extends ApiQueryBase { 'unblock' => array( 'ApiQueryInfo', 'getUnblockToken' ), 'email' => array( 'ApiQueryInfo', 'getEmailToken' ), 'import' => array( 'ApiQueryInfo', 'getImportToken' ), + 'watch' => array( 'ApiQueryInfo', 'getWatchToken'), ); wfRunHooks( 'APIQueryInfoTokens', array( &$this->tokenFunctions ) ); return $this->tokenFunctions; @@ -186,7 +205,7 @@ class ApiQueryInfo extends ApiQueryBase { public static function getImportToken( $pageid, $title ) { global $wgUser; - if ( !$wgUser->isAllowed( 'import' ) ) { + if ( !$wgUser->isAllowedAny( 'import', 'importupload' ) ) { return false; } @@ -199,6 +218,21 @@ class ApiQueryInfo extends ApiQueryBase { return $cachedImportToken; } + public static function getWatchToken( $pageid, $title ) { + global $wgUser; + if ( !$wgUser->isLoggedIn() ) { + return false; + } + + static $cachedWatchToken = null; + if ( !is_null( $cachedWatchToken ) ) { + return $cachedWatchToken; + } + + $cachedWatchToken = $wgUser->editToken( 'watch' ); + return $cachedWatchToken; + } + public function execute() { $this->params = $this->extractRequestParams(); if ( !is_null( $this->params['prop'] ) ) { @@ -242,7 +276,12 @@ class ApiQueryInfo extends ApiQueryBase { $this->pageRestrictions = $pageSet->getCustomField( 'page_restrictions' ); $this->pageIsRedir = $pageSet->getCustomField( 'page_is_redirect' ); $this->pageIsNew = $pageSet->getCustomField( 'page_is_new' ); - $this->pageCounter = $pageSet->getCustomField( 'page_counter' ); + + global $wgDisableCounters; + + if ( !$wgDisableCounters ) { + $this->pageCounter = $pageSet->getCustomField( 'page_counter' ); + } $this->pageTouched = $pageSet->getCustomField( 'page_touched' ); $this->pageLatest = $pageSet->getCustomField( 'page_latest' ); $this->pageLength = $pageSet->getCustomField( 'page_len' ); @@ -289,9 +328,13 @@ class ApiQueryInfo extends ApiQueryBase { private function extractPageInfo( $pageid, $title ) { $pageInfo = array(); if ( $title->exists() ) { + global $wgDisableCounters; + $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] ); $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] ); - $pageInfo['counter'] = intval( $this->pageCounter[$pageid] ); + $pageInfo['counter'] = $wgDisableCounters + ? "" + : intval( $this->pageCounter[$pageid] ); $pageInfo['length'] = intval( $this->pageLength[$pageid] ); if ( $this->pageIsRedir[$pageid] ) { @@ -337,8 +380,8 @@ class ApiQueryInfo extends ApiQueryBase { } if ( $this->fld_url ) { - $pageInfo['fullurl'] = $title->getFullURL(); - $pageInfo['editurl'] = $title->getFullURL( 'action=edit' ); + $pageInfo['fullurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ); + $pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT ); } if ( $this->fld_readable && $title->userCanRead() ) { $pageInfo['readable'] = ''; @@ -370,6 +413,7 @@ class ApiQueryInfo extends ApiQueryBase { * Get information about protections and put it in $protections */ private function getProtectionInfo() { + global $wgContLang; $this->protections = array(); $db = $this->getDB(); @@ -388,7 +432,7 @@ class ApiQueryInfo extends ApiQueryBase { $a = array( 'type' => $row->pr_type, 'level' => $row->pr_level, - 'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ) + 'expiry' => $wgContLang->formatExpiry( $row->pr_expiry, TS_ISO_8601 ) ); if ( $row->pr_cascade ) { $a['cascade'] = ''; @@ -445,7 +489,7 @@ class ApiQueryInfo extends ApiQueryBase { $this->protections[$row->pt_namespace][$row->pt_title][] = array( 'type' => 'create', 'level' => $row->pt_create_perm, - 'expiry' => Block::decodeExpiry( $row->pt_expiry, TS_ISO_8601 ) + 'expiry' => $wgContLang->formatExpiry( $row->pt_expiry, TS_ISO_8601 ) ); } } @@ -479,7 +523,7 @@ class ApiQueryInfo extends ApiQueryBase { $this->protections[$row->tl_namespace][$row->tl_title][] = array( 'type' => $row->pr_type, 'level' => $row->pr_level, - 'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ), + 'expiry' => $wgContLang->formatExpiry( $row->pr_expiry, TS_ISO_8601 ), 'source' => $source->getPrefixedText() ); } @@ -502,7 +546,7 @@ class ApiQueryInfo extends ApiQueryBase { $this->protections[NS_FILE][$row->il_to][] = array( 'type' => $row->pr_type, 'level' => $row->pr_level, - 'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ), + 'expiry' => $wgContLang->formatExpiry( $row->pr_expiry, TS_ISO_8601 ), 'source' => $source->getPrefixedText() ); } @@ -577,29 +621,27 @@ class ApiQueryInfo extends ApiQueryBase { private function getWatchedInfo() { global $wgUser; - if ( $wgUser->isAnon() || count( $this->titles ) == 0 ) { + if ( $wgUser->isAnon() || count( $this->everything ) == 0 ) { return; } $this->watched = array(); $db = $this->getDB(); - $lb = new LinkBatch( $this->titles ); + $lb = new LinkBatch( $this->everything ); $this->resetQueryParams(); - $this->addTables( array( 'page', 'watchlist' ) ); - $this->addFields( array( 'page_title', 'page_namespace' ) ); + $this->addTables( array( 'watchlist' ) ); + $this->addFields( array( 'wl_title', 'wl_namespace' ) ); $this->addWhere( array( - $lb->constructSet( 'page', $db ), - 'wl_namespace=page_namespace', - 'wl_title=page_title', + $lb->constructSet( 'wl', $db ), 'wl_user' => $wgUser->getID() ) ); $res = $this->select( __METHOD__ ); foreach ( $res as $row ) { - $this->watched[$row->page_namespace][$row->page_title] = true; + $this->watched[$row->wl_namespace][$row->wl_title] = true; } } @@ -679,13 +721,17 @@ class ApiQueryInfo extends ApiQueryBase { ) ); } - protected function getExamples() { + public function getExamples() { return array( 'api.php?action=query&prop=info&titles=Main%20Page', 'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page' ); } + public function getHelpUrls() { + return 'http://www.mediawiki.org/wiki/API:Properties#info_.2F_in'; + } + public function getVersion() { return __CLASS__ . ': $Id$'; }