public function getWorkflowFormAction()
{
$params = $this->getParam('workflow', []);
$manager = $this->getWorkflowManager();
$workflow = $manager->getWorkflow();
//this is the default returned workflow data
$wfConfig = ['message' => '', 'available_actions' => [], 'available_states' => [], 'available_statuses' => [], 'notes_required' => false, 'additional_fields' => []];
try {
//get user selections
$this->selectedAction = empty($params['action']) ? null : $params['action'];
$this->newState = empty($params['newState']) ? null : $params['newState'];
$this->newStatus = empty($params['newStatus']) ? null : $params['newStatus'];
//always return the available actions
$wfConfig['available_actions'] = $this->getDecorator()->getAvailableActionsForForm($manager->getAvailableActions());
//if only one action select it by default
if (count($wfConfig['available_actions']) === 1) {
$this->selectedAction = $wfConfig['available_actions'][0]['value'];
} elseif ($this->selectedAction && !$workflow->isValidAction($this->selectedAction)) {
$this->selectedAction = null;
}
//if user has selected an action & it's valid
if ($this->selectedAction) {
//set the available states for this action
$wfConfig['available_states'] = $this->getDecorator()->getAvailableStatesForForm($manager->getAvailableStates($this->selectedAction));
//validate the new state
if (count($wfConfig['available_states']) === 1) {
$this->newState = $wfConfig['available_states'][0]['value'];
} elseif ($this->newState && !$workflow->isValidState($this->newState)) {
$this->newState = null;
}
//load the available statuses, notes and additional fields
if ($this->newState) {
$wfConfig['available_statuses'] = $this->getDecorator()->getAvailableStatusesForForm($manager->getAvailableStatuses($this->selectedAction, $this->newState));
// fetch additional fields, using the current status of the element
// to load additional fields that may be required
$wfConfig['notes_required'] = $manager->getNotesRequiredForAction($this->selectedAction);
$wfConfig['additional_fields'] = $manager->getAdditionalFieldsForAction($this->selectedAction);
}
}
} catch (\Exception $e) {
$wfConfig['message'] = $e->getMessage();
}
$this->_helper->json($wfConfig);
}