56 $this->source = get_class( $module );
64 $continue = $request->getVal(
'continue',
'' );
65 if ( $continue !==
'' ) {
66 $continue = explode(
'||', $continue );
67 if ( count( $continue ) !== 2 ) {
68 throw ApiUsageException::newWithMessage( $module->
getMain(),
'apierror-badcontinue' );
70 $this->generatorDone = ( $continue[0] ===
'-' );
71 $skip = explode(
'|', $continue[1] );
72 if ( !$this->generatorDone ) {
73 $params = explode(
'|', $continue[0] );
75 $this->generatorParams = array_intersect_key(
76 $request->getValues(),
77 array_fill_keys( $params,
true )
89 if ( in_array( $name, $skip,
true ) ) {
90 $this->allModules[$name] =
false;
94 $this->allModules[$name] = $module;
119 return array_values( array_filter( $this->allModules ) );
131 if ( !isset( $this->allModules[$name] ) ) {
132 throw new UnexpectedValueException(
133 "Module '$name' called " . __METHOD__ .
134 ' but was not passed to ' . __CLASS__ .
'::__construct'
137 if ( !$this->allModules[$name] ) {
138 throw new UnexpectedValueException(
139 "Module '$name' was not supposed to have been executed, but " .
140 'it was executed anyway'
144 if ( is_array( $paramValue ) ) {
145 $paramValue = implode(
'|', $paramValue );
147 $this->continuationData[$name][$paramName] = $paramValue;
164 if ( is_array( $paramValue ) ) {
165 $paramValue = implode(
'|', $paramValue );
167 $this->generatorNonContinuationData[$name][$paramName] = $paramValue;
179 if ( is_array( $paramValue ) ) {
180 $paramValue = implode(
'|', $paramValue );
182 $this->generatorContinuationData[$name][$paramName] = $paramValue;
190 return array_merge_recursive( $this->continuationData, $this->generatorContinuationData );
208 $batchcomplete =
false;
210 $finishedModules = array_diff(
211 array_keys( $this->allModules ),
212 array_keys( $this->continuationData )
216 $continuationData = array_diff_key( $this->continuationData, $this->generatedModules );
222 $continuationData = array_intersect_key( $this->continuationData, $this->generatedModules );
230 foreach ( $this->generatorNonContinuationData as $kvp ) {
237 } elseif ( $this->generatorContinuationData ) {
242 foreach ( $this->generatorContinuationData as $kvp ) {
246 $finishedModules = array_diff( $finishedModules, $this->generatedModules );
248 $batchcomplete =
true;
251 $generatorKeys =
'-';
252 $batchcomplete =
true;
257 if ( $data || $generatorKeys !==
'-' ) {
258 $data[
'continue'] = $generatorKeys .
'||' . implode(
'|', $finishedModules );
261 return [ $data, $batchcomplete ];
271 $result->
addValue(
null,
'continue', $data,
272 ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
274 if ( $batchcomplete ) {
275 $result->
addValue(
null,
'batchcomplete',
true,
276 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.
array[] $continuationData
addGeneratorContinueParam(ApiBase $module, $paramName, $paramValue)
Set the continuation parameter for the generator module.
array[] $generatorContinuationData
setContinuationIntoResult(ApiResult $result)
Store the continuation data into the result.
array[] $generatorNonContinuationData
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=[])
ApiBase false[] $allModules
string[] $generatedModules
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.