From 9d0bbfdb5c45f237f7505fd1d8d2623e1ae67c9b Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap@edeveloper.nl> Date: Fri, 2 Mar 2018 15:19:10 +0100 Subject: [PATCH] moved mapping to the action provider --- Civi/FormProcessor/API/Provider.php | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Civi/FormProcessor/API/Provider.php b/Civi/FormProcessor/API/Provider.php index e46ad29..fe50e25 100644 --- a/Civi/FormProcessor/API/Provider.php +++ b/Civi/FormProcessor/API/Provider.php @@ -102,7 +102,9 @@ * @throws \API_Exception */ public function invoke($apiRequest) { - $actionProvider = form_processor_get_action_provider(); + $actionProvider = form_processor_get_action_provider(); + $parameterBag = $actionProvider->createParameterBag(); + $params = $apiRequest['params']; // Find the form processor @@ -112,6 +114,7 @@ } $formProcessor = reset($formProcessors);; + // Validate the parameters. foreach($formProcessor['inputs'] as $input) { if ($input['is_required'] && !isset($params[$input['name']])) { @@ -126,6 +129,7 @@ throw new \API_Exception($validator['validator']->getInvalidMessage().' (Parameter '.$input['name'].')'); } } + $parameterBag->setParameter('input.'.$input['name'], $params[$input['name']]); } // Execute the actions @@ -133,19 +137,11 @@ $output = array(); foreach($formProcessor['actions'] as $action) { // Create a parameter bag for the action - $parameterBag = $actionProvider->createParameterBag(); - foreach($action['mapping'] as $field => $mapping) { - $splittedMapping = explode('.', $mapping); - if ($splittedMapping[0] == 'input' && isset($params[$splittedMapping[1]])) { - $parameterBag->setParameter($field, $params[$splittedMapping[1]]); - } elseif ($splittedMapping[0] == 'action' && isset($actionParams[$splittedMapping[1]]) && isset($actionParams[$splittedMapping[1]][$splittedMapping[2]])) { - $parameterBag->setParameter($field, $actionParams[$splittedMapping[1]][$splittedMapping[2]]); - } - } - - $outputBag = $action['type']->execute($parameterBag); + $mappedParameterBag = $actionProvider->createdMappedParameterBag($parameterBag, $action['mapping']); + $outputBag = $action['type']->execute($mappedParameterBag); foreach($outputBag as $field => $value) { - $actionParams[$action['id']][$field] = $value; + $outputParameterName = 'action.'.$action['id'].'.'.$field; + $parameterBag->setParameter($outputParameterName, $value); $output[$action['title']][$field] = $value; } } -- GitLab