49 $this->source = get_class( $module );
57 $continue = $request->getVal(
'continue',
'' );
58 if ( $continue !==
'' ) {
59 $continue = explode(
'||', $continue );
60 if ( count( $continue ) !== 2 ) {
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(),
81 $name = $module->getModuleName();
82 if ( in_array( $name, $skip,
true ) ) {
83 $this->allModules[$name] =
false;
85 $module->extractRequestParams();
87 $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,