From e4c51019eaa7ebc60ee24bccbf1f802b3f417bd3 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Fri, 20 Sep 2013 21:36:42 +0200 Subject: [PATCH] Version 3.3: Fix country checks; Fix arithmetic operators inside functions; add not operator --- Makefile | 2 +- rules_shipping.xml | 2 +- rules_shipping_advanced.php | 2 +- rules_shipping_advanced.xml | 2 +- rules_shipping_base.php | 27 ++++++++++++++++++--------- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 14371bb..70aac48 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ BASE=rules_shipping BASE_ADV=rules_shipping_advanced PLUGINTYPE=vmshipment ZIPBASE=opentools_vm2 -VERSION=3.2 +VERSION=3.3 PLUGINFILES=$(BASE).php $(BASE)_base.php $(BASE).script.php $(BASE).xml index.html PLUGINFILES_ADV=$(BASE_ADV).php $(BASE)_base.php $(BASE_ADV).script.php $(BASE_ADV).xml index.html diff --git a/rules_shipping.xml b/rules_shipping.xml index 2c97179..cf9ab5c 100644 --- a/rules_shipping.xml +++ b/rules_shipping.xml @@ -6,7 +6,7 @@ <authorUrl>http://www.open-tools.net</authorUrl> <copyright>Copyright (C) 2013, Reinhold Kainhofer</copyright> <license>GPL v3+</license> - <version>3.2</version> + <version>3.3</version> <description>VMSHIPMENT_RULES_DESC</description> <files> <filename plugin="rules_shipping">rules_shipping.php</filename> diff --git a/rules_shipping_advanced.php b/rules_shipping_advanced.php index a40fde6..5a1610a 100644 --- a/rules_shipping_advanced.php +++ b/rules_shipping_advanced.php @@ -283,7 +283,7 @@ class ShippingRule_Advanced extends ShippingRule { while (count($stack)>0) { // 4a) $op = array_pop ($stack); // The only right-associative operator is =, which we allow at most once! - if ($op == "(") { + if ($op == "(" || $op == "FUNCTION(") { // add it back to the stack! array_push ($stack, $op); break; diff --git a/rules_shipping_advanced.xml b/rules_shipping_advanced.xml index 3357816..4d14d95 100644 --- a/rules_shipping_advanced.xml +++ b/rules_shipping_advanced.xml @@ -6,7 +6,7 @@ <authorUrl>http://www.open-tools.net</authorUrl> <copyright>Copyright (C) 2013, Reinhold Kainhofer</copyright> <license>GPL v3+</license> - <version>3.2</version> + <version>3.3</version> <description>VMSHIPMENT_RULES_ADV_DESC</description> <files> <filename plugin="rules_shipping_advanced">rules_shipping_advanced.php</filename> diff --git a/rules_shipping_base.php b/rules_shipping_base.php index 57fb848..4161138 100644 --- a/rules_shipping_base.php +++ b/rules_shipping_base.php @@ -431,22 +431,26 @@ class plgVmShipmentRules_Shipping_Base extends vmPSPlugin { $countriesModel = VmModel::getModel('country'); if (isset($address['virtuemart_country_id'])) { + $data['countryid'] = $address['virtuemart_country_id']; $countriesModel->setId($address['virtuemart_country_id']); $country = $countriesModel->getData(); - $data['countryid'] = $country->virtuemart_country_id; - $data['country'] = $country->country_name; - $data['country2'] = $country->country_2_code; - $data['country3'] = $country->country_3_code; + if (isset($country)) { + $data['country'] = $country->country_name; + $data['country2'] = $country->country_2_code; + $data['country3'] = $country->country_3_code; + } } $statesModel = VmModel::getModel('state'); if (isset($address['virtuemart_state_id'])) { + $data['stateid'] = $address['virtuemart_state_id']; $statesModel->setId($address['virtuemart_state_id']); $state = $statesModel->getData(); - $data['stateid'] = $state->virtuemart_state_id; - $data['state'] = $state->state_name; - $data['state2'] = $state->state_2_code; - $data['state3'] = $state->state_3_code; + if (isset($state)) { + $data['state'] = $state->state_name; + $data['state2'] = $state->state_2_code; + $data['state3'] = $state->state_3_code; + } } return $data; @@ -483,6 +487,8 @@ class plgVmShipmentRules_Shipping_Base extends vmPSPlugin { 'pricewithouttax'=>$cart_prices['priceWithoutTax'], 'skus'=>$this->getOrderSKUs($cart), + // TODO: Add 'categories' variable + // TODO: Add 'vendors'variable // 'discountbeforetaxbill'=>$cart_prices['discountBeforeTaxBill'], ); @@ -769,6 +775,7 @@ class ShippingRule { case "ceil": return ceil ($args[0]); break; case "floor": return floor($args[0]); break; case "abs": return abs($args[0]); break; + case "not": return !$args[0]; break; } } // Functions with variable number of args @@ -874,8 +881,10 @@ class ShippingRule { function matches($vals) { // First, check the country, if any conditions are given: - if (count ($this->countries) > 0 && !in_array ($vals['countryid'], $this->countries)) + if (count ($this->countries) > 0 && !in_array ($vals['countryid'], $this->countries)) { +// vmdebug('Rule::matches: Country check failed: countryid='.print_r($vals['countryid'],1).', countries are: '.print_r($this->countries,1).'...'); return False; + } foreach ($this->conditions as $c) { // All conditions have to match! -- GitLab