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