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 8e773d2f55ce18a3798d193a1a3255e8a98c9045..703457a3276feb606d35f77bfd197b48750c4d4f 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 8975a4620617cb204de6427d84130ee94591d0df..62cb0eff29b3050e870cad641eb2d161dc900693 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; + } + } }