X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/51ff73d1c23dde7d9149040d018c42ae27b20a0c..d57edfddd6c01f0ed6b1a84019649cdf6cddd5f8:/includes/api/ApiQueryCategoryInfo.php diff --git a/includes/api/ApiQueryCategoryInfo.php b/includes/api/ApiQueryCategoryInfo.php index f83c4a5b..4d67a19e 100644 --- a/includes/api/ApiQueryCategoryInfo.php +++ b/includes/api/ApiQueryCategoryInfo.php @@ -1,11 +1,10 @@ @gmail.com + * Created on May 13, 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,27 +18,30 @@ * * 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')) { +if ( !defined( 'MEDIAWIKI' ) ) { // Eclipse helper - will be ignored in production - require_once ("ApiQueryBase.php"); + require_once( "ApiQueryBase.php" ); } /** - * This query adds subelement to all pages with the list of images embedded into those pages. + * This query adds the subelement to all pages with the list of categories the page is in * * @ingroup API */ class ApiQueryCategoryInfo extends ApiQueryBase { - public function __construct($query, $moduleName) { - parent :: __construct($query, $moduleName, 'ci'); + public function __construct( $query, $moduleName ) { + parent::__construct( $query, $moduleName, 'ci' ); } - public function execute() { + public function execute() { + $params = $this->extractRequestParams(); $alltitles = $this->getPageSet()->getAllTitlesByNamespace(); if ( empty( $alltitles[NS_CATEGORY] ) ) { return; @@ -49,41 +51,64 @@ class ApiQueryCategoryInfo extends ApiQueryBase { $titles = $this->getPageSet()->getGoodTitles() + $this->getPageSet()->getMissingTitles(); $cattitles = array(); - foreach($categories as $c) - { + foreach ( $categories as $c ) { $t = $titles[$c]; - $cattitles[$c] = $t->getDBKey(); + $cattitles[$c] = $t->getDBkey(); } - $this->addTables(array('category', 'page', 'page_props')); - $this->addJoinConds(array( - 'page' => array('LEFT JOIN', array( + $this->addTables( array( 'category', 'page', 'page_props' ) ); + $this->addJoinConds( array( + 'page' => array( 'LEFT JOIN', array( 'page_namespace' => NS_CATEGORY, - 'page_title=cat_title')), - 'page_props' => array('LEFT JOIN', array( + 'page_title=cat_title' ) ), + 'page_props' => array( 'LEFT JOIN', array( 'pp_page=page_id', - 'pp_propname' => 'hiddencat')), - )); - $this->addFields(array('cat_title', 'cat_pages', 'cat_subcats', 'cat_files', 'pp_propname AS cat_hidden')); - $this->addWhere(array('cat_title' => $cattitles)); - - $db = $this->getDB(); - $res = $this->select(__METHOD__); - - $data = array(); - $catids = array_flip($cattitles); - while($row = $db->fetchObject($res)) - { + 'pp_propname' => 'hiddencat' ) ), + ) ); + + $this->addFields( array( 'cat_title', 'cat_pages', 'cat_subcats', 'cat_files', 'pp_propname AS cat_hidden' ) ); + $this->addWhere( array( 'cat_title' => $cattitles ) ); + + if ( !is_null( $params['continue'] ) ) { + $title = $this->getDB()->addQuotes( $params['continue'] ); + $this->addWhere( "cat_title >= $title" ); + } + $this->addOption( 'ORDER BY', 'cat_title' ); + + $res = $this->select( __METHOD__ ); + + $catids = array_flip( $cattitles ); + foreach ( $res as $row ) { $vals = array(); - $vals['size'] = $row->cat_pages; + $vals['size'] = intval( $row->cat_pages ); $vals['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files; - $vals['files'] = $row->cat_files; - $vals['subcats'] = $row->cat_subcats; - if($row->cat_hidden) + $vals['files'] = intval( $row->cat_files ); + $vals['subcats'] = intval( $row->cat_subcats ); + if ( $row->cat_hidden ) { $vals['hidden'] = ''; - $this->addPageSubItems($catids[$row->cat_title], $vals); + } + $fit = $this->addPageSubItems( $catids[$row->cat_title], $vals ); + if ( !$fit ) { + $this->setContinueEnumParameter( 'continue', $row->cat_title ); + break; + } } - $db->freeResult($res); + } + + public function getCacheMode( $params ) { + return 'public'; + } + + public function getAllowedParams() { + return array( + 'continue' => null, + ); + } + + public function getParamDescription() { + return array( + 'continue' => 'When more results are available, use this to continue', + ); } public function getDescription() { @@ -91,10 +116,10 @@ class ApiQueryCategoryInfo extends ApiQueryBase { } protected function getExamples() { - return "api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar"; + return 'api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'; } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryCategoryInfo.php 44590 2008-12-14 20:24:23Z catrope $'; + return __CLASS__ . ': $Id$'; } }