40 parent::__construct( $query, $moduleName,
'ac' );
52 $this->run( $resultPageSet );
58 private function run( $resultPageSet =
null ) {
65 if ( $params[
'continue'] !==
null ) {
67 $op = $params[
'dir'] ==
'descending' ?
'<=' :
'>=';
68 $this->
addWhere( $db->expr(
'cat_title', $op, $cont[0] ) );
71 $dir = ( $params[
'dir'] ==
'descending' ?
'older' :
'newer' );
72 $from = ( $params[
'from'] ===
null
75 $to = ( $params[
'to'] ===
null
80 $min = $params[
'min'];
81 $max = $params[
'max'];
82 if ( $dir ==
'newer' ) {
88 if ( isset( $params[
'prefix'] ) ) {
98 $this->
addOption(
'LIMIT', $params[
'limit'] + 1 );
99 $sort = (
$params[
'dir'] ==
'descending' ?
' DESC' :
'' );
100 $this->
addOption(
'ORDER BY',
'cat_title' . $sort );
102 $prop = array_fill_keys( $params[
'prop'],
true );
103 $this->
addFieldsIf( [
'cat_pages',
'cat_subcats',
'cat_files' ], isset( $prop[
'size'] ) );
104 if ( isset( $prop[
'hidden'] ) ) {
105 $this->
addTables( [
'page',
'page_props' ] );
107 'page' => [
'LEFT JOIN', [
109 'page_title=cat_title' ] ],
110 'page_props' => [
'LEFT JOIN', [
112 'pp_propname' =>
'hiddencat' ] ],
114 $this->
addFields( [
'cat_hidden' =>
'pp_propname' ] );
117 $res = $this->
select( __METHOD__ );
123 foreach ( $res as $row ) {
124 if ( ++$count > $params[
'limit'] ) {
132 $titleObj = Title::makeTitle(
NS_CATEGORY, $row->cat_title );
133 if ( $resultPageSet !==
null ) {
134 $pages[] = $titleObj;
138 if ( isset( $prop[
'size'] ) ) {
139 $item[
'size'] = (int)$row->cat_pages;
140 $item[
'pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
141 $item[
'files'] = (int)$row->cat_files;
142 $item[
'subcats'] = (int)$row->cat_subcats;
144 if ( isset( $prop[
'hidden'] ) ) {
145 $item[
'hidden'] = (bool)$row->cat_hidden;
147 $fit = $result->addValue( [
'query', $this->
getModuleName() ],
null, $item );
155 if ( $resultPageSet ===
null ) {
156 $result->addIndexedTagName( [
'query', $this->
getModuleName() ],
'c' );
158 $resultPageSet->populateFromTitles( $pages );
171 ParamValidator::PARAM_DEFAULT =>
'ascending',
172 ParamValidator::PARAM_TYPE => [
178 ParamValidator::PARAM_TYPE =>
'integer'
181 ParamValidator::PARAM_TYPE =>
'integer'
184 ParamValidator::PARAM_DEFAULT => 10,
185 ParamValidator::PARAM_TYPE =>
'limit',
186 IntegerDef::PARAM_MIN => 1,
191 ParamValidator::PARAM_TYPE => [
'size',
'hidden' ],
192 ParamValidator::PARAM_DEFAULT =>
'',
193 ParamValidator::PARAM_ISMULTI =>
true,
201 'action=query&list=allcategories&acprop=size'
202 =>
'apihelp-query+allcategories-example-size',
203 'action=query&generator=allcategories&gacprefix=List&prop=info'
204 =>
'apihelp-query+allcategories-example-generator',
209 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allcategories';
214class_alias( ApiQueryAllCategories::class,
'ApiQueryAllCategories' );