44 parent::__construct( $query, $moduleName,
'qp' );
45 $this->queryPages = array_values( array_diff(
47 $this->
getConfig()->
get(
'APIUselessQueryPages' )
49 $this->specialPageFactory = MediaWikiServices::getInstance()->getSpecialPageFactory();
57 $this->
run( $resultPageSet );
65 $qp = $this->specialPageFactory->getPage( $name );
69 'SpecialPageFactory failed to create special page ' . $name
75 'Special page ' . $name .
' is not a QueryPage'
84 public function run( $resultPageSet =
null ) {
85 $params = $this->extractRequestParams();
86 $result = $this->getResult();
88 $qp = $this->getSpecialPage( $params[
'page'] );
89 if ( !$qp->userCanExecute( $this->getUser() ) ) {
90 $this->dieWithError(
'apierror-specialpage-cantexecute' );
93 $r = [
'name' => $params[
'page'] ];
94 if ( $qp->isCached() ) {
95 if ( !$qp->isCacheable() ) {
96 $r[
'disabled'] =
true;
99 $ts = $qp->getCachedTimestamp();
101 $r[
'cachedtimestamp'] =
wfTimestamp( TS_ISO_8601, $ts );
103 $r[
'maxresults'] = $this->getConfig()->get(
'QueryCacheLimit' );
106 $result->addValue( [
'query' ], $this->getModuleName(), $r );
108 if ( $qp->isCached() && !$qp->isCacheable() ) {
113 $res = $qp->doQuery( $params[
'offset'], $params[
'limit'] + 1 );
116 foreach (
$res as $row ) {
117 if ( ++$count > $params[
'limit'] ) {
119 $this->setContinueEnumParameter(
'offset', $params[
'offset'] + $params[
'limit'] );
123 $title = Title::makeTitle( $row->namespace, $row->title );
124 if ( is_null( $resultPageSet ) ) {
126 if ( isset( $row->value ) ) {
127 $data[
'value'] = $row->value;
128 if ( $qp->usesTimestamps() ) {
129 $data[
'timestamp'] =
wfTimestamp( TS_ISO_8601, $row->value );
132 self::addTitleInfo( $data,
$title );
134 foreach ( $row as $field => $value ) {
135 if ( !in_array( $field, [
'namespace',
'title',
'value',
'qc_type' ] ) ) {
136 $data[
'databaseResult'][$field] = $value;
140 $fit = $result->addValue( [
'query', $this->getModuleName(),
'results' ],
null, $data );
142 $this->setContinueEnumParameter(
'offset', $params[
'offset'] + $count - 1 );
149 if ( is_null( $resultPageSet ) ) {
150 $result->addIndexedTagName(
151 [
'query', $this->getModuleName(),
'results' ],
155 $resultPageSet->populateFromTitles( $titles );
160 $qp = $this->getSpecialPage( $params[
'page'] );
161 if ( $qp->getRestriction() !=
'' ) {
190 'action=query&list=querypage&qppage=Ancientpages'
191 =>
'apihelp-query+querypage-example-ancientpages',
196 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Querypage';
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
const PARAM_REQUIRED
(boolean) Is the parameter required?
const PARAM_MAX2
(integer) Max value allowed for the parameter for users with the apihighlimits right,...
const PARAM_MAX
(integer) Max value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'.
static dieDebug( $method, $message)
Internal code errors should be reported with this method.
const PARAM_TYPE
(string|string[]) Either an array of allowed value strings, or a string type as described below.
const PARAM_DFLT
(null|boolean|integer|string) Default value of the parameter.
const PARAM_MIN
(integer) Lowest value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'.
const LIMIT_BIG1
Fast query, standard limit.
const PARAM_HELP_MSG
(string|array|Message) Specify an alternative i18n documentation message for this parameter.
const LIMIT_BIG2
Fast query, apihighlimits limit.
Query module to get the results of a QueryPage-based special page.
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
getHelpUrls()
Return links to more detailed help pages about the module.
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
executeGenerator( $resultPageSet)
Execute this module as a generator.
SpecialPageFactory $specialPageFactory
__construct(ApiQuery $query, $moduleName)
string[] $queryPages
list of special page names
getCacheMode( $params)
Get the cache mode for the data generated by this module.
getExamplesMessages()
Returns usage examples for this module.
run( $resultPageSet=null)
This is the main query class.
Factory for handling the special page list and generating SpecialPage objects.
This is a class for doing query pages; since they're almost all the same, we factor out some of the f...
static getPages()
Get a list of query page classes and their associated special pages, for periodic updates.