2006-09-26 01:44:13 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Created on Sep 25, 2006
|
|
|
|
|
*
|
|
|
|
|
* API for MediaWiki 1.8+
|
|
|
|
|
*
|
2007-05-20 23:31:44 +00:00
|
|
|
* Copyright (C) 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
|
2006-09-26 01:44:13 +00:00
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
if (!defined('MEDIAWIKI')) {
|
|
|
|
|
// Eclipse helper - will be ignored in production
|
2006-10-01 02:02:13 +00:00
|
|
|
require_once ('ApiQueryBase.php');
|
2006-09-26 01:44:13 +00:00
|
|
|
}
|
|
|
|
|
|
2007-04-20 08:55:14 +00:00
|
|
|
/**
|
2007-05-20 23:31:44 +00:00
|
|
|
* A query module to show basic page information.
|
2008-04-14 07:45:50 +00:00
|
|
|
*
|
WARNING: HUGE COMMIT
Doxygen documentation update:
* Changed alls @addtogroup to @ingroup. @addtogroup adds the comment to the group description, but doesn't add the file, class, function, ... to the group like @ingroup does. See for example http://svn.wikimedia.org/doc/group__SpecialPage.html where it's impossible to see related files, classes, ... that should belong to that group.
* Added @file to file description, it seems that it should be explicitely decalred for file descriptions, otherwise doxygen will think that the comment document the first class, variabled, function, ... that is in that file.
* Removed some empty comments
* Removed some ?>
Added following groups:
* ExternalStorage
* JobQueue
* MaintenanceLanguage
One more thing: there are still a lot of warnings when generating the doc.
2008-05-20 17:13:28 +00:00
|
|
|
* @ingroup API
|
2007-04-20 08:55:14 +00:00
|
|
|
*/
|
2006-09-26 01:44:13 +00:00
|
|
|
class ApiQueryInfo extends ApiQueryBase {
|
|
|
|
|
|
2006-10-03 05:41:55 +00:00
|
|
|
public function __construct($query, $moduleName) {
|
2007-06-18 02:00:23 +00:00
|
|
|
parent :: __construct($query, $moduleName, 'in');
|
2006-09-26 01:44:13 +00:00
|
|
|
}
|
|
|
|
|
|
2007-06-03 17:22:09 +00:00
|
|
|
public function requestExtraData($pageSet) {
|
2007-11-27 10:22:14 +00:00
|
|
|
$pageSet->requestField('page_restrictions');
|
2006-10-01 20:17:16 +00:00
|
|
|
$pageSet->requestField('page_is_redirect');
|
2007-05-19 20:26:08 +00:00
|
|
|
$pageSet->requestField('page_is_new');
|
|
|
|
|
$pageSet->requestField('page_counter');
|
2006-10-01 20:17:16 +00:00
|
|
|
$pageSet->requestField('page_touched');
|
|
|
|
|
$pageSet->requestField('page_latest');
|
2007-05-19 20:26:08 +00:00
|
|
|
$pageSet->requestField('page_len');
|
2006-10-01 20:17:16 +00:00
|
|
|
}
|
|
|
|
|
|
2006-09-27 05:13:48 +00:00
|
|
|
public function execute() {
|
2006-09-26 06:37:26 +00:00
|
|
|
|
2007-08-01 22:46:22 +00:00
|
|
|
global $wgUser;
|
|
|
|
|
|
2007-06-18 02:00:23 +00:00
|
|
|
$params = $this->extractRequestParams();
|
2008-03-27 13:55:16 +00:00
|
|
|
$fld_protection = $fld_talkid = $fld_subjectid = false;
|
2007-06-18 02:00:23 +00:00
|
|
|
if(!is_null($params['prop'])) {
|
|
|
|
|
$prop = array_flip($params['prop']);
|
|
|
|
|
$fld_protection = isset($prop['protection']);
|
2008-03-25 15:31:24 +00:00
|
|
|
$fld_talkid = isset($prop['talkid']);
|
|
|
|
|
$fld_subjectid = isset($prop['subjectid']);
|
2007-06-18 02:00:23 +00:00
|
|
|
}
|
2007-08-01 22:46:22 +00:00
|
|
|
if(!is_null($params['token'])) {
|
|
|
|
|
$token = $params['token'];
|
|
|
|
|
$tok_edit = $this->getTokenFlag($token, 'edit');
|
|
|
|
|
$tok_delete = $this->getTokenFlag($token, 'delete');
|
|
|
|
|
$tok_protect = $this->getTokenFlag($token, 'protect');
|
|
|
|
|
$tok_move = $this->getTokenFlag($token, 'move');
|
|
|
|
|
}
|
2007-12-10 15:55:12 +00:00
|
|
|
else
|
|
|
|
|
// Fix E_NOTICEs about unset variables
|
|
|
|
|
$token = $tok_edit = $tok_delete = $tok_protect = $tok_move = null;
|
2008-04-14 07:45:50 +00:00
|
|
|
|
2006-10-01 20:17:16 +00:00
|
|
|
$pageSet = $this->getPageSet();
|
|
|
|
|
$titles = $pageSet->getGoodTitles();
|
2008-01-08 16:31:50 +00:00
|
|
|
$missing = $pageSet->getMissingTitles();
|
2006-10-25 03:54:56 +00:00
|
|
|
$result = $this->getResult();
|
2006-09-26 01:44:13 +00:00
|
|
|
|
2007-11-27 10:22:14 +00:00
|
|
|
$pageRestrictions = $pageSet->getCustomField('page_restrictions');
|
2006-10-01 20:17:16 +00:00
|
|
|
$pageIsRedir = $pageSet->getCustomField('page_is_redirect');
|
2007-05-19 20:26:08 +00:00
|
|
|
$pageIsNew = $pageSet->getCustomField('page_is_new');
|
|
|
|
|
$pageCounter = $pageSet->getCustomField('page_counter');
|
2006-10-01 20:17:16 +00:00
|
|
|
$pageTouched = $pageSet->getCustomField('page_touched');
|
|
|
|
|
$pageLatest = $pageSet->getCustomField('page_latest');
|
2007-05-19 20:26:08 +00:00
|
|
|
$pageLength = $pageSet->getCustomField('page_len');
|
2006-10-01 20:17:16 +00:00
|
|
|
|
2008-01-08 16:31:50 +00:00
|
|
|
$db = $this->getDB();
|
|
|
|
|
if ($fld_protection && !empty($titles)) {
|
2007-06-18 02:00:23 +00:00
|
|
|
$this->addTables('page_restrictions');
|
2008-01-15 15:23:27 +00:00
|
|
|
$this->addFields(array('pr_page', 'pr_type', 'pr_level', 'pr_expiry', 'pr_cascade'));
|
2007-06-18 02:00:23 +00:00
|
|
|
$this->addWhereFld('pr_page', array_keys($titles));
|
|
|
|
|
|
|
|
|
|
$res = $this->select(__METHOD__);
|
|
|
|
|
while($row = $db->fetchObject($res)) {
|
2008-01-15 15:23:27 +00:00
|
|
|
$a = array(
|
2008-01-08 16:31:50 +00:00
|
|
|
'type' => $row->pr_type,
|
|
|
|
|
'level' => $row->pr_level,
|
|
|
|
|
'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 )
|
|
|
|
|
);
|
2008-01-15 15:23:27 +00:00
|
|
|
if($row->pr_cascade)
|
|
|
|
|
$a['cascade'] = '';
|
|
|
|
|
$protections[$row->pr_page][] = $a;
|
2007-06-18 02:00:23 +00:00
|
|
|
}
|
|
|
|
|
$db->freeResult($res);
|
2008-05-04 15:10:58 +00:00
|
|
|
|
|
|
|
|
$imageIds = array();
|
|
|
|
|
foreach ($titles as $id => $title)
|
|
|
|
|
if ($title->getNamespace() == NS_IMAGE)
|
|
|
|
|
$imageIds[] = $id;
|
2008-05-04 16:24:05 +00:00
|
|
|
// To avoid code duplication
|
|
|
|
|
$cascadeTypes = array(
|
|
|
|
|
array(
|
|
|
|
|
'prefix' => 'tl',
|
|
|
|
|
'table' => 'templatelinks',
|
|
|
|
|
'ns' => 'tl_namespace',
|
|
|
|
|
'title' => 'tl_title',
|
|
|
|
|
'ids' => array_diff(array_keys($titles), $imageIds)
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
'prefix' => 'il',
|
|
|
|
|
'table' => 'imagelinks',
|
|
|
|
|
'ns' => NS_IMAGE,
|
|
|
|
|
'title' => 'il_to',
|
|
|
|
|
'ids' => $imageIds
|
|
|
|
|
)
|
|
|
|
|
);
|
2008-05-04 15:10:58 +00:00
|
|
|
|
2008-05-04 16:24:05 +00:00
|
|
|
foreach ($cascadeTypes as $type)
|
|
|
|
|
{
|
|
|
|
|
if (count($type['ids']) != 0) {
|
|
|
|
|
$this->resetQueryParams();
|
|
|
|
|
$this->addTables(array('page_restrictions', $type['table']));
|
|
|
|
|
$this->addTables('page', 'page_source');
|
|
|
|
|
$this->addTables('page', 'page_target');
|
|
|
|
|
$this->addFields(array('pr_type', 'pr_level', 'pr_expiry',
|
|
|
|
|
'page_target.page_id AS page_target_id',
|
|
|
|
|
'page_source.page_namespace AS page_source_namespace',
|
|
|
|
|
'page_source.page_title AS page_source_title'));
|
|
|
|
|
$this->addWhere(array("{$type['prefix']}_from = pr_page",
|
|
|
|
|
'page_target.page_namespace = '.$type['ns'],
|
|
|
|
|
'page_target.page_title = '.$type['title'],
|
|
|
|
|
'page_source.page_id = pr_page'
|
|
|
|
|
));
|
|
|
|
|
$this->addWhereFld('pr_cascade', 1);
|
|
|
|
|
$this->addWhereFld('page_target.page_id', $type['ids']);
|
2008-05-04 15:10:58 +00:00
|
|
|
|
2008-05-04 16:24:05 +00:00
|
|
|
$res = $this->select(__METHOD__);
|
|
|
|
|
while($row = $db->fetchObject($res)) {
|
|
|
|
|
$source = Title::makeTitle($row->page_source_namespace, $row->page_source_title);
|
|
|
|
|
$a = array(
|
|
|
|
|
'type' => $row->pr_type,
|
|
|
|
|
'level' => $row->pr_level,
|
|
|
|
|
'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ),
|
|
|
|
|
'source' => $source->getPrefixedText()
|
|
|
|
|
);
|
|
|
|
|
$protections[$row->page_target_id][] = $a;
|
|
|
|
|
}
|
|
|
|
|
$db->freeResult($res);
|
2008-05-04 15:10:58 +00:00
|
|
|
}
|
|
|
|
|
}
|
2007-06-18 02:00:23 +00:00
|
|
|
}
|
2008-05-04 16:24:05 +00:00
|
|
|
|
2008-01-08 16:31:50 +00:00
|
|
|
// We don't need to check for pt stuff if there are no nonexistent titles
|
|
|
|
|
if($fld_protection && !empty($missing))
|
|
|
|
|
{
|
|
|
|
|
$this->resetQueryParams();
|
|
|
|
|
// Construct a custom WHERE clause that matches all titles in $missing
|
|
|
|
|
$lb = new LinkBatch($missing);
|
|
|
|
|
$this->addTables('protected_titles');
|
|
|
|
|
$this->addFields(array('pt_title', 'pt_namespace', 'pt_create_perm', 'pt_expiry'));
|
|
|
|
|
$this->addWhere($lb->constructSet('pt', $db));
|
|
|
|
|
$res = $this->select(__METHOD__);
|
2008-01-08 21:42:00 +00:00
|
|
|
$prottitles = array();
|
2008-01-08 16:31:50 +00:00
|
|
|
while($row = $db->fetchObject($res)) {
|
2008-05-05 09:37:14 +00:00
|
|
|
$prottitles[$row->pt_namespace][$row->pt_title][] = array(
|
2008-01-08 16:31:50 +00:00
|
|
|
'type' => 'create',
|
|
|
|
|
'level' => $row->pt_create_perm,
|
|
|
|
|
'expiry' => Block::decodeExpiry($row->pt_expiry, TS_ISO_8601)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
$db->freeResult($res);
|
2008-05-05 09:37:14 +00:00
|
|
|
|
|
|
|
|
$images = array();
|
|
|
|
|
$others = array();
|
|
|
|
|
foreach ($missing as $title)
|
|
|
|
|
if ($title->getNamespace() == NS_IMAGE)
|
|
|
|
|
$images[] = $title->getDbKey();
|
|
|
|
|
else
|
|
|
|
|
$others[] = $title;
|
|
|
|
|
|
|
|
|
|
if (count($others) != 0) {
|
|
|
|
|
$lb = new LinkBatch($others);
|
|
|
|
|
$this->resetQueryParams();
|
|
|
|
|
$this->addTables(array('page_restrictions', 'page', 'templatelinks'));
|
|
|
|
|
$this->addFields(array('pr_type', 'pr_level', 'pr_expiry',
|
|
|
|
|
'page_title', 'page_namespace',
|
|
|
|
|
'tl_title', 'tl_namespace'));
|
|
|
|
|
$this->addWhere($lb->constructSet('tl', $db));
|
|
|
|
|
$this->addWhere('pr_page = page_id');
|
|
|
|
|
$this->addWhere('pr_page = tl_from');
|
|
|
|
|
$this->addWhereFld('pr_cascade', 1);
|
|
|
|
|
|
|
|
|
|
$res = $this->select(__METHOD__);
|
|
|
|
|
while($row = $db->fetchObject($res)) {
|
|
|
|
|
$source = Title::makeTitle($row->page_namespace, $row->page_title);
|
|
|
|
|
$a = array(
|
|
|
|
|
'type' => $row->pr_type,
|
|
|
|
|
'level' => $row->pr_level,
|
|
|
|
|
'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ),
|
|
|
|
|
'source' => $source->getPrefixedText()
|
|
|
|
|
);
|
|
|
|
|
$prottitles[$row->tl_namespace][$row->tl_title][] = $a;
|
|
|
|
|
}
|
|
|
|
|
$db->freeResult($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (count($images) != 0) {
|
|
|
|
|
$this->resetQueryParams();
|
|
|
|
|
$this->addTables(array('page_restrictions', 'page', 'imagelinks'));
|
|
|
|
|
$this->addFields(array('pr_type', 'pr_level', 'pr_expiry',
|
|
|
|
|
'page_title', 'page_namespace', 'il_to'));
|
|
|
|
|
$this->addWhere('pr_page = page_id');
|
|
|
|
|
$this->addWhere('pr_page = il_from');
|
|
|
|
|
$this->addWhereFld('pr_cascade', 1);
|
|
|
|
|
$this->addWhereFld('il_to', $images);
|
|
|
|
|
|
|
|
|
|
$res = $this->select(__METHOD__);
|
|
|
|
|
while($row = $db->fetchObject($res)) {
|
|
|
|
|
$source = Title::makeTitle($row->page_namespace, $row->page_title);
|
|
|
|
|
$a = array(
|
|
|
|
|
'type' => $row->pr_type,
|
|
|
|
|
'level' => $row->pr_level,
|
|
|
|
|
'expiry' => Block::decodeExpiry( $row->pr_expiry, TS_ISO_8601 ),
|
|
|
|
|
'source' => $source->getPrefixedText()
|
|
|
|
|
);
|
|
|
|
|
$prottitles[NS_IMAGE][$row->il_to][] = $a;
|
|
|
|
|
}
|
|
|
|
|
$db->freeResult($res);
|
|
|
|
|
}
|
2008-01-08 16:31:50 +00:00
|
|
|
}
|
2008-04-14 07:45:50 +00:00
|
|
|
|
2008-03-25 15:31:24 +00:00
|
|
|
// Run the talkid/subjectid query
|
|
|
|
|
if($fld_talkid || $fld_subjectid)
|
|
|
|
|
{
|
2008-04-14 07:45:50 +00:00
|
|
|
$talktitles = $subjecttitles =
|
2008-03-25 15:31:24 +00:00
|
|
|
$talkids = $subjectids = array();
|
|
|
|
|
$everything = array_merge($titles, $missing);
|
|
|
|
|
foreach($everything as $t)
|
|
|
|
|
{
|
|
|
|
|
if(MWNamespace::isTalk($t->getNamespace()))
|
|
|
|
|
{
|
|
|
|
|
if($fld_subjectid)
|
|
|
|
|
$subjecttitles[] = $t->getSubjectPage();
|
|
|
|
|
}
|
|
|
|
|
else if($fld_talkid)
|
|
|
|
|
$talktitles[] = $t->getTalkPage();
|
|
|
|
|
}
|
|
|
|
|
if(!empty($talktitles) || !empty($subjecttitles))
|
|
|
|
|
{
|
|
|
|
|
// Construct a custom WHERE clause that matches
|
|
|
|
|
// all titles in $talktitles and $subjecttitles
|
|
|
|
|
$lb = new LinkBatch(array_merge($talktitles, $subjecttitles));
|
|
|
|
|
$this->resetQueryParams();
|
|
|
|
|
$this->addTables('page');
|
|
|
|
|
$this->addFields(array('page_title', 'page_namespace', 'page_id'));
|
|
|
|
|
$this->addWhere($lb->constructSet('page', $db));
|
|
|
|
|
$res = $this->select(__METHOD__);
|
|
|
|
|
while($row = $db->fetchObject($res))
|
|
|
|
|
{
|
|
|
|
|
if(MWNamespace::isTalk($row->page_namespace))
|
|
|
|
|
$talkids[MWNamespace::getSubject($row->page_namespace)][$row->page_title] = $row->page_id;
|
|
|
|
|
else
|
|
|
|
|
$subjectids[MWNamespace::getTalk($row->page_namespace)][$row->page_title] = $row->page_id;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-01-08 16:31:50 +00:00
|
|
|
|
2007-08-01 22:46:22 +00:00
|
|
|
foreach ( $titles as $pageid => $title ) {
|
2006-10-20 07:10:18 +00:00
|
|
|
$pageInfo = array (
|
2006-10-21 08:44:07 +00:00
|
|
|
'touched' => wfTimestamp(TS_ISO_8601, $pageTouched[$pageid]),
|
2007-05-19 20:26:08 +00:00
|
|
|
'lastrevid' => intval($pageLatest[$pageid]),
|
2007-05-19 23:54:22 +00:00
|
|
|
'counter' => intval($pageCounter[$pageid]),
|
2007-06-29 20:02:26 +00:00
|
|
|
'length' => intval($pageLength[$pageid]),
|
2006-10-20 07:10:18 +00:00
|
|
|
);
|
2006-10-01 20:17:16 +00:00
|
|
|
|
|
|
|
|
if ($pageIsRedir[$pageid])
|
|
|
|
|
$pageInfo['redirect'] = '';
|
2006-09-26 01:44:13 +00:00
|
|
|
|
2007-05-19 20:26:08 +00:00
|
|
|
if ($pageIsNew[$pageid])
|
|
|
|
|
$pageInfo['new'] = '';
|
|
|
|
|
|
2007-08-01 22:46:22 +00:00
|
|
|
if (!is_null($token)) {
|
|
|
|
|
// Currently all tokens are generated the same way, but it might change
|
|
|
|
|
if ($tok_edit)
|
|
|
|
|
$pageInfo['edittoken'] = $wgUser->editToken();
|
|
|
|
|
if ($tok_delete)
|
|
|
|
|
$pageInfo['deletetoken'] = $wgUser->editToken();
|
|
|
|
|
if ($tok_protect)
|
|
|
|
|
$pageInfo['protecttoken'] = $wgUser->editToken();
|
|
|
|
|
if ($tok_move)
|
|
|
|
|
$pageInfo['movetoken'] = $wgUser->editToken();
|
|
|
|
|
}
|
2008-04-14 07:45:50 +00:00
|
|
|
|
2007-06-18 02:00:23 +00:00
|
|
|
if($fld_protection) {
|
|
|
|
|
if (isset($protections[$pageid])) {
|
|
|
|
|
$pageInfo['protection'] = $protections[$pageid];
|
|
|
|
|
$result->setIndexedTagName($pageInfo['protection'], 'pr');
|
|
|
|
|
} else {
|
2007-11-27 10:22:14 +00:00
|
|
|
# Also check old restrictions
|
|
|
|
|
if( $pageRestrictions[$pageid] ) {
|
|
|
|
|
foreach( explode( ':', trim( $pageRestrictions[$pageid] ) ) as $restrict ) {
|
|
|
|
|
$temp = explode( '=', trim( $restrict ) );
|
|
|
|
|
if(count($temp) == 1) {
|
|
|
|
|
// old old format should be treated as edit/move restriction
|
|
|
|
|
$restriction = trim( $temp[0] );
|
|
|
|
|
$pageInfo['protection'][] = array(
|
|
|
|
|
'type' => 'edit',
|
|
|
|
|
'level' => $restriction,
|
|
|
|
|
'expiry' => 'infinity',
|
|
|
|
|
);
|
|
|
|
|
$pageInfo['protection'][] = array(
|
|
|
|
|
'type' => 'move',
|
|
|
|
|
'level' => $restriction,
|
|
|
|
|
'expiry' => 'infinity',
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
$restriction = trim( $temp[1] );
|
|
|
|
|
$pageInfo['protection'][] = array(
|
|
|
|
|
'type' => $temp[0],
|
|
|
|
|
'level' => $restriction,
|
|
|
|
|
'expiry' => 'infinity',
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$result->setIndexedTagName($pageInfo['protection'], 'pr');
|
|
|
|
|
} else {
|
|
|
|
|
$pageInfo['protection'] = array();
|
|
|
|
|
}
|
2007-06-18 02:00:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
2008-03-25 15:31:24 +00:00
|
|
|
if($fld_talkid && isset($talkids[$title->getNamespace()][$title->getDbKey()]))
|
|
|
|
|
$pageInfo['talkid'] = $talkids[$title->getNamespace()][$title->getDbKey()];
|
|
|
|
|
if($fld_subjectid && isset($subjectids[$title->getNamespace()][$title->getDbKey()]))
|
|
|
|
|
$pageInfo['subjectid'] = $subjectids[$title->getNamespace()][$title->getDbKey()];
|
2007-06-18 02:00:23 +00:00
|
|
|
|
2006-10-01 20:17:16 +00:00
|
|
|
$result->addValue(array (
|
|
|
|
|
'query',
|
|
|
|
|
'pages'
|
|
|
|
|
), $pageid, $pageInfo);
|
|
|
|
|
}
|
2007-09-03 20:17:53 +00:00
|
|
|
|
2008-01-08 16:31:50 +00:00
|
|
|
// Get edit/protect tokens and protection data for missing titles if requested
|
|
|
|
|
// Delete and move tokens are N/A for missing titles anyway
|
2008-03-25 15:36:05 +00:00
|
|
|
if($tok_edit || $tok_protect || $fld_protection || $fld_talkid || $fld_subjectid)
|
2007-09-03 20:17:53 +00:00
|
|
|
{
|
2007-09-06 11:28:04 +00:00
|
|
|
$res = &$result->getData();
|
2008-01-08 16:31:50 +00:00
|
|
|
foreach($missing as $pageid => $title) {
|
|
|
|
|
if($tok_edit)
|
|
|
|
|
$res['query']['pages'][$pageid]['edittoken'] = $wgUser->editToken();
|
|
|
|
|
if($tok_protect)
|
|
|
|
|
$res['query']['pages'][$pageid]['protecttoken'] = $wgUser->editToken();
|
|
|
|
|
if($fld_protection)
|
2008-01-08 22:05:39 +00:00
|
|
|
{
|
|
|
|
|
// Apparently the XML formatting code doesn't like array(null)
|
|
|
|
|
// This is painful to fix, so we'll just work around it
|
2008-04-17 19:11:36 +00:00
|
|
|
if(isset($prottitles[$title->getNamespace()][$title->getDBkey()]))
|
2008-05-05 09:37:14 +00:00
|
|
|
$res['query']['pages'][$pageid]['protection'] = $prottitles[$title->getNamespace()][$title->getDBkey()];
|
2008-01-08 21:42:00 +00:00
|
|
|
else
|
|
|
|
|
$res['query']['pages'][$pageid]['protection'] = array();
|
2008-01-08 22:05:39 +00:00
|
|
|
$result->setIndexedTagName($res['query']['pages'][$pageid]['protection'], 'pr');
|
|
|
|
|
}
|
2008-03-25 15:31:24 +00:00
|
|
|
if($fld_talkid && isset($talkids[$title->getNamespace()][$title->getDbKey()]))
|
|
|
|
|
$res['query']['pages'][$pageid]['talkid'] = $talkids[$title->getNamespace()][$title->getDbKey()];
|
|
|
|
|
if($fld_subjectid && isset($subjectids[$title->getNamespace()][$title->getDbKey()]))
|
|
|
|
|
$res['query']['pages'][$pageid]['subjectid'] = $subjectids[$title->getNamespace()][$title->getDbKey()];
|
2008-01-08 16:31:50 +00:00
|
|
|
}
|
2007-09-03 20:17:53 +00:00
|
|
|
}
|
2006-09-26 01:44:13 +00:00
|
|
|
}
|
|
|
|
|
|
2008-01-28 19:05:26 +00:00
|
|
|
public function getAllowedParams() {
|
2007-06-18 02:00:23 +00:00
|
|
|
return array (
|
|
|
|
|
'prop' => array (
|
|
|
|
|
ApiBase :: PARAM_DFLT => NULL,
|
|
|
|
|
ApiBase :: PARAM_ISMULTI => true,
|
|
|
|
|
ApiBase :: PARAM_TYPE => array (
|
2008-03-25 15:31:24 +00:00
|
|
|
'protection',
|
|
|
|
|
'talkid',
|
|
|
|
|
'subjectid'
|
2007-08-01 22:46:22 +00:00
|
|
|
)),
|
|
|
|
|
'token' => array (
|
|
|
|
|
ApiBase :: PARAM_DFLT => NULL,
|
|
|
|
|
ApiBase :: PARAM_ISMULTI => true,
|
|
|
|
|
ApiBase :: PARAM_TYPE => array (
|
|
|
|
|
'edit',
|
|
|
|
|
'delete',
|
|
|
|
|
'protect',
|
|
|
|
|
'move',
|
|
|
|
|
)),
|
2007-06-18 02:00:23 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2008-01-28 19:05:26 +00:00
|
|
|
public function getParamDescription() {
|
2007-06-18 02:00:23 +00:00
|
|
|
return array (
|
|
|
|
|
'prop' => array (
|
|
|
|
|
'Which additional properties to get:',
|
2008-03-25 15:31:24 +00:00
|
|
|
' "protection" - List the protection level of each page',
|
|
|
|
|
' "talkid" - The page ID of the talk page for each non-talk page',
|
|
|
|
|
' "subjectid" - The page ID of the parent page for each talk page'
|
2007-08-01 22:46:22 +00:00
|
|
|
),
|
|
|
|
|
'token' => 'Request a token to perform a data-modifying action on a page',
|
2007-06-18 02:00:23 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2008-01-28 19:05:26 +00:00
|
|
|
public function getDescription() {
|
2006-10-01 20:17:16 +00:00
|
|
|
return 'Get basic page information such as namespace, title, last touched date, ...';
|
2006-09-26 01:44:13 +00:00
|
|
|
}
|
|
|
|
|
|
2006-09-27 05:13:48 +00:00
|
|
|
protected function getExamples() {
|
2006-09-26 01:44:13 +00:00
|
|
|
return array (
|
2007-06-18 02:00:23 +00:00
|
|
|
'api.php?action=query&prop=info&titles=Main%20Page',
|
2007-06-29 20:02:26 +00:00
|
|
|
'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page'
|
2006-09-26 01:44:13 +00:00
|
|
|
);
|
|
|
|
|
}
|
2006-10-01 21:20:55 +00:00
|
|
|
|
|
|
|
|
public function getVersion() {
|
2007-12-06 18:33:18 +00:00
|
|
|
return __CLASS__ . ': $Id$';
|
2006-10-01 21:20:55 +00:00
|
|
|
}
|
2006-09-26 01:44:13 +00:00
|
|
|
}
|