From 6af79f1517d4a5c34088eaf6d0e5af69733f3eef Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 14 Jan 2015 07:30:31 -0500 Subject: Support "not allof" test as a negation of all sub-tests Fixes also last commit change. --- .../managesieve/lib/Roundcube/rcube_sieve_script.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'plugins/managesieve/lib/Roundcube/rcube_sieve_script.php') diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php index bc62d2ff4..518d79d35 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php @@ -622,6 +622,7 @@ class rcube_sieve_script $disabled = false; $join = false; + $join_not = false; // disabled rule (false + comment): if false # ..... if (preg_match('/^\s*false\s+#/i', $content)) { @@ -650,15 +651,22 @@ class rcube_sieve_script $not = false; } + // we support "not allof" as a negation of allof sub-tests + if ($join_not) { + $not = !$not; + } + switch ($token) { case 'allof': - $join = true; + $join = true; + $join_not = $not; break; + case 'anyof': break; case 'size': - $test = array('test' => 'size', 'not' => $not); + $test = array('test' => 'size', 'not' => $not); $test['arg'] = array_pop($tokens); @@ -740,16 +748,16 @@ class rcube_sieve_script break; case 'exists': - $tests[] = array('test' => 'exists', 'not' => $not, + $tests[] = array('test' => 'exists', 'not' => $not, 'arg' => array_pop($tokens)); break; case 'true': - $tests[] = array('test' => 'true', 'not' => $not); + $tests[] = array('test' => 'true', 'not' => $not); break; case 'false': - $tests[] = array('test' => 'true', 'not' => !$not); + $tests[] = array('test' => 'true', 'not' => !$not); break; } -- cgit v1.2.3