Merge "Convert article delete to use OOUI"
[lhc/web/wiklou.git] / includes / api / ApiQueryRandom.php
index c7dbfb8..ce62226 100644 (file)
@@ -48,7 +48,7 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
         * @param ApiPageSet|null $resultPageSet
         * @param int $limit Number of pages to fetch
         * @param string|null $start Starting page_random
-        * @param int|null $startId Starting page_id
+        * @param int $startId Starting page_id
         * @param string|null $end Ending page_random
         * @return array (int, string|null) Number of pages left to query and continuation string
         */
@@ -57,9 +57,9 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
 
                $this->resetQueryParams();
                $this->addTables( 'page' );
-               $this->addFields( array( 'page_id', 'page_random' ) );
+               $this->addFields( [ 'page_id', 'page_random' ] );
                if ( is_null( $resultPageSet ) ) {
-                       $this->addFields( array( 'page_title', 'page_namespace' ) );
+                       $this->addFields( [ 'page_title', 'page_namespace' ] );
                } else {
                        $this->addFields( $resultPageSet->getPageTableFields() );
                }
@@ -69,14 +69,14 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                } elseif ( $params['filterredir'] === 'nonredirects' ) {
                        $this->addWhereFld( 'page_is_redirect', 0 );
                } elseif ( is_null( $resultPageSet ) ) {
-                       $this->addFields( array( 'page_is_redirect' ) );
+                       $this->addFields( [ 'page_is_redirect' ] );
                }
                $this->addOption( 'LIMIT', $limit + 1 );
 
                if ( $start !== null ) {
                        $start = $this->getDB()->addQuotes( $start );
-                       if ( $startId !== null ) {
-                               $startId = (int)$startId;
+                       if ( $startId > 0 ) {
+                               $startId = (int)$startId; // safety
                                $this->addWhere( "page_random = $start AND page_id >= $startId OR page_random > $start" );
                        } else {
                                $this->addWhere( "page_random >= $start" );
@@ -85,36 +85,36 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                if ( $end !== null ) {
                        $this->addWhere( 'page_random < ' . $this->getDB()->addQuotes( $end ) );
                }
-               $this->addOption( 'ORDER BY', array( 'page_random', 'page_id' ) );
+               $this->addOption( 'ORDER BY', [ 'page_random', 'page_id' ] );
 
                $result = $this->getResult();
-               $path = array( 'query', $this->getModuleName() );
+               $path = [ 'query', $this->getModuleName() ];
 
                $res = $this->select( __METHOD__ );
                $count = 0;
                foreach ( $res as $row ) {
                        if ( $count++ >= $limit ) {
-                               return array( 0, "{$row->page_random}|{$row->page_id}" );
+                               return [ 0, "{$row->page_random}|{$row->page_id}" ];
                        }
                        if ( is_null( $resultPageSet ) ) {
                                $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                               $page = array(
+                               $page = [
                                        'id' => (int)$row->page_id,
-                               );
+                               ];
                                ApiQueryBase::addTitleInfo( $page, $title );
                                if ( isset( $row->page_is_redirect ) ) {
                                        $page['redirect'] = (bool)$row->page_is_redirect;
                                }
                                $fit = $result->addValue( $path, null, $page );
                                if ( !$fit ) {
-                                       return array( 0, "{$row->page_random}|{$row->page_id}" );
+                                       return [ 0, "{$row->page_random}|{$row->page_id}" ];
                                }
                        } else {
                                $resultPageSet->processDbRow( $row );
                        }
                }
 
-               return array( $limit - $count, null );
+               return [ $limit - $count, null ];
        }
 
        /**
@@ -144,10 +144,19 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                } else {
                        $rand = wfRandom();
                        $start = $rand;
-                       $startId = null;
+                       $startId = 0;
                        $end = null;
                }
 
+               // Set the non-continue if this is being used as a generator
+               // (as a list it doesn't matter because lists never non-continue)
+               if ( $resultPageSet !== null ) {
+                       $endFlag = $end === null ? 0 : 1;
+                       $this->getContinuationManager()->addGeneratorNonContinueParam(
+                               $this, 'continue', "$rand|$start|$startId|$endFlag"
+                       );
+               }
+
                list( $left, $continue ) =
                        $this->runQuery( $resultPageSet, $params['limit'], $start, $startId, $end );
                if ( $end === null && $continue === null ) {
@@ -164,7 +173,7 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                }
 
                if ( is_null( $resultPageSet ) ) {
-                       $this->getResult()->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+                       $this->getResult()->addIndexedTagName( [ 'query', $this->getModuleName() ], 'page' );
                }
        }
 
@@ -173,42 +182,42 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
-                       'namespace' => array(
+               return [
+                       'namespace' => [
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_ISMULTI => true
-                       ),
-                       'filterredir' => array(
-                               ApiBase::PARAM_TYPE => array( 'all', 'redirects', 'nonredirects' ),
+                       ],
+                       'filterredir' => [
+                               ApiBase::PARAM_TYPE => [ 'all', 'redirects', 'nonredirects' ],
                                ApiBase::PARAM_DFLT => 'nonredirects', // for BC
-                       ),
-                       'redirect' => array(
+                       ],
+                       'redirect' => [
                                ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_DFLT => false,
-                       ),
-                       'limit' => array(
+                       ],
+                       'limit' => [
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 1,
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => array(
+                       ],
+                       'continue' => [
                                ApiBase::PARAM_HELP_MSG => 'api-help-param-continue'
-                       ),
-               );
+                       ],
+               ];
        }
 
        protected function getExamplesMessages() {
-               return array(
+               return [
                        'action=query&list=random&rnnamespace=0&rnlimit=2'
                                => 'apihelp-query+random-example-simple',
                        'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
                                => 'apihelp-query+random-example-generator',
-               );
+               ];
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Random';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Random';
        }
 }