From 1374ed34301e13204f81828678c18c1c964a8fed Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap@edeveloper.nl>
Date: Wed, 7 Mar 2018 19:46:53 +0100
Subject: [PATCH] did some refactoring

---
 Civi/FormProcessor/API/Provider.php           | 21 +++++++++--
 Civi/FormProcessor/DataBag.php                | 36 ++++++++++++++-----
 .../OutputHandler/FormatOutput.php            |  2 +-
 3 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/Civi/FormProcessor/API/Provider.php b/Civi/FormProcessor/API/Provider.php
index e2e364f..9840c06 100644
--- a/Civi/FormProcessor/API/Provider.php
+++ b/Civi/FormProcessor/API/Provider.php
@@ -144,8 +144,7 @@
 			$objAction->copyValues($action);
 			
 			// Create a parameter bag for the action
-			$parameterBag = $dataBag->convertToActionProviderParameterBag($actionProvider);
-			$mappedParameterBag = $actionProvider->createdMappedParameterBag($parameterBag, $action['mapping']);
+			$mappedParameterBag = $this->convertDataBagToMappedParameterBag($dataBag, $action['mapping'], $actionProvider);
 			$outputBag = $action['type']->execute($mappedParameterBag);
 			// Add the output of the action to the data bag of this action.
 			$dataBag->setActionDataFromActionProviderParameterBag($objAction, $outputBag);
@@ -154,6 +153,24 @@
 		return $formProcessor['output_handler']->handle($dataBag);
   }
 
+	/**
+	 * Converts a DataBag object to a mapped parameterBag.
+	 * 
+	 * @param DataBag $dataBag
+	 * @param array $mapping
+	 * @param $actionProvider
+	 * @return ParameterBag;
+	 */
+	protected function convertDataBagToMappedParameterBag(DataBag $dataBag, $mapping, $actionProvider) {
+		$parameterBag = $actionProvider->createParameterBag();
+		$fields = $dataBag->getAllAliases();
+		foreach($fields as $field) {
+			$parameterBag->setParameter($field, $dataBag->getDataByAlias($field));
+		}
+		$mappedParameterBag = $actionProvider->createdMappedParameterBag($parameterBag, $mapping);
+		return $mappedParameterBag;
+	}
+
   /**
    * @param int $version
    *   API version.
diff --git a/Civi/FormProcessor/DataBag.php b/Civi/FormProcessor/DataBag.php
index 6e34560..194dc50 100644
--- a/Civi/FormProcessor/DataBag.php
+++ b/Civi/FormProcessor/DataBag.php
@@ -107,7 +107,10 @@ class DataBag {
 	public function getDataByAlias($alias) {
 		$splitted_alias = explode(".", $alias);
 		if ($splitted_alias[0] == 'input') {
-			return $this->inputData[$splitted_alias[1]];
+			$input = $this->getInputByName($splitted_alias[1]);
+			if ($input) {
+				return $this->inputData[$input->id];
+			}
 		} elseif ($splitted_alias[0] == 'action') {
 			return $this->actionData[$splitted_alias[1]][$splitted_alias[2]];
 		}
@@ -115,20 +118,37 @@ class DataBag {
 	}
 	
 	/**
-	 * Convert this data bag to the action provider parameter bag.
+	 * Returns all the aliases for data fields.
+	 * 
+	 * An alias looks like:
+	 *   input.email
+	 *   action.3.contact_id
+	 * 
+	 * @return array.
 	 */
-	public function convertToActionProviderParameterBag($actionProvider) {
-		$parameterBag = $actionProvider->createParameterBag();
+	public function getAllAliases() {
+		$aliases = array();
 		foreach($this->inputs as $input) {
-			$parameterBag->setParameter('input.'.$input->name, $this->inputData[$input->id]);	
+			$aliases[] = 'input.'.$input->name;
 		}
 		foreach($this->actions as $action) {
 			foreach($this->actionData[$action->id] as $field => $value) {
-				$outputParameterName = 'action.'.$action->id.'.'.$field;
-				$parameterBag->setParameter($outputParameterName, $value);	
+				$aliases[] = 'action.'.$action->id.'.'.$field;	
 			}
 		}
-		return $parameterBag;
+		return $aliases;
+	}
+	
+	/**
+	 * Returns the input object by its name.
+	 */
+	private function getInputByName($name) {
+		foreach($this->inputs as $input) {
+			if ($input->name == $name) {
+				return $input;
+			}
+		}
+		return null;
 	}
 	
 }
diff --git a/Civi/FormProcessor/OutputHandler/FormatOutput.php b/Civi/FormProcessor/OutputHandler/FormatOutput.php
index 2fc8f21..17065a4 100644
--- a/Civi/FormProcessor/OutputHandler/FormatOutput.php
+++ b/Civi/FormProcessor/OutputHandler/FormatOutput.php
@@ -71,7 +71,7 @@
 	 * @return string
 	 */
 	public function getLabel() {
-		return E::ts('Formal output');
+		return E::ts('Formatted output');
 	}
 	
  }
\ No newline at end of file
-- 
GitLab