X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiQueryAllpages.php;h=55b5bdb6c6c57a9ac3b1bd77e92695e00d54c024;hb=31775400d879ce3e73ee2bd05a2a02eeaf68152f;hp=0a715eb818275f9f7fe0df277d947048191c08b7;hpb=5c1ca0fc833201ab78ebef8a4140d1f53b8fbfbf;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiQueryAllpages.php b/includes/api/ApiQueryAllpages.php index 0a715eb818..55b5bdb6c6 100644 --- a/includes/api/ApiQueryAllpages.php +++ b/includes/api/ApiQueryAllpages.php @@ -26,31 +26,41 @@ if (!defined('MEDIAWIKI')) { // Eclipse helper - will be ignored in production - require_once ("ApiQueryBase.php"); + require_once ('ApiQueryBase.php'); } -class ApiQueryAllpages extends ApiQueryBase { +class ApiQueryAllpages extends ApiQueryGeneratorBase { - public function __construct($query, $moduleName, $generator = false) { - parent :: __construct($query, $moduleName, $generator); + public function __construct($query, $moduleName) { + parent :: __construct($query, $moduleName, 'ap'); } public function execute() { - $aplimit = $apfrom = $apnamespace = $apfilterredir = null; + $this->run(); + } + + public function executeGenerator($resultPageSet) { + $this->run($resultPageSet); + } + + private function run($resultPageSet = null) { + $limit = $from = $namespace = $filterredir = null; extract($this->extractRequestParams()); $db = $this->getDB(); + $where = array ( - 'page_namespace' => $apnamespace + 'page_namespace' => $namespace ); - if (isset ($apfrom)) - $where[] = 'page_title>=' . $db->addQuotes(ApiQueryBase :: titleToKey($apfrom)); - - if ($apfilterredir === 'redirects') + if (isset ($from)) { + $where[] = 'page_title>=' . $db->addQuotes(ApiQueryBase :: titleToKey($from)); + } + if ($filterredir === 'redirects') { $where['page_is_redirect'] = 1; - else - if ($apfilterredir === 'nonredirects') - $where['page_is_redirect'] = 0; + } + elseif ($filterredir === 'nonredirects') { + $where['page_is_redirect'] = 0; + } $this->profileDBIn(); $res = $db->select('page', array ( @@ -59,41 +69,48 @@ class ApiQueryAllpages extends ApiQueryBase { 'page_title' ), $where, __CLASS__ . '::' . __METHOD__, array ( 'USE INDEX' => 'name_title', - 'LIMIT' => $aplimit +1, + 'LIMIT' => $limit +1, 'ORDER BY' => 'page_namespace, page_title' )); $this->profileDBOut(); - + $data = array (); - $data['_element'] = 'p'; $count = 0; while ($row = $db->fetchObject($res)) { - if (++ $count > $aplimit) { + if (++ $count > $limit) { // We've reached the one extra which shows that there are additional pages to be had. Stop here... $msg = array ( - 'continue' => 'apfrom=' . ApiQueryBase :: keyToTitle($row->page_title - )); - $this->getResult()->addMessage('query-status', 'allpages', $msg); + 'continue' => $this->encodeParamName('from') . '='. ApiQueryBase :: keyToTitle($row->page_title)); + $this->getResult()->addValue('query-status', 'allpages', $msg); break; } $title = Title :: makeTitle($row->page_namespace, $row->page_title); // skip any pages that user has no rights to read if ($title->userCanRead()) { - $id = intval($row->page_id); - $pagedata = array (); - $pagedata['id'] = $id; - if ($title->getNamespace() !== 0) - $pagedata['ns'] = $title->getNamespace(); - $pagedata['title'] = $title->getPrefixedText(); - $pagedata['*'] = ''; - - $data[$id] = $pagedata; + + if (is_null($resultPageSet)) { + $pagedata = array (); + $pagedata['id'] = $id; + if ($title->getNamespace() !== 0) + $pagedata['ns'] = $title->getNamespace(); + $pagedata['title'] = $title->getPrefixedText(); + + $data[$id] = $pagedata; + } else { + $data[] = $id; // in generator mode, just assemble a list of page IDs. + } } } $db->freeResult($res); - $this->getResult()->addMessage('query', 'allpages', $data); + + if (is_null($resultPageSet)) { + ApiResult :: setIndexedTagName($data, 'p'); + $this->getResult()->addValue('query', 'allpages', $data); + } else { + $resultPageSet->executeForPageIDs($data); + } } protected function getAllowedParams() { @@ -106,31 +123,36 @@ class ApiQueryAllpages extends ApiQueryBase { } return array ( - 'apfrom' => null, - 'apnamespace' => array ( - GN_ENUM_DFLT => 0, - GN_ENUM_TYPE => $validNamespaces + 'from' => null, + 'namespace' => array ( + ApiBase :: PARAM_DFLT => 0, + ApiBase :: PARAM_TYPE => $validNamespaces ), - 'apfilterredir' => array ( - GN_ENUM_DFLT => 'all', - GN_ENUM_TYPE => array ( + 'filterredir' => array ( + ApiBase :: PARAM_DFLT => 'all', + ApiBase :: PARAM_TYPE => array ( 'all', 'redirects', 'nonredirects' ) ), - 'aplimit' => array ( - GN_ENUM_DFLT => 10, - GN_ENUM_TYPE => 'limit', - GN_ENUM_MIN => 1, - GN_ENUM_MAX1 => 500, - GN_ENUM_MAX2 => 5000 + 'limit' => array ( + ApiBase :: PARAM_DFLT => 10, + ApiBase :: PARAM_TYPE => 'limit', + ApiBase :: PARAM_MIN => 1, + ApiBase :: PARAM_MAX1 => 500, + ApiBase :: PARAM_MAX2 => 5000 ) ); } protected function getParamDescription() { - return array (); + return array ( + 'from' => 'The page title to start enumerating from.', + 'namespace' => 'The namespace to enumerate. Default 0 (Main).', + 'filterredir' => 'Which pages to list: "all" (default), "redirects", or "nonredirects"', + 'limit' => 'How many total pages to return' + ); } protected function getDescription() { @@ -140,11 +162,13 @@ class ApiQueryAllpages extends ApiQueryBase { protected function getExamples() { return array ( 'api.php?action=query&list=allpages', - 'api.php?action=query&list=allpages&apfrom=B&aplimit=5' + 'api.php?action=query&list=allpages&apfrom=B&aplimit=5', + 'api.php?action=query&generator=allpages&gaplimit=4&prop=info (generator)' ); } - public function getCanGenerate() { - return true; + + public function getVersion() { + return __CLASS__ . ': $Id$'; } } ?> \ No newline at end of file