X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/c33ba33ef28344d64266b8b588460a301750fad5..f75295fdeb4bb0dc64fff481a386e0f48081a492:/includes/api/ApiQueryImages.php diff --git a/includes/api/ApiQueryImages.php b/includes/api/ApiQueryImages.php index d64a653b..9dbe08a6 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,38 +60,60 @@ 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 + $count = 0; while ($row = $db->fetchObject($res)) { - if ($lastId != $row->il_from) { - if($lastId != 0) { - $this->addPageSubItems($lastId, $data); - $data = array(); - } - $lastId = $row->il_from; + 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; } - $vals = array(); - ApiQueryBase :: addTitleInfo($vals, Title :: makeTitle(NS_IMAGE, $row->il_to)); - $data[] = $vals; - } - - if($lastId != 0) { - $this->addPageSubItems($lastId, $data); + ApiQueryBase :: addTitleInfo($vals, Title :: makeTitle(NS_FILE, $row->il_to)); + $fit = $this->addPageSubItem($row->il_from, $vals); + if(!$fit) + { + $this->setContinueEnumParameter('continue', $row->il_from . + '|' . $this->keyToTitle($row->il_to)); + break; + } } - } else { $titles = array(); + $count = 0; while ($row = $db->fetchObject($res)) { - $titles[] = Title :: makeTitle(NS_IMAGE, $row->il_to); + 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_FILE, $row->il_to); } $resultPageSet->populateFromTitles($titles); } @@ -98,7 +121,31 @@ class ApiQueryImages extends ApiQueryGeneratorBase { $db->freeResult($res); } - protected function getDescription() { + public function getCacheMode( $params ) { + return 'public'; + } + + 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 +159,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase { } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryImages.php 24092 2007-07-14 19:04:31Z yurik $'; + return __CLASS__ . ': $Id: ApiQueryImages.php 69986 2010-07-27 03:57:39Z tstarling $'; } } -