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(
68 $request->getValues(),
80 $name = $module->getModuleName();
81 if ( in_array( $name, $skip,
true ) ) {
82 $this->allModules[$name] =
false;
84 $module->extractRequestParams();
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 );
225 foreach ( $this->generatorNonContinuationData as $kvp ) {
231 } elseif ( $this->generatorContinuationData ) {
236 foreach ( $this->generatorContinuationData as $kvp ) {
240 $finishedModules = array_diff( $finishedModules, $this->generatedModules );
242 $batchcomplete =
true;
245 $generatorKeys =
'-';
246 $batchcomplete =
true;
251 if ( $data || $generatorKeys !==
'-' ) {
252 $data[
'continue'] = $generatorKeys .
'||' . implode(
'|', $finishedModules );
255 return [ $data, $batchcomplete ];
265 $result->
addValue(
null,
'continue', $data,
268 if ( $batchcomplete ) {
269 $result->
addValue(
null,
'batchcomplete',
true,