(bug 13735) Added prop=categoryinfo module
authorRoan Kattouw <catrope@users.mediawiki.org>
Sat, 26 Apr 2008 15:30:27 +0000 (15:30 +0000)
committerRoan Kattouw <catrope@users.mediawiki.org>
Sat, 26 Apr 2008 15:30:27 +0000 (15:30 +0000)
RELEASE-NOTES
includes/AutoLoader.php
includes/api/ApiQuery.php
includes/api/ApiQueryCategoryInfo.php [new file with mode: 0644]

index 19f6b6f..03e0351 100644 (file)
@@ -269,6 +269,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * Fixed handling of usernames containing spaces in list=block
 * (bug 13836) Fixed fatal errors resulting from combining iiprop=metadata with
   format=xml
+* (bug 13735) Added prop=categoryinfo module
 
 === Languages updated in 1.13 ===
 
index 51c0c02..1dee7b1 100644 (file)
@@ -361,6 +361,7 @@ function __autoload($className) {
                'ApiQueryBase' => 'includes/api/ApiQueryBase.php',
                'ApiQueryCategories' => 'includes/api/ApiQueryCategories.php',
                'ApiQueryCategoryMembers' => 'includes/api/ApiQueryCategoryMembers.php',
+               'ApiQueryCategoryInfo' => 'includes/api/ApiQueryCategoryInfo.php',
                'ApiQueryContributions' => 'includes/api/ApiQueryUserContributions.php',
                'ApiQueryExternalLinks' => 'includes/api/ApiQueryExternalLinks.php',
                'ApiQueryExtLinksUsage' => 'includes/api/ApiQueryExtLinksUsage.php',
index a220e58..8f2f8df 100644 (file)
@@ -55,6 +55,7 @@ class ApiQuery extends ApiBase {
                'templates' => 'ApiQueryLinks',
                'categories' => 'ApiQueryCategories',
                'extlinks' => 'ApiQueryExternalLinks',
+               'categoryinfo' => 'ApiQueryCategoryInfo',
        );
 
        private $mQueryListModules = array (
diff --git a/includes/api/ApiQueryCategoryInfo.php b/includes/api/ApiQueryCategoryInfo.php
new file mode 100644 (file)
index 0000000..1929241
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ * Created on May 13, 2007
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <Firstname><Lastname>@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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+       // Eclipse helper - will be ignored in production
+       require_once ("ApiQueryBase.php");
+}
+
+/**
+ * This query adds <images> subelement to all pages with the list of images embedded into those pages.
+ *
+ * @addtogroup API
+ */
+class ApiQueryCategoryInfo extends ApiQueryBase {
+
+       public function __construct($query, $moduleName) {
+               parent :: __construct($query, $moduleName, 'ci');
+       }
+
+       public function execute() {                     
+               $alltitles = $this->getPageSet()->getAllTitlesByNamespace();
+               $categories = $alltitles[NS_CATEGORY];
+               if(empty($categories))
+                       return;
+
+               $titles = $this->getPageSet()->getGoodTitles() +
+                                       $this->getPageSet()->getMissingTitles();
+               $cattitles = array();
+               foreach($categories as $c)
+               {
+                       $t = $titles[$c];
+                       $cattitles[$c] = $t->getDbKey();
+               }
+
+               $this->addTables('category');
+               $this->addFields(array('cat_title', 'cat_pages', 'cat_subcats', 'cat_files'));
+               $this->addWhere(array('cat_title' => $cattitles));                      
+
+               $db = $this->getDB();
+               $res = $this->select(__METHOD__);
+
+               $data = array();
+               $catids = array_flip($cattitles);
+               while($row = $db->fetchObject($res))
+               {
+                       $vals = array();
+                       $vals['size'] = $row->cat_pages;
+                       $vals['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
+                       $vals['files'] = $row->cat_files;
+                       $vals['subcats'] = $row->cat_subcats;
+                       $this->addPageSubItems($catids[$row->cat_title], $vals);
+               }
+               $db->freeResult($res);
+       }
+
+       public function getDescription() {
+               return 'Returns information about the given categories';
+       }
+
+       protected function getExamples() {
+               return "api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar";
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}