From 9db190c7e736ec8d063187d4241b59feaf7dc2d1 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 22 Jun 2011 11:28:20 +0200 Subject: update to MediaWiki 1.17.0 --- includes/api/ApiQueryAllLinks.php | 148 +++++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 64 deletions(-) (limited to 'includes/api/ApiQueryAllLinks.php') diff --git a/includes/api/ApiQueryAllLinks.php b/includes/api/ApiQueryAllLinks.php index 6b6fc2c0..78784845 100644 --- a/includes/api/ApiQueryAllLinks.php +++ b/includes/api/ApiQueryAllLinks.php @@ -1,11 +1,10 @@ @gmail.com + * Created on July 7, 2007 + * + * Copyright © 2006 Yuri Astrakhan @gmail.com * * 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 @@ -19,13 +18,15 @@ * * 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. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html + * + * @file */ if ( !defined( 'MEDIAWIKI' ) ) { // Eclipse helper - will be ignored in production - require_once ( 'ApiQueryBase.php' ); + require_once( 'ApiQueryBase.php' ); } /** @@ -36,7 +37,7 @@ if ( !defined( 'MEDIAWIKI' ) ) { class ApiQueryAllLinks extends ApiQueryGeneratorBase { public function __construct( $query, $moduleName ) { - parent :: __construct( $query, $moduleName, 'al' ); + parent::__construct( $query, $moduleName, 'al' ); } public function execute() { @@ -52,7 +53,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { } private function run( $resultPageSet = null ) { - $db = $this->getDB(); $params = $this->extractRequestParams(); @@ -61,36 +61,46 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { $fld_title = isset( $prop['title'] ); if ( $params['unique'] ) { - if ( !is_null( $resultPageSet ) ) + if ( !is_null( $resultPageSet ) ) { $this->dieUsage( $this->getModuleName() . ' cannot be used as a generator in unique links mode', 'params' ); - if ( $fld_ids ) + } + 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'] ); - - if ( !is_null( $params['from'] ) && !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'] ) ) - { + } + if ( !is_null( $params['continue'] ) ) { $arr = explode( '|', $params['continue'] ); - if ( count( $arr ) != 2 ) - $this->dieUsage( "Invalid continue parameter", 'badcontinue' ); + 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)" ); + $this->addWhere( + "pl_title > '$from' OR " . + "(pl_title = '$from' AND " . + "pl_from > $id)" + ); } - if ( !is_null( $params['from'] ) ) + if ( !is_null( $params['from'] ) ) { $this->addWhere( 'pl_title>=' . $db->addQuotes( $this->titlePartToKey( $params['from'] ) ) ); - if ( isset ( $params['prefix'] ) ) + } + if ( !is_null( $params['to'] ) ) { + $this->addWhere( 'pl_title<=' . $db->addQuotes( $this->titlePartToKey( $params['to'] ) ) ); + } + 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'] ); @@ -98,49 +108,51 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { $this->addOption( 'USE INDEX', 'pl_namespace' ); $limit = $params['limit']; $this->addOption( 'LIMIT', $limit + 1 ); - if ( $params['unique'] ) + if ( $params['unique'] ) { $this->addOption( 'ORDER BY', 'pl_title' ); - else + } else { $this->addOption( 'ORDER BY', 'pl_title, pl_from' ); + } $res = $this->select( __METHOD__ ); - $pageids = array (); + $pageids = array(); $count = 0; $result = $this->getResult(); - while ( $row = $db->fetchObject( $res ) ) { + foreach ( $res as $row ) { 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'] ) + if ( $params['unique'] ) { $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->pl_title ) ); - else + } else { $this->setContinueEnumParameter( 'continue', $this->keyToTitle( $row->pl_title ) . "|" . $row->pl_from ); + } break; } if ( is_null( $resultPageSet ) ) { $vals = array(); - if ( $fld_ids ) + if ( $fld_ids ) { $vals['fromid'] = intval( $row->pl_from ); + } if ( $fld_title ) { - $title = Title :: makeTitle( $params['namespace'], $row->pl_title ); + $title = Title::makeTitle( $params['namespace'], $row->pl_title ); ApiQueryBase::addTitleInfo( $vals, $title ); } $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals ); - if ( !$fit ) - { - if ( $params['unique'] ) + if ( !$fit ) { + if ( $params['unique'] ) { $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->pl_title ) ); - else + } else { $this->setContinueEnumParameter( 'continue', $this->keyToTitle( $row->pl_title ) . "|" . $row->pl_from ); + } break; } } else { $pageids[] = $row->pl_from; } } - $db->freeResult( $res ); if ( is_null( $resultPageSet ) ) { $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'l' ); @@ -150,65 +162,73 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase { } public function getAllowedParams() { - return array ( + return array( 'continue' => null, 'from' => null, + 'to' => null, 'prefix' => null, 'unique' => false, - 'prop' => array ( - ApiBase :: PARAM_ISMULTI => true, - ApiBase :: PARAM_DFLT => 'title', - ApiBase :: PARAM_TYPE => array ( + 'prop' => array( + ApiBase::PARAM_ISMULTI => true, + ApiBase::PARAM_DFLT => 'title', + ApiBase::PARAM_TYPE => array( 'ids', 'title' ) ), - 'namespace' => array ( - ApiBase :: PARAM_DFLT => 0, - ApiBase :: PARAM_TYPE => 'namespace' + 'namespace' => array( + ApiBase::PARAM_DFLT => 0, + ApiBase::PARAM_TYPE => 'namespace' ), - 'limit' => array ( - ApiBase :: PARAM_DFLT => 10, - ApiBase :: PARAM_TYPE => 'limit', - ApiBase :: PARAM_MIN => 1, - ApiBase :: PARAM_MAX => ApiBase :: LIMIT_BIG1, - ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2 + 'limit' => array( + ApiBase::PARAM_DFLT => 10, + ApiBase::PARAM_TYPE => 'limit', + ApiBase::PARAM_MIN => 1, + ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1, + ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2 ) ); } public function getParamDescription() { - return array ( - 'from' => 'The page title to start enumerating from.', - 'prefix' => 'Search for all page titles that begin with this value.', - 'unique' => 'Only show unique links. Cannot be used with generator or prop=ids', - 'prop' => 'What pieces of information to include', - 'namespace' => 'The namespace to enumerate.', - 'limit' => 'How many total links to return.', - 'continue' => 'When more results are available, use this to continue.', + $p = $this->getModulePrefix(); + return array( + 'from' => 'The page title to start enumerating from', + 'to' => 'The page title to stop enumerating at', + 'prefix' => 'Search for all page titles that begin with this value', + 'unique' => "Only show unique links. Cannot be used with generator or {$p}prop=ids", + 'prop' => array( + 'What pieces of information to include', + " ids - Adds pageid of where the link is from (Cannot be used with {$p}unique)", + ' title - Adds the title of the link', + ), + 'namespace' => 'The namespace to enumerate', + 'limit' => 'How many total links to return', + 'continue' => 'When more results are available, use this to continue', ); } public function getDescription() { return 'Enumerate all links that point to a given namespace'; } - + public function getPossibleErrors() { + $m = $this->getModuleName(); 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' => "{$m} cannot be used as a generator in unique links mode" ), + array( 'code' => 'params', 'info' => "{$m} 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 ( - 'api.php?action=query&list=alllinks&alunique&alfrom=B', + return array( + 'api.php?action=query&list=alllinks&alunique=&alfrom=B', ); } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryAllLinks.php 69932 2010-07-26 08:03:21Z tstarling $'; + return __CLASS__ . ': $Id: ApiQueryAllLinks.php 77192 2010-11-23 22:05:27Z btongminh $'; } } -- cgit v1.2.2