From 370e83bb0dfd0c70de268c93bf07ad5ee0897192 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 15 Aug 2008 01:29:47 +0200 Subject: Update auf 1.13.0 --- includes/api/ApiQueryExtLinksUsage.php | 65 ++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 27 deletions(-) (limited to 'includes/api/ApiQueryExtLinksUsage.php') diff --git a/includes/api/ApiQueryExtLinksUsage.php b/includes/api/ApiQueryExtLinksUsage.php index 896a0171..8ffb7246 100644 --- a/includes/api/ApiQueryExtLinksUsage.php +++ b/includes/api/ApiQueryExtLinksUsage.php @@ -29,7 +29,7 @@ if (!defined('MEDIAWIKI')) { } /** - * @addtogroup API + * @ingroup API */ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { @@ -51,43 +51,53 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { $protocol = $params['protocol']; $query = $params['query']; - if (is_null($query)) - $this->dieUsage('Missing required query parameter', 'params'); - + // Find the right prefix global $wgUrlProtocols; - foreach ($wgUrlProtocols as $p) { - if( substr( $p, 0, strlen( $protocol ) ) === $protocol ) { - $protocol = $p; - break; + if(!is_null($protocol) && !empty($protocol) && !in_array($protocol, $wgUrlProtocols)) + { + foreach ($wgUrlProtocols as $p) { + if( substr( $p, 0, strlen( $protocol ) ) === $protocol ) { + $protocol = $p; + break; + } } } - - $likeQuery = LinkFilter::makeLike($query , $protocol); - if (!$likeQuery) - $this->dieUsage('Invalid query', 'bad_query'); - $likeQuery = substr($likeQuery, 0, strpos($likeQuery,'%')+1); + else + $protocol = null; - $this->addTables(array('page','externallinks')); // must be in this order for 'USE INDEX' + $db = $this->getDb(); + $this->addTables(array('page','externallinks')); // must be in this order for 'USE INDEX' $this->addOption('USE INDEX', 'el_index'); - - $db = $this->getDB(); $this->addWhere('page_id=el_from'); - $this->addWhere('el_index LIKE ' . $db->addQuotes( $likeQuery )); $this->addWhereFld('page_namespace', $params['namespace']); + if(!is_null($query) || $query != '') + { + if(is_null($protocol)) + $protocol = 'http://'; + + $likeQuery = LinkFilter::makeLike($query, $protocol); + if (!$likeQuery) + $this->dieUsage('Invalid query', 'bad_query'); + $likeQuery = substr($likeQuery, 0, strpos($likeQuery,'%')+1); + $this->addWhere('el_index LIKE ' . $db->addQuotes( $likeQuery )); + } + else if(!is_null($protocol)) + $this->addWhere('el_index LIKE ' . $db->addQuotes( "$protocol%" )); + $prop = array_flip($params['prop']); $fld_ids = isset($prop['ids']); $fld_title = isset($prop['title']); $fld_url = isset($prop['url']); - + if (is_null($resultPageSet)) { $this->addFields(array ( 'page_id', 'page_namespace', 'page_title' )); - $this->addFieldsIf('el_to', $fld_url); + $this->addFieldsIf('el_to', $fld_url); } else { $this->addFields($resultPageSet->getPageTableFields()); } @@ -105,7 +115,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { 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... - $this->setContinueEnumParameter('offset', $offset+$limit+1); + $this->setContinueEnumParameter('offset', $offset+$limit); break; } @@ -136,11 +146,11 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { public function getAllowedParams() { global $wgUrlProtocols; - $protocols = array(); + $protocols = array(''); foreach ($wgUrlProtocols as $p) { $protocols[] = substr($p, 0, strpos($p,':')); } - + return array ( 'prop' => array ( ApiBase :: PARAM_ISMULTI => true, @@ -156,7 +166,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { ), 'protocol' => array ( ApiBase :: PARAM_TYPE => $protocols, - ApiBase :: PARAM_DFLT => 'http', + ApiBase :: PARAM_DFLT => '', ), 'query' => null, 'namespace' => array ( @@ -177,10 +187,11 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { return array ( 'prop' => 'What pieces of information to include', 'offset' => 'Used for paging. Use the value returned for "continue"', - 'protocol' => 'Protocol of the url', - 'query' => 'Search string without protocol. See [[Special:LinkSearch]]', + 'protocol' => array( 'Protocol of the url. If empty and euquery set, the protocol is http.', + 'Leave both this and euquery empty to list all external links'), + 'query' => 'Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links', 'namespace' => 'The page namespace(s) to enumerate.', - 'limit' => 'How many entries to return.' + 'limit' => 'How many pages to return.' ); } @@ -195,6 +206,6 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase { } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryExtLinksUsage.php 30222 2008-01-28 19:05:26Z catrope $'; + return __CLASS__ . ': $Id: ApiQueryExtLinksUsage.php 37909 2008-07-22 13:26:15Z catrope $'; } } -- cgit v1.2.3-54-g00ecf