From 416b2392750ac9d47af40f8910dec72f6bee38c3 Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Fri, 22 Mar 2013 00:42:10 +0100
Subject: [PATCH] Version 2.2: Add length unit conversions; add tilde operator
 to check variable start; Fix chained comparisons

---
 Makefile                                      |   2 +-
 elements/vmlengthunit.php                     |  64 +++++++++++
 .../en-GB.plg_vmshipment_rules_shipping.ini   |   3 +
 ...hipment_rules_shipping_advanced_v2.2.0.zip | Bin 0 -> 20271 bytes
 .../plg_vmshipment_rules_shipping_v2.2.0.zip  | Bin 0 -> 17106 bytes
 rules_shipping.xml                            |  10 +-
 rules_shipping_advanced.php                   |  43 +++-----
 rules_shipping_advanced.xml                   |   9 +-
 rules_shipping_base.php                       | 103 ++++++++++++++----
 9 files changed, 180 insertions(+), 54 deletions(-)
 create mode 100644 elements/vmlengthunit.php
 create mode 100644 releases/plg_vmshipment_rules_shipping_advanced_v2.2.0.zip
 create mode 100644 releases/plg_vmshipment_rules_shipping_v2.2.0.zip

diff --git a/Makefile b/Makefile
index f11c600..f5a38f7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 BASE=rules_shipping
 BASE_ADV=rules_shipping_advanced
 PLUGINTYPE=vmshipment
-VERSION=2.1.3
+VERSION=2.2.0
 
 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/elements/vmlengthunit.php b/elements/vmlengthunit.php
new file mode 100644
index 0000000..b318602
--- /dev/null
+++ b/elements/vmlengthunit.php
@@ -0,0 +1,64 @@
+<?php
+defined('_JEXEC') or die();
+/**
+ *
+ * @package	VirtueMart
+ * @subpackage Plugins  - Elements
+ * @author Valérie Isaksen, Reinhold Kainhofer
+ * @link http://www.virtuemart.net
+ * @copyright Copyright (c) 2004 - 2011 VirtueMart Team. All rights reserved.
+ * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
+ * VirtueMart is free software. This version may have been modified pursuant
+ * to the GNU General Public License, and as distributed it includes or
+ * is derivative of works licensed under the GNU General Public License or
+ * other free or open source software licenses.
+ * @version $Id: $
+ */
+/*
+ * This class is used by VirtueMart Payment or Shipment Plugins
+ * which uses JParameter
+ * So It should be an extension of JElement
+ * Those plugins cannot be configured througth the Plugin Manager anyway.
+ */
+ 
+ 
+// print "<h3>vmlengthunit.php LOADING</h3>";
+
+if (!class_exists('VmConfig'))
+    require(JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php');
+
+if (!class_exists('ShopFunctions'))
+    require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'shopfunctions.php');
+
+class JElementVmLengthUnit extends JElement {
+
+    /**
+     * Element name
+     * @access	protected
+     * @var		string
+     */
+    var $_name = 'LengthUnit';
+
+    function fetchElement($nm, $value, &$node, $control_name) {
+		// For now, this is a modified copy of ShopFunctions::renderLWHUnitList to use JHTML::_ instead of VmHTML 
+		// (which would NOT remove the [ and ] from the ID and thus break the javascript magic!)
+		if (!class_exists ('VmHTML')) {
+			require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php');
+		}
+		$name = $control_name . '[' . $nm . ']';
+
+		$lwh_unit_default = array('M' => JText::_ ('COM_VIRTUEMART_UNIT_NAME_M')
+		, 'CM'                        => JText::_ ('COM_VIRTUEMART_UNIT_NAME_CM')
+		, 'MM'                        => JText::_ ('COM_VIRTUEMART_UNIT_NAME_MM')
+		, 'YD'                        => JText::_ ('COM_VIRTUEMART_UNIT_NAME_YARD')
+		, 'FT'                        => JText::_ ('COM_VIRTUEMART_UNIT_NAME_FOOT')
+		, 'IN'                        => JText::_ ('COM_VIRTUEMART_UNIT_NAME_INCH')
+		);
+		foreach ($lwh_unit_default as  $key => $value) {
+			$lu_list[] = JHTML::_ ('select.option', $key, $value, $name);
+		}
+		$listHTML = JHTML::_ ('Select.genericlist', $lu_list, $name, '', $name, 'text', $selected);
+		return $listHTML;
+    }
+
+}
\ No newline at end of file
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 62e7d12..ae6f35a 100644
--- a/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini
+++ b/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini
@@ -13,6 +13,9 @@ VMSHIPMENT_RULES_PLUGIN_ADV="<b>Shipment based on general rules (weight, product
 VMSHIPMENT_RULES_HELP="<div style='background: #DDDDDD; padding:5px; margin:3px;'><h2>Overview of the Rules Syntax</h2><ul><li>Each line contains one rule consisting of several <b>conditions and assignments in arbitrary order and separated by semicolons</b>. </li><li>The <b>first matching rule is used</b> to calculate the shipping costs.</li><li>All rule parts with <b>comparison operators (&lt;, &lt;=, =&lt;, ==, !=, &lt;&gt;, &gt;=, =&gt;, &gt;)</b> are conditions.</li><li> Supported <b>variables (case-insensitive)</b>: <b><tt>Amount</tt></b>, <b><tt>Weight</tt></b>, <b><tt>ZIP</tt></b>, <b><tt>Products</tt></b> (number of different products), <b><tt>Articles</tt></b> (counted with quantity), <b><tt>Volume</tt></b> (total volume of the order) and <b><tt>MinVolume</tt>, <tt>MinLength</tt>, <tt>MinWidth</tt>, <tt>MinHeight</tt></b> as well as the same variables with <tt>Max</tt> instead of <tt>Min</tt>.</li><li>A condition can consist of multiple chained comparisons.</li><li>All rule parts of the form <b><tt>[VARIABLE]=VALUE</tt> are assignments</b>, with <tt>[VARIABLE]</tt> being one of <b><tt>Name</tt></b> (optional name of the rule, displayed in the cart and invoice), <b><tt>Shipping</tt></b> (shipping cost without tax if the rule matches) and <b><tt>ShippingWithTax</tt></b> (shipping cost including taxes if the rule matches). The <tt>Shipping=</tt> can be left out (<tt>ShippingWithTax=</tt> can not be left out). I.e. a rule part consisting only of a numerical value is understood as net shipping cost without tax.</li></ul><p>EXAMPLE: A rule named &quot;Europe&quot; that sets shipping costs of 4.50 for order amounts from 50 to less than 100, and free shipping from 100€ on would be:</p><blockquote><tt>Name=Europe; 50&lt;=Amount&lt;100; Shipping=4.50<br>Name=Free Shipping; 100&lt;= Amount; 0</tt></blockquote></div>"
 VMSHIPMENT_RULES_HELP_ADV="<div style='background: #DDDDDD; padding:5px; margin:3px;'><h2>Overview of the Rules Syntax</h2><ul><li>Each line contains one rule consisting of several <b>conditions and assignments in arbitrary order and separated by semicolons</b>. </li><li>The <b>first matching rule is used</b> to calculate the shipping costs.</li><li>All rule parts with <b>comparison operators (&lt;, &lt;=, =&lt;, ==, !=, &lt;&gt;, &gt;=, =&gt;, &gt;)</b> are conditions.</li><li> Supported <b>variables (case-insensitive)</b>: <b><tt>Amount</tt></b>, <b><tt>Weight</tt></b>, <b><tt>ZIP</tt></b>, <b><tt>Products</tt></b> (number of different products), <b><tt>Articles</tt></b> (counted with quantity), <b><tt>Volume</tt></b> (total volume of the order) and <b><tt>MinVolume</tt>, <tt>MinLength</tt>, <tt>MinWidth</tt>, <tt>MinHeight</tt></b> as well as the same variables with <tt>Max</tt> instead of <tt>Min</tt>.</li><li>A condition can consist of multiple chained comparisons.</li><li>All rule parts of the form <b><tt>[VARIABLE]=VALUE</tt> are assignments</b>, with <tt>[VARIABLE]</tt> being one of <b><tt>Name</tt></b> (optional name of the rule, displayed in the cart and invoice), <b><tt>Shipping</tt></b> (shipping cost without tax if the rule matches) and <b><tt>ShippingWithTax</tt></b> (shipping cost including taxes if the rule matches). The <tt>Shipping=</tt> can be left out (<tt>ShippingWithTax=</tt> can not be left out). I.e. a rule part consisting only of a numerical value is understood as net shipping cost without tax.</li><li>In the advanced version, all expressions (conditions and shipping costs) may contain <b>arbitrary basic arithmetic expressions (+, -, *, /, %, ^ and parentheses)</b> of the above variables.</li></ul><p>EXAMPLE: A rule named &quot;Europe&quot; that sets shipping costs of 5€ plus 1.50€ per article for order amounts from 50 to less than 100, and free shipping from 100€ on would be:</p><blockquote><tt>Name=Europe; 50&lt;=Amount&lt;100; Shipping=5+1.50*Articles<br>Name=Free Shipping; 100&lt;= Amount; 0</blockquote></div>"
 
+VMSHIPMENT_RULES_LENGTH_UNIT="Length Unit"
+VMSHIPMENT_RULES_LENGTH_UNIT_DESC="The length unit, in which the length, width and heights are given, and from which the volume is calculated."
+
 VMSHIPMENT_RULES_COUNTRIES1_LABEL="<b>Rules for country set 1</b>"
 VMSHIPMENT_RULES_COUNTRIES2_LABEL="<b>Rules for country set 2</b>"
 VMSHIPMENT_RULES_COUNTRIES3_LABEL="<b>Rules for country set 3</b>"
diff --git a/releases/plg_vmshipment_rules_shipping_advanced_v2.2.0.zip b/releases/plg_vmshipment_rules_shipping_advanced_v2.2.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..778fdd8a4396cfc9269debc3b8a7c5b540263f6d
GIT binary patch
literal 20271
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
M@Ub#5aC?Dx0GD+`dH?_b

literal 0
HcmV?d00001

diff --git a/releases/plg_vmshipment_rules_shipping_v2.2.0.zip b/releases/plg_vmshipment_rules_shipping_v2.2.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..063e5a859c48623291dd1bb79b9d9b494c5b896c
GIT binary patch
literal 17106
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

literal 0
HcmV?d00001

diff --git a/rules_shipping.xml b/rules_shipping.xml
index 811fa85..5625315 100644
--- a/rules_shipping.xml
+++ b/rules_shipping.xml
@@ -6,7 +6,7 @@
     <authorUrl>http://www.kainhofer.com</authorUrl>
     <copyright>Copyright (C) 2013, Reinhold Kainhofer</copyright>
     <license>GPL v3+</license>
-    <version>2.1.3</version>
+    <version>2.2.0</version>
     <description>VMSHIPMENT_RULES_DESC</description>
     <files>
 	<filename plugin="rules_shipping">rules_shipping.php</filename>
@@ -21,9 +21,12 @@
     <scriptfile>rules_shipping.script.php</scriptfile>
 
 
-    <params  addpath="/administrator/components/com_virtuemart/elements"/>
 
-    <params addpath="/plugins/vmshipment/rules_shipping_advanced/elements/">
+    <params addpath="/administrator/components/com_virtuemart/elements" />
+    <params addpath="/plugins/vmshipment/rules_shipping/rules_shipping/elements" />
+    <params addpath="/plugins/vmshipment/rules_shipping/elements" />
+
+    <params>
 	<param type="vmjpluginwarning" />
 	<param type="spacer" default='VMSHIPMENT_RULES_PLUGIN' level="level1" />
 	<param	name="shipment_logos" type="vmfiles" label="VMSHIPMENT_WEIGHT_COUNTRIES_LOGOS"
@@ -32,6 +35,7 @@
              	default="default" hide_default="1" hide_none="1"
              	stripext="0"   exclude="^_" />
 	<param name="weight_unit" type="vmweightunit" size="10" default="" label="VMSHIPMENT_WEIGHT_COUNTRIES_WEIGHT_UNIT" description="VMSHIPMENT_WEIGHT_COUNTRIES_WEIGHT_UNIT_DESC"/>
+	<param name="length_unit" type="vmlengthunit" size="10" default="" label="VMSHIPMENT_RULES_LENGTH_UNIT" description="VMSHIPMENT_RULES_LENGTH_UNIT_DESC"/>
 
 	<param type="rklabel" default='VMSHIPMENT_RULES_HELP' />
 
diff --git a/rules_shipping_advanced.php b/rules_shipping_advanced.php
index 6d00afa..14dd0e7 100644
--- a/rules_shipping_advanced.php
+++ b/rules_shipping_advanced.php
@@ -48,20 +48,6 @@ class plgVmShipmentRules_Shipping_Advanced extends plgVmShipmentRules_Shipping_B
 }
 
 
-// is_comparison: if the expression $o is a (possibly chained) comparison consisting of operators in $ops, 
-// return the last term of hte comparison; null otherwise
-function is_comparison ($o, $ops) {
-	if (!is_array($o)) 
-		return null;
-	if (in_array($o[0], $ops))
-		return $o[2];
-	$o2comp = is_comparison($o[2], $ops);
-	if (trim($o[0])=='AND' && !is_null (is_comparison($o[1], $ops)) && !is_null($o2comp))
-		return $o2comp;
-	return null;
-}
-
-
 /** Extend the shipping rules by allowing arbitrary mathematical expressions
  */
 class ShippingRule_Advanced extends ShippingRule {
@@ -70,7 +56,7 @@ class ShippingRule_Advanced extends ShippingRule {
 		"*"  => 60, "/"  => 60, "%"  => 60, 
 		"+"  => 50, "-"  => 50, 
 		"<"  => 40, "<=" => 40, ">"  => 40, ">=" => 40, "=>" => 40, "=<" => 40,
-		"==" => 40, "!=" => 40, "<>" => 40,
+		"==" => 40, "!=" => 40, "<>" => 40, "~" => 40,
 		"&&"  => 21, " AND " => 21, "AND" => 21,
 		" OR "  => 20, "OR" => 20,
 		"="  => 10,
@@ -86,7 +72,7 @@ class ShippingRule_Advanced extends ShippingRule {
 		$str_re = '/("(?:\\"|[^"])*"|\'(?:\\\'|[^\'])*\')/';
 		$strings = preg_split($str_re, $expression, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
 		// Then split all other parts of the expression at the operators
-		$op_re = ':\s*( OR |&&| AND |<=|=>|>=|=>|<>|!=|==|<|=|>|\+|-|\*|/|%|\(|\)|\^)\s*:';
+		$op_re = ':\s*( OR |&&| AND |<=|=>|>=|=>|<>|!=|==|<|=|>|~|\+|-|\*|/|%|\(|\)|\^)\s*:';
 		$atoms = array();
 		foreach ($strings as $s) {
 			if (preg_match($str_re, $s)) {
@@ -155,8 +141,9 @@ class ShippingRule_Advanced extends ShippingRule {
 		$atoms = $this->tokenize_expression ($rulepart);
 		
 		// Any of these indicate a comparison and thus a condition:
-		$comparison_ops = array('<', '<=', '=<', '<>', '!=', '==', '>', '>=', '=>', ' OR ', 'OR', 'AND', ' AND ', '&&');
-		$is_comparison = false;
+		$condition_ops = array('<', '<=', '=<', '<>', '!=', '==', '>', '>=', '=>', '~', ' OR ', 'OR', 'AND', ' AND ', '&&');
+		$comparison_ops = array('<', '<=', '=<', '<>', '!=', '==', '>', '>=', '=>', '~');
+		$is_condition = false;
 		$is_assignment = false;
 		
 		if (count($atoms)==1) return $atoms[0];
@@ -185,7 +172,7 @@ class ShippingRule_Advanced extends ShippingRule {
 				// For operators, pop operators from the stack until you reach an opening parenthesis, 
 				// an operator of lower precedence, or a right associative symbol of equal precedence. 
 				$prec = $this->operators[$a];
-				$is_comparison |= in_array($a, $comparison_ops);
+				$is_condition |= in_array($a, $condition_ops);
 				$is_assignment |= ($a == "=");
 				
 				while (count($stack)>0) { // 4a)
@@ -243,12 +230,16 @@ class ShippingRule_Advanced extends ShippingRule {
 				}
 				$o2 = array_pop($stack); // 4a)
 				$o1 = array_pop($stack);
-				// TODO: Special-case chained comparisons: if e is a comparison, and operator(o1) is also a comparison, 
-				//       insert AND(o1, e(arg2(o1), o2)) instead of e(o1, o1)
-				// is_comparison nicely returns the last term of the (possibly chained) comparison, null otherwise
-				$o1comp = is_comparison($o1, $comparison_ops);
-				if (in_array ($e, $comparison_ops) && !is_null($o1comp) ) {
-					$op = array ('AND', $o1, array($e, $o1comp, $o2));
+				// Special-case chained comparisons: if e is a comparison, and operator(o1) is also a comparison, 
+				// insert the arguments to the existing comparison instead of creating a new one
+				if (in_array ($e, $comparison_ops)) {
+					if ($o1[0]=='comparison') {
+						$op = $o1;
+						// Append the new comparison to the existing one
+						array_push($op, $e, $o2);
+					} else {
+						$op = array ('comparison', $o1, $e, $o2);
+					}
 				} else {
 					$op = array ($e, $o1, $o2); // 4b)
 				}
@@ -262,7 +253,7 @@ class ShippingRule_Advanced extends ShippingRule {
 		}
 		$res = array_pop($stack); // 5)
 		
-		if ($is_comparison) { // Comparisons are conditions
+		if ($is_condition) { // Comparisons are conditions
 			$this->conditions[] = $res;
 		} elseif ($is_assignment) {
 
diff --git a/rules_shipping_advanced.xml b/rules_shipping_advanced.xml
index 49db861..ca9a10d 100644
--- a/rules_shipping_advanced.xml
+++ b/rules_shipping_advanced.xml
@@ -6,7 +6,7 @@
     <authorUrl>http://www.kainhofer.com</authorUrl>
     <copyright>Copyright (C) 2013, Reinhold Kainhofer</copyright>
     <license>GPL v3+</license>
-    <version>2.1.3</version>
+    <version>2.2.0</version>
     <description>VMSHIPMENT_RULES_ADV_DESC</description>
     <files>
 	<filename plugin="rules_shipping_advanced">rules_shipping_advanced.php</filename>
@@ -21,9 +21,11 @@
     <scriptfile>rules_shipping_advanced.script.php</scriptfile>
 
 
-    <params addpath="/plugins/vmshipment/rules_shipping_advanced/elements/" />
+    <params addpath="/administrator/components/com_virtuemart/elements" />
+    <params addpath="/plugins/vmshipment/rules_shipping_advanced/rules_shipping_advanced/elements" />
+    <params addpath="/plugins/vmshipment/rules_shipping_advanced/elements" />
 
-    <params addpath="/administrator/components/com_virtuemart/elements">
+    <params>
 	<param type="vmjpluginwarning" />
 	<param type="rklabel" default='VMSHIPMENT_RULES_PLUGIN_ADV' level="level1" />
 	<param	name="shipment_logos" type="vmfiles" label="VMSHIPMENT_WEIGHT_COUNTRIES_LOGOS"
@@ -32,6 +34,7 @@
              	default="default" hide_default="1" hide_none="1"
              	stripext="0"   exclude="^_" />
 	<param name="weight_unit" type="vmweightunit" size="10" default="" label="VMSHIPMENT_WEIGHT_COUNTRIES_WEIGHT_UNIT" description="VMSHIPMENT_WEIGHT_COUNTRIES_WEIGHT_UNIT_DESC"/>
+	<param name="length_unit" type="vmlengthunit" size="10" default="" label="VMSHIPMENT_RULES_LENGTH_UNIT" description="VMSHIPMENT_RULES_LENGTH_UNIT_DESC"/>
 
 	<param type="rklabel" default='VMSHIPMENT_RULES_HELP_ADV' />
 
diff --git a/rules_shipping_base.php b/rules_shipping_base.php
index 876aadb..39c3ef7 100644
--- a/rules_shipping_base.php
+++ b/rules_shipping_base.php
@@ -322,7 +322,7 @@ class plgVmShipmentRules_Shipping_Base extends vmPSPlugin {
 		return $articles;
 	}
 
-	protected function getOrderDimensions (VirtueMartCart $cart) {
+	protected function getOrderDimensions (VirtueMartCart $cart, $length_dimension) {
 		/* Cache the value in a static variable and calculate it only once! */
 		static $calculated = 0;
 		static $dimensions=array(
@@ -335,22 +335,29 @@ class plgVmShipmentRules_Shipping_Base extends vmPSPlugin {
 		if ($calculated==0) {
 			$calculated=1;
 			foreach ($cart->products as $product) {
-				$volume = $product->product_length * $product->product_width * $product->product_height;
+	
+				$l = ShopFunctions::convertDimensionUnit ($product->product_length, $product->product_lwh_uom, $length_dimension);
+				$w = ShopFunctions::convertDimensionUnit ($product->product_width, $product->product_lwh_uom, $length_dimension);
+				$h = ShopFunctions::convertDimensionUnit ($product->product_height, $product->product_lwh_uom, $length_dimension);
+// JFactory::getApplication()->enqueueMessage("<pre>Product, returned dimensions: $l x $w x $h, from $product->product_lwh_uom to $length_dimension,  ".print_r($product,1)."</pre>", 'error');
+
+				$volume = $l * $w * $h;
 				$dimensions['volume'] += $volume * $product->quantity;
 				$dimensions['maxvolume'] = max ($dimensions['maxvolume'], $volume);
 				$dimensions['minvolume'] = min ($dimensions['minvolume'], $volume);
-				$dimensions['maxlength'] = max ($dimensions['maxlength'], $product->product_length);
-				$dimensions['minlength'] = min ($dimensions['minlength'], $product->product_length);
-				$dimensions['maxwidth'] = max ($dimensions['maxwidth'], $product->product_width);
-				$dimensions['minwidth'] = min ($dimensions['minwidth'], $product->product_width);
-				$dimensions['maxheight'] = max ($dimensions['maxheight'], $product->product_height);
-				$dimensions['minheight'] = min ($dimensions['minheight'], $product->product_height);
-				$dimensions['totallength'] += $product->product_length;
-				$dimensions['totalwidth'] += $product->product_width;
-				$dimensions['totalheight'] += $product->product_height;
-				
+				$dimensions['maxlength'] = max ($dimensions['maxlength'], $l);
+				$dimensions['minlength'] = min ($dimensions['minlength'], $l);
+				$dimensions['maxwidth'] = max ($dimensions['maxwidth'], $w);
+				$dimensions['minwidth'] = min ($dimensions['minwidth'], $w);
+				$dimensions['maxheight'] = max ($dimensions['maxheight'], $h);
+				$dimensions['minheight'] = min ($dimensions['minheight'], $h);
+				$dimensions['totallength'] += $l * $product->quantity;
+				$dimensions['totalwidth'] += $w * $product->quantity;
+				$dimensions['totalheight'] += $h * $product->quantity;
 			}
 		}
+// JFactory::getApplication()->enqueueMessage("<pre>Dimensions: ".print_r($dimensions,1)."</pre>", 'error');
+
 		return $dimensions;
 	}
 
@@ -377,8 +384,15 @@ class plgVmShipmentRules_Shipping_Base extends vmPSPlugin {
 			$products += 1;
 			$articles += $product->quantity;
 		}
+		$zip = $address['zip'];
 		$cartvals = array('weight'=>$orderWeight, 
-				  'zip'=>$address['zip'], 
+				  'zip'=>$zip, 
+				  'zip1'=>substr($zip,0,1), 
+				  'zip2'=>substr($zip,0,2), 
+				  'zip3'=>substr($zip,0,3), 
+				  'zip4'=>substr($zip,0,4), 
+				  'zip5'=>substr($zip,0,5), 
+				  'zip6'=>substr($zip,0,6), 
 				  'articles'=>$articles, 
 				  'products'=>$products,
 				  'amount'=>$cart_prices['salesPrice'],
@@ -397,7 +411,7 @@ class plgVmShipmentRules_Shipping_Base extends vmPSPlugin {
 
 				  'country'=>$address['virtuemart_country_id'],
 			);
-		$cartvals = array_merge ($cartvals, $this->getOrderDimensions ($cart));
+		$cartvals = array_merge ($cartvals, $this->getOrderDimensions ($cart, $method->length_unit));
 		// Let child classes update the $cartvals array, or add new variables
 		$this->addCustomCartValues($cart, $cart_prices, $cartvals);
 		return $cartvals;
@@ -617,6 +631,42 @@ class ShippingRule {
 		return strtolower($expr);
 	}
 	
+	function evaluateComparison ($terms, $vals) {
+		while (count($terms)>2) {
+			$res = false;
+			switch ($terms[1]) {
+				case '<':  $res = ($terms[0] < $terms[2]);  break;
+				case '<=': 
+				case '=<': $res = ($terms[0] <= $terms[2]); break;
+				case '==': $res = ($terms[0] == $terms[2]); break;
+				case '!=':
+				case '<>': $res = ($terms[0] != $terms[2]); break;
+				case '>=':
+				case '=>': $res = ($terms[0] >= $terms[2]); break;
+				case '>':  $res = ($terms[0] >  $terms[2]);  break;
+				case '~':  
+					$l=min(strlen($terms[0]), strlen($terms[2]));
+					$res = (strncmp ($terms[0], $terms[2], $l) == 0);
+JFactory::getApplication()->enqueueMessage("String-comparing $terms[0] and $terms[2] ($l chars), result=$res", 'error');
+					break;
+				default:
+					JFactory::getApplication()->enqueueMessage(JText::sprintf('VMSHIPMENT_RULES_UNKNOWN_OPERATOR', $terms[1], $this->rulestring), 'error');
+					$res = false;
+			}
+
+			if ($res==false) return false;
+			array_shift($terms);
+			array_shift($terms);
+		}
+		if (count($terms)>1) {
+			// We do not have the correct number of terms for chained comparisons, i.e. two terms leftover instead of one!
+			JFactory::getApplication()->enqueueMessage(JText::sprintf('VMSHIPMENT_RULES_EVALUATE_UNKNOWN_ERROR', $this->rulestring), 'error');
+			return false;
+		} 
+		// All conditions were fulfilled, so we can return true
+		return true;
+	}
+	
 	function evaluateTerm ($expr, $vals) {
 		if (is_null($expr)) {
 			return $expr;
@@ -636,8 +686,13 @@ class ShippingRule {
 			// Operator
 			$op = array_shift($expr);
 			$args = array();
+			$evaluate = true;
 			foreach ($expr as $e) {
-				$term = $this->evaluateTerm($e, $vals);
+				$term = $evaluate ? ($this->evaluateTerm($e, $vals)) : $e;
+				if ($op == 'comparison') {
+					// For comparisons, we only evaluate every other term (the operators are NOT evaluated!)
+					$evaluate = !$evaluate;
+				}
 				if (is_null($term)) return null;
 				$args[] = $term;
 			}
@@ -650,15 +705,19 @@ class ShippingRule {
 				case ' AND ':  $res = true; foreach ($args as $a) { $res = ($res && $a); }; break;
 				case 'in': $needle = array_shift($args); $res = in_array($needle, $args); break;
 				
-				case '<':  $res = ($args[0] < $args[1]);  break;
+				case '<':  
 				case '<=': 
-				case '=<': $res = ($args[0] <= $args[1]); break;
-				case '==': $res = ($args[0] == $args[1]); break;
+				case '=<': 
+				case '==': 
 				case '!=':
-				case '<>': $res = ($args[0] != $args[1]); break;
+				case '<>': 
 				case '>=':
-				case '=>': $res = ($args[0] >= $args[1]); break;
-				case '>':  $res = ($args[0] >  $args[1]);  break;
+				case '=>': 
+				case '>':
+				case '~':
+					$res = $this->evaluateComparison(array($args[0], $op, $args[1]), $vals); break;
+				case 'comparison':
+					$res = $this->evaluateComparison($args, $vals); break;
 				
 				case "+":  $res = ($args[0] +  $args[1]); break;
 				case "-":  $res = ($args[0] -  $args[1]); break;
@@ -669,6 +728,8 @@ class ShippingRule {
 				
 				default:   $res = false;
 			}
+			
+// 			JFactory::getApplication()->enqueueMessage("<pre>Result of ".print_r($expr,1)." is $res.</pre>", 'error');
 			return $res;
 		} else {
 			// Neither string nor numeric, nor operator...
-- 
GitLab