From: Yuri Astrakhan Date: Mon, 18 Jun 2007 02:00:23 +0000 (+0000) Subject: API: enh 10260: Added page protection status query in prop=info. Applied modified... X-Git-Tag: 1.31.0-rc.0~52521 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/banques/?a=commitdiff_plain;h=c17a9c53af0a54fe14e9360dbb8b5c323e3fe7a6;p=lhc%2Fweb%2Fwiklou.git API: enh 10260: Added page protection status query in prop=info. Applied modified patch from Roan Kattouw. --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index cf52d8685f..d4e4fbfcd5 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -209,6 +209,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN * (bug 10147) Now interwiki titles are not processed but added to a separate "interwiki" section of the output. * Added categorymembers list to query for pages in a category. +* (bug 10260) Show page protection status == Maintenance script changes since 1.10 == diff --git a/includes/Block.php b/includes/Block.php index c2fc1516ab..af6d57a037 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -628,11 +628,11 @@ class Block /** * Decode expiry which has come from the DB */ - static function decodeExpiry( $expiry ) { + static function decodeExpiry( $expiry, $timestampType = TS_MW ) { if ( $expiry == '' || $expiry == Block::infinity() ) { return Block::infinity(); } else { - return wfTimestamp( TS_MW, $expiry ); + return wfTimestamp( $timestampType, $expiry ); } } diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php index 9e26a79e87..45fad58211 100644 --- a/includes/api/ApiQueryInfo.php +++ b/includes/api/ApiQueryInfo.php @@ -36,7 +36,7 @@ if (!defined('MEDIAWIKI')) { class ApiQueryInfo extends ApiQueryBase { public function __construct($query, $moduleName) { - parent :: __construct($query, $moduleName); + parent :: __construct($query, $moduleName, 'in'); } public function requestExtraData($pageSet) { @@ -50,6 +50,13 @@ class ApiQueryInfo extends ApiQueryBase { public function execute() { + $params = $this->extractRequestParams(); + $fld_protection = false; + if(!is_null($params['prop'])) { + $prop = array_flip($params['prop']); + $fld_protection = isset($prop['protection']); + } + $pageSet = $this->getPageSet(); $titles = $pageSet->getGoodTitles(); $result = $this->getResult(); @@ -61,6 +68,23 @@ class ApiQueryInfo extends ApiQueryBase { $pageLatest = $pageSet->getCustomField('page_latest'); $pageLength = $pageSet->getCustomField('page_len'); + if ($fld_protection) { + $this->addTables('page_restrictions'); + $this->addFields(array('pr_page', 'pr_type', 'pr_level', 'pr_expiry')); + $this->addWhereFld('pr_page', array_keys($titles)); + + $db = $this->getDB(); + $res = $this->select(__METHOD__); + while($row = $db->fetchObject($res)) { + $protections[$row->pr_page][] = array( + 'type' => $row->pr_type, + 'level' => $row->pr_level, + 'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ) + ); + } + $db->freeResult($res); + } + foreach ( $titles as $pageid => $unused ) { $pageInfo = array ( 'touched' => wfTimestamp(TS_ISO_8601, $pageTouched[$pageid]), @@ -75,6 +99,15 @@ class ApiQueryInfo extends ApiQueryBase { if ($pageIsNew[$pageid]) $pageInfo['new'] = ''; + if($fld_protection) { + if (isset($protections[$pageid])) { + $pageInfo['protection'] = $protections[$pageid]; + $result->setIndexedTagName($pageInfo['protection'], 'pr'); + } else { + $pageInfo['protection'] = array(); + } + } + $result->addValue(array ( 'query', 'pages' @@ -82,13 +115,35 @@ class ApiQueryInfo extends ApiQueryBase { } } + protected function getAllowedParams() { + return array ( + 'prop' => array ( + ApiBase :: PARAM_DFLT => NULL, + ApiBase :: PARAM_ISMULTI => true, + ApiBase :: PARAM_TYPE => array ( + 'protection' + )) + ); + } + + protected function getParamDescription() { + return array ( + 'prop' => array ( + 'Which additional properties to get:', + ' "protection" - List the protection level of each page' + ) + ); + } + + protected function getDescription() { return 'Get basic page information such as namespace, title, last touched date, ...'; } protected function getExamples() { return array ( - 'api.php?action=query&prop=info&titles=Main%20Page' + 'api.php?action=query&prop=info&titles=Main%20Page', + 'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page' ); }