diff --git a/releases/plg_vmshipment_rules_shipping_advanced_v2.0.zip b/releases/plg_vmshipment_rules_shipping_advanced_v2.0.zip index 41e4dc7729a16aa1bd6dfb4e9526f4d93c36923a..31772ab87f29c38d539237ebb4a6a3f04b7a1207 100644 Binary files a/releases/plg_vmshipment_rules_shipping_advanced_v2.0.zip and b/releases/plg_vmshipment_rules_shipping_advanced_v2.0.zip differ diff --git a/releases/plg_vmshipment_rules_shipping_v2.0.zip b/releases/plg_vmshipment_rules_shipping_v2.0.zip index 83ec336faa2c9b2e7db00a3b9698b3e5f975ca93..7fbc943505fb1599946e4525b4d3ebc9d25f92fb 100644 Binary files a/releases/plg_vmshipment_rules_shipping_v2.0.zip and b/releases/plg_vmshipment_rules_shipping_v2.0.zip differ diff --git a/rules_shipping_advanced.php b/rules_shipping_advanced.php index 92b92bc17e198bbbb0b52e80dd05182e0ff78eb5..70210c3e19a1cf6f35c70ad7e5d2af7e98a2ee4d 100644 --- a/rules_shipping_advanced.php +++ b/rules_shipping_advanced.php @@ -71,8 +71,8 @@ class ShippingRule_Advanced extends ShippingRule { "+" => 50, "-" => 50, "<" => 40, "<=" => 40, ">" => 40, ">=" => 40, "=>" => 40, "=<" => 40, "==" => 40, "!=" => 40, "<>" => 40, - "&" => 21, - " OR " => 20, + "&&" => 21, " AND " => 21, "AND" => 21, + " OR " => 20, "OR" => 20, "=" => 10, "(" => 0, ")" =>0 ); @@ -86,7 +86,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 |<=|=>|>=|=>|<>|!=|==|<|=|>|\+|-|\*|/|%|\(|\)|\^)\s*:'; + $op_re = ':\s*( OR |&&| AND |<=|=>|>=|=>|<>|!=|==|<|=|>|\+|-|\*|/|%|\(|\)|\^)\s*:'; $atoms = array(); foreach ($strings as $s) { if (preg_match($str_re, $s)) { @@ -155,7 +155,7 @@ class ShippingRule_Advanced extends ShippingRule { $atoms = $this->tokenize_expression ($rulepart); // Any of these indicate a comparison and thus a condition: - $comparison_ops = array('<', '<=', '=<', '<>', '!=', '==', '>', '>=', '=>'); + $comparison_ops = array('<', '<=', '=<', '<>', '!=', '==', '>', '>=', '=>', ' OR ', 'OR', 'AND', ' AND ', '&&'); $is_comparison = false; $is_assignment = false; diff --git a/rules_shipping_base.php b/rules_shipping_base.php index c42290ddc856306500c1981cc12ab8954441eabf..ca96df5cdfd720bd3461b5b9d35eb34f3aa72b22 100644 --- a/rules_shipping_base.php +++ b/rules_shipping_base.php @@ -633,6 +633,7 @@ class ShippingRule { switch ($op) { case 'OR': case ' OR ': foreach ($args as $a) { $res = ($res || $a); }; break; + case '&&': case 'AND': case ' AND ': $res = true; foreach ($args as $a) { $res = ($res && $a); }; break; case 'in': $needle = array_shift($args); $res = in_array($needle, $args); break;