X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fapi%2FApiQueryAllPages.php;h=315def049ba3422b0fbab7006f74af56f517daa9;hp=6a0f124fafd1585fcda736695d054d6aaeb2c13a;hb=64b83bdb3afd0ee4f8fc1893a865409c198e601e;hpb=c253b03fe5799331d34f390d426bd58d20fc50d6 diff --git a/includes/api/ApiQueryAllPages.php b/includes/api/ApiQueryAllPages.php index 6a0f124faf..315def049b 100644 --- a/includes/api/ApiQueryAllPages.php +++ b/includes/api/ApiQueryAllPages.php @@ -50,11 +50,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { */ public function executeGenerator( $resultPageSet ) { if ( $resultPageSet->isResolvingRedirects() ) { - $this->dieUsage( - 'Use "gapfilterredir=nonredirects" option instead of "redirects" ' . - 'when using allpages as a generator', - 'params' - ); + $this->dieWithError( 'apierror-allpages-generator-redirects', 'params' ); } $this->run( $resultPageSet ); @@ -80,10 +76,13 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { $this->addWhere( "page_title $op= $cont_from" ); } - if ( $params['filterredir'] == 'redirects' ) { - $this->addWhereFld( 'page_is_redirect', 1 ); - } elseif ( $params['filterredir'] == 'nonredirects' ) { - $this->addWhereFld( 'page_is_redirect', 0 ); + $miserMode = $this->getConfig()->get( 'MiserMode' ); + if ( !$miserMode ) { + if ( $params['filterredir'] == 'redirects' ) { + $this->addWhereFld( 'page_is_redirect', 1 ); + } elseif ( $params['filterredir'] == 'nonredirects' ) { + $this->addWhereFld( 'page_is_redirect', 0 ); + } } $this->addWhereFld( 'page_namespace', $params['namespace'] ); @@ -112,6 +111,18 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { $selectFields = $resultPageSet->getPageTableFields(); } + $miserModeFilterRedirValue = null; + $miserModeFilterRedir = $miserMode && $params['filterredir'] !== 'all'; + if ( $miserModeFilterRedir ) { + $selectFields[] = 'page_is_redirect'; + + if ( $params['filterredir'] == 'redirects' ) { + $miserModeFilterRedirValue = 1; + } elseif ( $params['filterredir'] == 'nonredirects' ) { + $miserModeFilterRedirValue = 0; + } + } + $this->addFields( $selectFields ); $forceNameTitleIndex = true; if ( isset( $params['minsize'] ) ) { @@ -157,7 +168,9 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { $this->addOption( 'DISTINCT' ); } elseif ( isset( $params['prlevel'] ) ) { - $this->dieUsage( 'prlevel may not be used without prtype', 'params' ); + $this->dieWithError( + [ 'apierror-invalidparammix-mustusewith', 'prlevel', 'prtype' ], 'invalidparammix' + ); } if ( $params['filterlanglinks'] == 'withoutlanglinks' ) { @@ -221,6 +234,11 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { break; } + if ( $miserModeFilterRedir && (int)$row->page_is_redirect !== $miserModeFilterRedirValue ) { + // Filter implemented in PHP due to being in Miser Mode + continue; + } + if ( is_null( $resultPageSet ) ) { $title = Title::makeTitle( $row->page_namespace, $row->page_title ); $vals = [ @@ -244,7 +262,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { } public function getAllowedParams() { - return [ + $ret = [ 'from' => null, 'continue' => [ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue', @@ -316,6 +334,12 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { ApiBase::PARAM_DFLT => 'all' ], ]; + + if ( $this->getConfig()->get( 'MiserMode' ) ) { + $ret['filterredir'][ApiBase::PARAM_HELP_MSG_APPEND] = [ 'api-help-param-limited-in-miser-mode' ]; + } + + return $ret; } protected function getExamplesMessages() { @@ -331,6 +355,6 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { } public function getHelpUrls() { - return 'https://www.mediawiki.org/wiki/API:Allpages'; + return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allpages'; } }