From 222b01f5169f1c7e69762e0e8904c24f78f71882 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 28 Jul 2010 11:52:48 +0200 Subject: update to MediaWiki 1.16.0 --- includes/api/ApiQueryAllLinks.php | 135 ++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 63 deletions(-) (limited to 'includes/api/ApiQueryAllLinks.php') diff --git a/includes/api/ApiQueryAllLinks.php b/includes/api/ApiQueryAllLinks.php index 73788aa6..6b6fc2c0 100644 --- a/includes/api/ApiQueryAllLinks.php +++ b/includes/api/ApiQueryAllLinks.php @@ -23,9 +23,9 @@ * http://www.gnu.org/copyleft/gpl.html */ -if (!defined('MEDIAWIKI')) { +if ( !defined( 'MEDIAWIKI' ) ) { // Eclipse helper - will be ignored in production - require_once ('ApiQueryBase.php'); + require_once ( 'ApiQueryBase.php' ); } /** @@ -35,8 +35,8 @@ if (!defined('MEDIAWIKI')) { */ class ApiQueryAllLinks extends ApiQueryGeneratorBase { - public function __construct($query, $moduleName) { - parent :: __construct($query, $moduleName, 'al'); + public function __construct( $query, $moduleName ) { + parent :: __construct( $query, $moduleName, 'al' ); } public function execute() { @@ -47,105 +47,105 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { return 'public'; } - public function executeGenerator($resultPageSet) { - $this->run($resultPageSet); + public function executeGenerator( $resultPageSet ) { + $this->run( $resultPageSet ); } - private function run($resultPageSet = null) { + private function run( $resultPageSet = null ) { $db = $this->getDB(); $params = $this->extractRequestParams(); - $prop = array_flip($params['prop']); - $fld_ids = isset($prop['ids']); - $fld_title = isset($prop['title']); + $prop = array_flip( $params['prop'] ); + $fld_ids = isset( $prop['ids'] ); + $fld_title = isset( $prop['title'] ); - if ($params['unique']) { - if (!is_null($resultPageSet)) - $this->dieUsage($this->getModuleName() . ' cannot be used as a generator in unique links mode', 'params'); - if ($fld_ids) - $this->dieUsage($this->getModuleName() . ' cannot return corresponding page ids in unique links mode', 'params'); - $this->addOption('DISTINCT'); + if ( $params['unique'] ) { + if ( !is_null( $resultPageSet ) ) + $this->dieUsage( $this->getModuleName() . ' cannot be used as a generator in unique links mode', 'params' ); + if ( $fld_ids ) + $this->dieUsage( $this->getModuleName() . ' cannot return corresponding page ids in unique links mode', 'params' ); + $this->addOption( 'DISTINCT' ); } - $this->addTables('pagelinks'); - $this->addWhereFld('pl_namespace', $params['namespace']); + $this->addTables( 'pagelinks' ); + $this->addWhereFld( 'pl_namespace', $params['namespace'] ); - if (!is_null($params['from']) && !is_null($params['continue'])) - $this->dieUsage('alcontinue and alfrom cannot be used together', 'params'); - if (!is_null($params['continue'])) + if ( !is_null( $params['from'] ) && !is_null( $params['continue'] ) ) + $this->dieUsage( 'alcontinue and alfrom cannot be used together', 'params' ); + if ( !is_null( $params['continue'] ) ) { - $arr = explode('|', $params['continue']); - if(count($arr) != 2) - $this->dieUsage("Invalid continue parameter", 'badcontinue'); - $from = $this->getDB()->strencode($this->titleToKey($arr[0])); - $id = intval($arr[1]); - $this->addWhere("pl_title > '$from' OR " . + $arr = explode( '|', $params['continue'] ); + if ( count( $arr ) != 2 ) + $this->dieUsage( "Invalid continue parameter", 'badcontinue' ); + $from = $this->getDB()->strencode( $this->titleToKey( $arr[0] ) ); + $id = intval( $arr[1] ); + $this->addWhere( "pl_title > '$from' OR " . "(pl_title = '$from' AND " . - "pl_from > $id)"); - } + "pl_from > $id)" ); + } - if (!is_null($params['from'])) - $this->addWhere('pl_title>=' . $db->addQuotes($this->titlePartToKey($params['from']))); - if (isset ($params['prefix'])) - $this->addWhere("pl_title LIKE '" . $db->escapeLike($this->titlePartToKey($params['prefix'])) . "%'"); + if ( !is_null( $params['from'] ) ) + $this->addWhere( 'pl_title>=' . $db->addQuotes( $this->titlePartToKey( $params['from'] ) ) ); + if ( isset ( $params['prefix'] ) ) + $this->addWhere( 'pl_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) ); - $this->addFields(array ( + $this->addFields( array ( 'pl_title', - )); - $this->addFieldsIf('pl_from', !$params['unique']); + ) ); + $this->addFieldsIf( 'pl_from', !$params['unique'] ); - $this->addOption('USE INDEX', 'pl_namespace'); + $this->addOption( 'USE INDEX', 'pl_namespace' ); $limit = $params['limit']; - $this->addOption('LIMIT', $limit+1); - if($params['unique']) - $this->addOption('ORDER BY', 'pl_title'); + $this->addOption( 'LIMIT', $limit + 1 ); + if ( $params['unique'] ) + $this->addOption( 'ORDER BY', 'pl_title' ); else - $this->addOption('ORDER BY', 'pl_title, pl_from'); + $this->addOption( 'ORDER BY', 'pl_title, pl_from' ); - $res = $this->select(__METHOD__); + $res = $this->select( __METHOD__ ); $pageids = array (); $count = 0; $result = $this->getResult(); - while ($row = $db->fetchObject($res)) { - if (++ $count > $limit) { + while ( $row = $db->fetchObject( $res ) ) { + if ( ++ $count > $limit ) { // We've reached the one extra which shows that there are additional pages to be had. Stop here... // TODO: Security issue - if the user has no right to view next title, it will still be shown - if($params['unique']) - $this->setContinueEnumParameter('from', $this->keyToTitle($row->pl_title)); + if ( $params['unique'] ) + $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->pl_title ) ); else - $this->setContinueEnumParameter('continue', $this->keyToTitle($row->pl_title) . "|" . $row->pl_from); + $this->setContinueEnumParameter( 'continue', $this->keyToTitle( $row->pl_title ) . "|" . $row->pl_from ); break; } - if (is_null($resultPageSet)) { + if ( is_null( $resultPageSet ) ) { $vals = array(); - if ($fld_ids) - $vals['fromid'] = intval($row->pl_from); - if ($fld_title) { - $title = Title :: makeTitle($params['namespace'], $row->pl_title); - ApiQueryBase::addTitleInfo($vals, $title); + if ( $fld_ids ) + $vals['fromid'] = intval( $row->pl_from ); + if ( $fld_title ) { + $title = Title :: makeTitle( $params['namespace'], $row->pl_title ); + ApiQueryBase::addTitleInfo( $vals, $title ); } - $fit = $result->addValue(array('query', $this->getModuleName()), null, $vals); - if(!$fit) + $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals ); + if ( !$fit ) { - if($params['unique']) - $this->setContinueEnumParameter('from', $this->keyToTitle($row->pl_title)); + if ( $params['unique'] ) + $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->pl_title ) ); else - $this->setContinueEnumParameter('continue', $this->keyToTitle($row->pl_title) . "|" . $row->pl_from); + $this->setContinueEnumParameter( 'continue', $this->keyToTitle( $row->pl_title ) . "|" . $row->pl_from ); break; } } else { $pageids[] = $row->pl_from; } } - $db->freeResult($res); + $db->freeResult( $res ); - if (is_null($resultPageSet)) { - $result->setIndexedTagName_internal(array('query', $this->getModuleName()), 'l'); + if ( is_null( $resultPageSet ) ) { + $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'l' ); } else { - $resultPageSet->populateFromPageIDs($pageids); + $resultPageSet->populateFromPageIDs( $pageids ); } } @@ -192,6 +192,15 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { public function getDescription() { return 'Enumerate all links that point to a given namespace'; } + + public function getPossibleErrors() { + return array_merge( parent::getPossibleErrors(), array( + array( 'code' => 'params', 'info' => $this->getModuleName() . ' cannot be used as a generator in unique links mode' ), + array( 'code' => 'params', 'info' => $this->getModuleName() . ' cannot return corresponding page ids in unique links mode' ), + array( 'code' => 'params', 'info' => 'alcontinue and alfrom cannot be used together' ), + array( 'code' => 'badcontinue', 'info' => 'Invalid continue parameter' ), + ) ); + } protected function getExamples() { return array ( @@ -200,6 +209,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryAllLinks.php 69986 2010-07-27 03:57:39Z tstarling $'; + return __CLASS__ . ': $Id: ApiQueryAllLinks.php 69932 2010-07-26 08:03:21Z tstarling $'; } } -- cgit v1.2.2