public function MaestroSpawnSubFlowTask::execute in Maestro 3.x
Same name and namespace in other branches
- 8.2 src/Plugin/EngineTasks/MaestroSpawnSubFlowTask.php \Drupal\maestro\Plugin\EngineTasks\MaestroSpawnSubFlowTask::execute()
Part of the ExecutableInterface Execution of the Sub Flow task will create a new process and push all selected parent variables to the newly spawned sub process. The variables pushed to the sub process will be prefixed with "maestro_parent_" and will also include a new variable named "parent_process_id" which will store the process ID of the parent. .
Overrides ExecutableInterface::execute
File
- src/
Plugin/ EngineTasks/ MaestroSpawnSubFlowTask.php, line 100
Class
- MaestroSpawnSubFlowTask
- Maestro Spawn Sub Flow Task Plugin.
Namespace
Drupal\maestro\Plugin\EngineTasksCode
public function execute() {
$templateMachineName = MaestroEngine::getTemplateIdFromProcessId($this->processID);
$taskMachineName = MaestroEngine::getTaskIdFromQueueId($this->queueID);
$task = MaestroEngine::getTemplateTaskByID($templateMachineName, $taskMachineName);
$spawnTemplate = $task['data']['maestro_template'];
$variables = [];
if (isset($task['data']['variables'])) {
$variables = $task['data']['variables'];
}
// Let's first start by adding in the new process ID.
$maestro = new MaestroEngine();
$newProcessID = $maestro
->newProcess($spawnTemplate);
if ($newProcessID !== FALSE) {
// first, create the parent process ID variable.
$values = [
'process_id' => $newProcessID,
'variable_name' => 'maestro_parent_process_id',
'variable_value' => $this->processID,
];
$new_var = \Drupal::entityTypeManager()
->getStorage('maestro_process_variables')
->create($values);
$new_var
->save();
if (!$new_var
->id()) {
// Throw a maestro exception
// completion should technically end here for this initiation.
throw new MaestroSaveEntityException('maestro_process_variable', $values['variable_name'] . ' failed saving during new process creation.');
}
foreach ($variables as $machine_name => $checked_value) {
if ($machine_name != '') {
// We now populate the new process with variables.
$parent_value = MaestroEngine::getProcessVariable($machine_name, $this->processID);
$values = [
'process_id' => $newProcessID,
'variable_name' => 'maestro_parent_' . $machine_name,
'variable_value' => $parent_value,
];
$new_var = \Drupal::entityTypeManager()
->getStorage('maestro_process_variables')
->create($values);
$new_var
->save();
if (!$new_var
->id()) {
// Throw a maestro exception
// completion should technically end here for this initiation.
throw new MaestroSaveEntityException('maestro_process_variable', $values['variable_name'] . ' failed saving during new process creation.');
}
$parent_value = '';
}
}
return TRUE;
}
else {
\Drupal::logger('maestro')
->error('Unable to spawn sub process. Process spawn returned an error.');
return FALSE;
}
}