From 92d8fcadc0f12797b4f4f66d329d3ec7828722e4 Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Sun, 7 Feb 2016 00:16:22 +0100
Subject: [PATCH] Implement convert_from_currency and convet_to_currency
 functions

---
 .../en-GB.plg_vmshipment_rules_shipping.ini   |  1 +
 rules_shipping_framework_joomla.php           | 44 +++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini b/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini
index 8e773d2..703457a 100755
--- a/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini
+++ b/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini
@@ -63,6 +63,7 @@ OTSHIPMENT_RULES_NOSHIPPING_MESSAGE="%s"
 OTSHIPMENT_RULES_UNKNOWN_TYPE="Unknown rule type '%s' encountered for rule '%s'"
 OTSHIPMENT_RULES_SCOPING_UNKNOWN="Unknown scoping function 'evaluate_for_%s' encountered in rule '%s'"
 
+OTSHIPMENT_RULES_CURRENCY_CONVERSION_FAILED="Unable to find currency '%s' used in rule '%s'"
 
 ORSHIPMENT_RULES_CUSTOMFUNCTIONS_NOARRAY="Definition of custom functions (returned by a vmshipmentrules plugin) is not a proper array. Ignoring."
 OTSHIPMENT_RULES_CUSTOMFUNCTIONS_ALREADY_DEFINED="Custom function %s already defined. Ignoring this definition and using previous one."
diff --git a/rules_shipping_framework_joomla.php b/rules_shipping_framework_joomla.php
index 8975a46..62cb0ef 100644
--- a/rules_shipping_framework_joomla.php
+++ b/rules_shipping_framework_joomla.php
@@ -38,6 +38,8 @@ class RulesShippingFrameworkJoomla extends RulesShippingFramework {
 		JPluginHelper::importPlugin('vmshipmentrules');
 		$dispatcher = JDispatcher::getInstance();
 		$custfuncdefs = $dispatcher->trigger('onVmShippingRulesRegisterCustomFunctions',array());
+		$custfuncdefs['convertfromcurrency'] = array($this, 'convert_from_currency');
+		$custfuncdefs['converttocurrency'] = array($this, 'convert_to_currency');
 		
 		return $custfuncdefs;
 	}
@@ -391,4 +393,46 @@ class RulesShippingFrameworkJoomla extends RulesShippingFramework {
 		return $result;
 	}
 	
+	
+	/** Currency conversion function
+	 */
+	 
+	protected function getCurrencyDisplay($curr) {
+		if (!class_exists('ShopFunctions'))
+			require(VMPATH_ADMIN . '/' . 'helpers' . '/' . 'shopfunctions.php');
+		if (is_string($curr)) {
+			$currID = ShopFunctions::getCurrencyIDByName($curr);
+		} elseif (is_numeric($curr)) {
+			$currID = $curr;
+		} else {
+			$this->printWarning(JText::sprintf('OTSHIPMENT_RULES_CURRENCY_CONVERSION_FAILED', $curr, $rule->rulestring));
+			$currID = 0;
+		}
+		
+		return CurrencyDisplay::getInstance($currID);
+	}
+	
+	public function convert_from_currency($args, $rule) {
+		$value = $args[0];
+		$curr = $args[1];
+		$currency = $this->getCurrencyDisplay($curr);
+		if ($currency) {
+			return $currency->convertCurrencyTo($curr, $value, TRUE);
+		} else {
+			$this->printWarning(JText::sprintf('OTSHIPMENT_RULES_CURRENCY_CONVERSION_FAILED', $curr, $rule->rulestring));
+			return 0;
+		}
+	}
+	
+	public function convert_to_currency($args, $rule) {
+		$value = $args[0];
+		$curr = $args[1];
+		$currency = $this->getCurrencyDisplay($curr);
+		if ($currency) {
+			return $currency->convertCurrencyTo($curr, $value, FALSE);
+		} else {
+			$this->printWarning(JText::sprintf('OTSHIPMENT_RULES_CURRENCY_CONVERSION_FAILED', $curr, $rule->rulestring));
+			return 0;
+		}
+	}
 }
-- 
GitLab