48 $this->source = get_class( $module );
56 $continue =
$request->getVal(
'continue',
'' );
57 if ( $continue !==
'' ) {
58 $continue = explode(
'||', $continue );
59 if ( count( $continue ) !== 2 ) {
62 $this->generatorDone = ( $continue[0] ===
'-' );
63 $skip = explode(
'|', $continue[1] );
64 if ( !$this->generatorDone ) {
65 $params = explode(
'|', $continue[0] );
67 $this->generatorParams = array_intersect_key(
81 if ( in_array( $name, $skip,
true ) ) {
82 $this->allModules[
$name] =
false;
86 $this->allModules[
$name] = $module;
112 return array_values( array_filter( $this->allModules ) );
124 if ( !isset( $this->allModules[$name] ) ) {
125 throw new UnexpectedValueException(
126 "Module '$name' called " . __METHOD__ .
127 ' but was not passed to ' . __CLASS__ .
'::__construct'
130 if ( !$this->allModules[$name] ) {
131 throw new UnexpectedValueException(
132 "Module '$name' was not supposed to have been executed, but " .
133 'it was executed anyway'
137 if ( is_array( $paramValue ) ) {
138 $paramValue = implode(
'|', $paramValue );
140 $this->continuationData[
$name][$paramName] = $paramValue;
157 if ( is_array( $paramValue ) ) {
158 $paramValue = implode(
'|', $paramValue );
160 $this->generatorNonContinuationData[
$name][$paramName] = $paramValue;
172 if ( is_array( $paramValue ) ) {
173 $paramValue = implode(
'|', $paramValue );
175 $this->generatorContinuationData[
$name][$paramName] = $paramValue;
183 return array_merge_recursive( $this->continuationData, $this->generatorContinuationData );
201 $batchcomplete =
false;
203 $finishedModules = array_diff(
204 array_keys( $this->allModules ),
205 array_keys( $this->continuationData )
209 $continuationData = array_diff_key( $this->continuationData, $this->generatedModules );
215 $continuationData = array_intersect_key( $this->continuationData, $this->generatedModules );
223 foreach ( $this->generatorNonContinuationData as $kvp ) {
229 } elseif ( $this->generatorContinuationData ) {
234 foreach ( $this->generatorContinuationData as $kvp ) {
238 $finishedModules = array_diff( $finishedModules, $this->generatedModules );
240 $batchcomplete =
true;
243 $generatorKeys =
'-';
244 $batchcomplete =
true;
249 if ( $data || $generatorKeys !==
'-' ) {
250 $data[
'continue'] = $generatorKeys .
'||' . implode(
'|', $finishedModules );
253 return [ $data, $batchcomplete ];
263 $result->addValue(
null,
'continue', $data,
266 if ( $batchcomplete ) {
267 $result->addValue(
null,
'batchcomplete',
true,
This abstract class implements many basic API functions, and is the base of all API classes.
encodeParamName( $paramName)
This method mangles parameter name based on the prefix supplied to the constructor.
getMain()
Get the main module.
extractRequestParams( $parseLimit=true)
Using getAllowedParams(), this function makes an array of the values provided by the user,...
getModuleName()
Get the name of the module being executed by this instance.
This manages continuation state.
addGeneratorNonContinueParam(ApiBase $module, $paramName, $paramValue)
Set the non-continuation parameter for the generator module.
isGeneratorDone()
Is the generator done?
addGeneratorContinueParam(ApiBase $module, $paramName, $paramValue)
Set the continuation parameter for the generator module.
$generatorContinuationData
setContinuationIntoResult(ApiResult $result)
Store the continuation data into the result.
getRunModules()
Get the list of modules that should actually be run.
addContinueParam(ApiBase $module, $paramName, $paramValue)
Set the continuation parameter for a module.
getSource()
Get the class that created this manager.
getRawNonContinuation()
Fetch raw non-continuation data.
__construct(ApiBase $module, array $allModules=[], array $generatedModules=[])
$generatorNonContinuationData
getContinuation()
Fetch continuation result data.
getRawContinuation()
Fetch raw continuation data.
This class represents the result of the API operations.
const NO_SIZE_CHECK
For addValue() and similar functions, do not check size while adding a value Don't use this unless yo...
const ADD_ON_TOP
For addValue(), setValue() and similar functions, if the value does not exist, add it as the first el...
static newWithMessage(ApiBase $module=null, $msg, $code=null, $data=null, $httpCode=0)
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
do that in ParserLimitReportFormat instead use this to modify the parameters of the image all existing parser cache entries will be invalid To avoid you ll need to handle that somehow(e.g. with the RejectParserCacheValue hook) because MediaWiki won 't do it for you. & $defaults also a ContextSource after deleting those rows but within the same transaction you ll probably need to make sure the header is varied on $request
Allows to change the fields on the form that will be generated $name