]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/api/ApiQueryRandom.php
MediaWiki 1.15.0
[autoinstallsdev/mediawiki.git] / includes / api / ApiQueryRandom.php
index e7b8bf46f722fbc82e4e687ba00d6dd1c4cbd167..73c4a81c9201c2c13f7b2ffe93c6a76e48ff7287 100644 (file)
@@ -62,7 +62,7 @@ if (!defined('MEDIAWIKI')) {
                        $this->addFields($resultPageSet->getPageTableFields());
        }
 
-       protected function runQuery(&$data, &$resultPageSet) {
+       protected function runQuery(&$resultPageSet) {
                $db = $this->getDB();
                $res = $this->select(__METHOD__);
                $count = 0;
@@ -73,7 +73,14 @@ if (!defined('MEDIAWIKI')) {
                                // Prevent duplicates
                                if(!in_array($row->page_id, $this->pageIDs))
                                {
-                                       $data[] = $this->extractRowInfo($row);
+                                       $fit = $this->getResult()->addValue(
+                                                       array('query', $this->getModuleName()),
+                                                       null, $this->extractRowInfo($row));
+                                       if(!$fit)
+                                               # We can't really query-continue a random list.
+                                               # Return an insanely high value so
+                                               # $count < $limit is false
+                                               return 1E9;
                                        $this->pageIDs[] = $row->page_id;
                                }
                        }
@@ -87,11 +94,10 @@ if (!defined('MEDIAWIKI')) {
        public function run($resultPageSet = null) {
                $params = $this->extractRequestParams();
                $result = $this->getResult();
-               $data = array();
                $this->pageIDs = array();
                
                $this->prepareQuery(wfRandom(), $params['limit'], $params['namespace'], $resultPageSet, $params['redirect']);
-               $count = $this->runQuery($data, $resultPageSet);
+               $count = $this->runQuery($resultPageSet);
                if($count < $params['limit'])
                {
                        /* We got too few pages, we probably picked a high value
@@ -99,21 +105,19 @@ if (!defined('MEDIAWIKI')) {
                         * also the comment in Title::getRandomTitle()
                         */
                         $this->prepareQuery(0, $params['limit'] - $count, $params['namespace'], $resultPageSet, $params['redirect']);
-                        $this->runQuery($data, $resultPageSet);
+                        $this->runQuery($resultPageSet);
                }
 
                if(is_null($resultPageSet)) {
-                       $result->setIndexedTagName($data, 'page');
-                       $result->addValue('query', $this->getModuleName(), $data);
+                       $result->setIndexedTagName_internal(array('query', $this->getModuleName()), 'page');
                }
        }
 
        private function extractRowInfo($row) {
                $title = Title::makeTitle($row->page_namespace, $row->page_title);
                $vals = array();
-               $vals['title'] = $title->getPrefixedText();
-               $vals['ns'] = $row->page_namespace;
-               $vals['id'] = $row->page_id;
+               $vals['id'] = intval($row->page_id);
+               ApiQueryBase::addTitleInfo($vals, $title);
                return $vals;
        }
 
@@ -157,4 +161,4 @@ if (!defined('MEDIAWIKI')) {
        public function getVersion() {
                return __CLASS__ . ': $Id: ApiQueryRandom.php overlordq$';
        }
-}
+}
\ No newline at end of file