49 $this->source = get_class( $module );
57 $continue = $request->getVal(
'continue',
'' );
58 if ( $continue !==
'' ) {
59 $continue = explode(
'||', $continue );
60 if ( count( $continue ) !== 2 ) {
61 throw ApiUsageException::newWithMessage( $module->
getMain(),
'apierror-badcontinue' );
63 $this->generatorDone = ( $continue[0] ===
'-' );
64 $skip = explode(
'|', $continue[1] );
65 if ( !$this->generatorDone ) {
66 $params = explode(
'|', $continue[0] );
68 $this->generatorParams = array_intersect_key(
69 $request->getValues(),
82 if ( in_array( $name, $skip,
true ) ) {
83 $this->allModules[$name] =
false;
87 $this->allModules[$name] = $module;
113 return array_values( array_filter( $this->allModules ) );
125 if ( !isset( $this->allModules[$name] ) ) {
126 throw new UnexpectedValueException(
127 "Module '$name' called " . __METHOD__ .
128 ' but was not passed to ' . __CLASS__ .
'::__construct'
131 if ( !$this->allModules[$name] ) {
132 throw new UnexpectedValueException(
133 "Module '$name' was not supposed to have been executed, but " .
134 'it was executed anyway'
138 if ( is_array( $paramValue ) ) {
139 $paramValue = implode(
'|', $paramValue );
141 $this->continuationData[$name][$paramName] = $paramValue;
158 if ( is_array( $paramValue ) ) {
159 $paramValue = implode(
'|', $paramValue );
161 $this->generatorNonContinuationData[$name][$paramName] = $paramValue;
173 if ( is_array( $paramValue ) ) {
174 $paramValue = implode(
'|', $paramValue );
176 $this->generatorContinuationData[$name][$paramName] = $paramValue;
184 return array_merge_recursive( $this->continuationData, $this->generatorContinuationData );
202 $batchcomplete =
false;
204 $finishedModules = array_diff(
205 array_keys( $this->allModules ),
206 array_keys( $this->continuationData )
210 $continuationData = array_diff_key( $this->continuationData, $this->generatedModules );
216 $continuationData = array_intersect_key( $this->continuationData, $this->generatedModules );
224 foreach ( $this->generatorNonContinuationData as $kvp ) {
230 } elseif ( $this->generatorContinuationData ) {
235 foreach ( $this->generatorContinuationData as $kvp ) {
239 $finishedModules = array_diff( $finishedModules, $this->generatedModules );
241 $batchcomplete =
true;
244 $generatorKeys =
'-';
245 $batchcomplete =
true;
250 if ( $data || $generatorKeys !==
'-' ) {
251 $data[
'continue'] = $generatorKeys .
'||' . implode(
'|', $finishedModules );
254 return [ $data, $batchcomplete ];
264 $result->
addValue(
null,
'continue', $data,
265 ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
267 if ( $batchcomplete ) {
268 $result->
addValue(
null,
'batchcomplete',
true,
269 ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
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( $options=[])
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?
array[] $continuationData
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.
addValue( $path, $name, $value, $flags=0)
Add value to the output data at the given path.