/** * Update the transitions for a given action * * @param array $actionTemplate * @param WorkflowAction $action * * @return array */ protected function updateActionTransitions($actionTemplate, $action) { $transitions = array(); if (isset($actionTemplate['transitions']) && is_array($actionTemplate['transitions'])) { $existing = $action->Transitions(); $transitionMap = array(); foreach ($existing as $transition) { $transitionMap[$transition->Title] = $transition; } foreach ($actionTemplate['transitions'] as $transitionName => $transitionTemplate) { $target = $transitionTemplate; if (is_array($transitionTemplate)) { $target = $transitionTemplate['to']; } if (isset($transitionMap[$transitionName])) { $transition = $transitionMap[$transitionName]; } else { $transition = WorkflowTransition::create(); } $transition->Title = $transitionName; $transition->ActionID = $action->ID; // we don't have the NextAction yet other than the target name, so we store that against // the transition and do a second pass later on to match things up $transition->Target = $target; $transitions[] = $transition; } } return $transitions; }