diff --git a/src/nodes/sub_workflow.php b/src/nodes/sub_workflow.php index a50bf24..5017f99 100644 --- a/src/nodes/sub_workflow.php +++ b/src/nodes/sub_workflow.php @@ -163,7 +163,16 @@ public function execute( ezcWorkflowExecution $execution ) { $subExecution = $execution->getSubExecution( $this->state ); $subExecution->workflow = $workflow; - $subExecution->resume( $execution->getVariables() ); + + $subVariables = []; + foreach ( $execution->getVariables() as $variableName => $data ) + { + if ( isset($this->configuration['variables']['in'][$variableName]) ) + { + $subVariables[$this->configuration['variables']['in'][$variableName]] = $data; + } + } + $subExecution->resume( $subVariables ); } } @@ -188,9 +197,10 @@ public function execute( ezcWorkflowExecution $execution ) } // Execution of Sub Workflow has been suspended. + $reverseInVariableMap = array_flip( $this->configuration['variables']['in'] ); foreach ( $subExecution->getWaitingFor() as $variableName => $data ) { - $execution->addWaitingFor( $this, $variableName, $data['condition'] ); + $execution->addWaitingFor( $this, $reverseInVariableMap[$variableName], $data['condition'] ); } return false; @@ -298,7 +308,9 @@ protected function passVariables( ezcWorkflowExecution $from, ezcWorkflowExecuti { foreach ( $variables as $fromName => $toName ) { - $to->setVariable( $toName, $from->getVariable( $fromName ) ); + if ( $from->hasVariable( $fromName ) ) { + $to->setVariable( $toName, $from->getVariable( $fromName ) ); + } } } }