]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/api/ApiQueryAllCategories.php
MediaWiki 1.16.0
[autoinstallsdev/mediawiki.git] / includes / api / ApiQueryAllCategories.php
index e835c04203d7e44c929b7e43d01bdb7efd06dbab..8f24fc7c0847b28b91da1aaf231afc02c83b678b 100644 (file)
@@ -23,9 +23,9 @@
  * http://www.gnu.org/copyleft/gpl.html
  */
 
-if (!defined('MEDIAWIKI')) {
+if ( !defined( 'MEDIAWIKI' ) ) {
        // Eclipse helper - will be ignored in production
-       require_once ('ApiQueryBase.php');
+       require_once ( 'ApiQueryBase.php' );
 }
 
 /**
@@ -36,94 +36,98 @@ if (!defined('MEDIAWIKI')) {
  */
 class ApiQueryAllCategories extends ApiQueryGeneratorBase {
 
-       public function __construct($query, $moduleName) {
-               parent :: __construct($query, $moduleName, 'ac');
+       public function __construct( $query, $moduleName ) {
+               parent :: __construct( $query, $moduleName, 'ac' );
        }
 
        public function execute() {
                $this->run();
        }
 
-       public function executeGenerator($resultPageSet) {
-               $this->run($resultPageSet);
+       public function getCacheMode( $params ) {
+               return 'public';
        }
 
-       private function run($resultPageSet = null) {
+       public function executeGenerator( $resultPageSet ) {
+               $this->run( $resultPageSet );
+       }
+
+       private function run( $resultPageSet = null ) {
 
                $db = $this->getDB();
                $params = $this->extractRequestParams();
 
-               $this->addTables('category');
-               $this->addFields('cat_title');
+               $this->addTables( 'category' );
+               $this->addFields( 'cat_title' );
 
-               $dir = ($params['dir'] == 'descending' ? 'older' : 'newer');
-               $from = (is_null($params['from']) ? null : $this->titlePartToKey($params['from']));
-               $this->addWhereRange('cat_title', $dir, $from, null);
-               if (isset ($params['prefix']))
-                       $this->addWhere("cat_title LIKE '" . $db->escapeLike($this->titlePartToKey($params['prefix'])) . "%'");
+               $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+               $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+               $this->addWhereRange( 'cat_title', $dir, $from, null );
+               if ( isset ( $params['prefix'] ) )
+                       $this->addWhere( 'cat_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
 
-               $this->addOption('LIMIT', $params['limit']+1);
-               $this->addOption('ORDER BY', 'cat_title' . ($params['dir'] == 'descending' ? ' DESC' : ''));
+               $this->addOption( 'LIMIT', $params['limit'] + 1 );
+               $this->addOption( 'ORDER BY', 'cat_title' . ( $params['dir'] == 'descending' ? ' DESC' : '' ) );
 
-               $prop = array_flip($params['prop']);
-               $this->addFieldsIf( array( 'cat_pages', 'cat_subcats', 'cat_files' ), isset($prop['size']) );
-               if(isset($prop['hidden']))
+               $prop = array_flip( $params['prop'] );
+               $this->addFieldsIf( array( 'cat_pages', 'cat_subcats', 'cat_files' ), isset( $prop['size'] ) );
+               if ( isset( $prop['hidden'] ) )
                {
-                       $this->addTables(array('page', 'page_props'));
-                       $this->addJoinConds(array(
-                               'page' => array('LEFT JOIN', array(
+                       $this->addTables( array( '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('pp_propname AS cat_hidden');
+                                       'pp_propname' => 'hiddencat' ) ),
+                       ) );
+                       $this->addFields( 'pp_propname AS cat_hidden' );
                }
 
-               $res = $this->select(__METHOD__);
+               $res = $this->select( __METHOD__ );
 
                $pages = array();
                $categories = array();
                $result = $this->getResult();
                $count = 0;
-               while ($row = $db->fetchObject($res)) {
-                       if (++ $count > $params['limit']) {
+               while ( $row = $db->fetchObject( $res ) ) {
+                       if ( ++ $count > $params['limit'] ) {
                                // We've reached the one extra which shows that there are additional cats to be had. Stop here...
                                // TODO: Security issue - if the user has no right to view next title, it will still be shown
-                               $this->setContinueEnumParameter('from', $this->keyToTitle($row->cat_title));
+                               $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->cat_title ) );
                                break;
                        }
 
                        // Normalize titles
-                       $titleObj = Title::makeTitle(NS_CATEGORY, $row->cat_title);
-                       if(!is_null($resultPageSet))
+                       $titleObj = Title::makeTitle( NS_CATEGORY, $row->cat_title );
+                       if ( !is_null( $resultPageSet ) )
                                $pages[] = $titleObj->getPrefixedText();
                        else {
                                $item = array();
                                $result->setContent( $item, $titleObj->getText() );
-                               if( isset( $prop['size'] ) ) {
-                                       $item['size'] = intval($row->cat_pages);
+                               if ( isset( $prop['size'] ) ) {
+                                       $item['size'] = intval( $row->cat_pages );
                                        $item['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
-                                       $item['files'] = intval($row->cat_files);
-                                       $item['subcats'] = intval($row->cat_subcats);
+                                       $item['files'] = intval( $row->cat_files );
+                                       $item['subcats'] = intval( $row->cat_subcats );
                                }
-                               if( isset( $prop['hidden'] ) && $row->cat_hidden )
+                               if ( isset( $prop['hidden'] ) && $row->cat_hidden )
                                        $item['hidden'] = '';
-                               $fit = $result->addValue(array('query', $this->getModuleName()), null, $item);
-                               if(!$fit)
+                               $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $item );
+                               if ( !$fit )
                                {
-                                       $this->setContinueEnumParameter('from', $this->keyToTitle($row->cat_title));
+                                       $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->cat_title ) );
                                        break;
                                }
                        }
                }
-               $db->freeResult($res);
+               $db->freeResult( $res );
 
-               if (is_null($resultPageSet)) {
-                       $result->setIndexedTagName_internal(array('query', $this->getModuleName()), 'c');
+               if ( is_null( $resultPageSet ) ) {
+                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'c' );
                } else {
-                       $resultPageSet->populateFromTitles($pages);
+                       $resultPageSet->populateFromTitles( $pages );
                }
        }
 
@@ -175,6 +179,6 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        }
 
        public function getVersion() {
-               return __CLASS__ . ': $Id: ApiQueryAllCategories.php 47865 2009-02-27 16:03:01Z catrope $';
+               return __CLASS__ . ': $Id: ApiQueryAllCategories.php 69932 2010-07-26 08:03:21Z tstarling $';
        }
-}
\ No newline at end of file
+}