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/ApiQueryImages.php | 70 +++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 9 deletions(-) (limited to 'includes/api/ApiQueryImages.php') diff --git a/includes/api/ApiQueryImages.php b/includes/api/ApiQueryImages.php index f7405374..32c4e1b0 100644 --- a/includes/api/ApiQueryImages.php +++ b/includes/api/ApiQueryImages.php @@ -29,9 +29,9 @@ if (!defined('MEDIAWIKI')) { } /** - * This query adds subelement to all pages with the list of images embedded into those pages. - * - * @addtogroup API + * This query adds an subelement to all pages with the list of images embedded into those pages. + * + * @ingroup API */ class ApiQueryImages extends ApiQueryGeneratorBase { @@ -52,6 +52,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase { if ($this->getPageSet()->getGoodTitleCount() == 0) return; // nothing to do + $params = $this->extractRequestParams(); $this->addFields(array ( 'il_from', 'il_to' @@ -59,16 +60,40 @@ class ApiQueryImages extends ApiQueryGeneratorBase { $this->addTables('imagelinks'); $this->addWhereFld('il_from', array_keys($this->getPageSet()->getGoodTitles())); - $this->addOption('ORDER BY', "il_from, il_to"); + if(!is_null($params['continue'])) { + $cont = explode('|', $params['continue']); + if(count($cont) != 2) + $this->dieUsage("Invalid continue param. You should pass the " . + "original value returned by the previous query", "_badcontinue"); + $ilfrom = intval($cont[0]); + $ilto = $this->getDb()->strencode($this->titleToKey($cont[1])); + $this->addWhere("il_from > $ilfrom OR ". + "(il_from = $ilfrom AND ". + "il_to >= '$ilto')"); + } + # Don't order by il_from if it's constant in the WHERE clause + if(count($this->getPageSet()->getGoodTitles()) == 1) + $this->addOption('ORDER BY', 'il_to'); + else + $this->addOption('ORDER BY', 'il_from, il_to'); + $this->addOption('LIMIT', $params['limit'] + 1); $db = $this->getDB(); $res = $this->select(__METHOD__); if (is_null($resultPageSet)) { - + $data = array(); - $lastId = 0; // database has no ID 0 + $lastId = 0; // database has no ID 0 + $count = 0; while ($row = $db->fetchObject($res)) { + if (++$count > $params['limit']) { + // We've reached the one extra which shows that + // there are additional pages to be had. Stop here... + $this->setContinueEnumParameter('continue', $row->il_from . + '|' . $this->keyToTitle($row->il_to)); + break; + } if ($lastId != $row->il_from) { if($lastId != 0) { $this->addPageSubItems($lastId, $data); @@ -76,7 +101,7 @@ class ApiQueryImages extends ApiQueryGeneratorBase { } $lastId = $row->il_from; } - + $vals = array(); ApiQueryBase :: addTitleInfo($vals, Title :: makeTitle(NS_IMAGE, $row->il_to)); $data[] = $vals; @@ -89,7 +114,15 @@ class ApiQueryImages extends ApiQueryGeneratorBase { } else { $titles = array(); + $count = 0; while ($row = $db->fetchObject($res)) { + if (++$count > $params['limit']) { + // We've reached the one extra which shows that + // there are additional pages to be had. Stop here... + $this->setContinueEnumParameter('continue', $row->il_from . + '|' . $this->keyToTitle($row->il_to)); + break; + } $titles[] = Title :: makeTitle(NS_IMAGE, $row->il_to); } $resultPageSet->populateFromTitles($titles); @@ -98,6 +131,26 @@ class ApiQueryImages extends ApiQueryGeneratorBase { $db->freeResult($res); } + public function getAllowedParams() { + return array( + '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 + ), + 'continue' => null, + ); + } + + public function getParamDescription () { + return array( + 'limit' => 'How many images to return', + 'continue' => 'When more results are available, use this to continue', + ); + } + public function getDescription() { return 'Returns all images contained on the given page(s)'; } @@ -112,7 +165,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase { } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryImages.php 30222 2008-01-28 19:05:26Z catrope $'; + return __CLASS__ . ': $Id: ApiQueryImages.php 37535 2008-07-10 21:20:43Z catrope $'; } } - -- cgit v1.2.3-54-g00ecf