From b40c338186679c086d25ed5d43553d3216d7190a Mon Sep 17 00:00:00 2001 From: alec Date: Thu, 10 Feb 2011 08:10:03 +0000 Subject: - Added :regex and :matches support (#1487746) git-svn-id: https://svn.roundcube.net/trunk@4521 208e9e7b-5314-0410-a742-e7e81cd9613c --- plugins/managesieve/Changelog | 1 + plugins/managesieve/lib/rcube_sieve.php | 8 +++++--- plugins/managesieve/localization/en_US.inc | 4 ++++ plugins/managesieve/localization/pl_PL.inc | 4 ++++ plugins/managesieve/managesieve.php | 8 ++++++-- 5 files changed, 20 insertions(+), 5 deletions(-) (limited to 'plugins') diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index a634815a4..1a8d3df61 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -1,4 +1,5 @@ - Fix STARTTLS for timsieved < 2.3.10 +- Added :regex and :matches support (#1487746) * version 3.0 [2011-02-01] ----------------------------------------------------------- diff --git a/plugins/managesieve/lib/rcube_sieve.php b/plugins/managesieve/lib/rcube_sieve.php index 1f0b21bb6..1ed0da9ab 100644 --- a/plugins/managesieve/lib/rcube_sieve.php +++ b/plugins/managesieve/lib/rcube_sieve.php @@ -405,7 +405,8 @@ class rcube_sieve_script 'copy', // RFC3894 'vacation', // RFC5230 'relational', // RFC3431 - // TODO: (most wanted first) body, imapflags, notify, regex + 'regex', // draft-ietf-sieve-regex-01 + // TODO: (most wanted first) body, imapflags, notify ); /** @@ -533,8 +534,9 @@ class rcube_sieve_script array_push($exts, 'comparator-i;ascii-numeric'); $tests[$i] .= 'header :' . $m[1] . ' "' . $m[2] . '" :comparator "i;ascii-numeric"'; } - else + else { $tests[$i] .= 'header :' . $test['type']; + } $tests[$i] .= ' ' . self::escape_string($test['arg1']); $tests[$i] .= ' ' . self::escape_string($test['arg2']); @@ -749,7 +751,7 @@ class rcube_sieve_script else if (!is_array($tokens[$i]) && preg_match('/^:(count|value)$/i', $tokens[$i])) { $header['type'] = strtolower(substr($tokens[$i], 1)) . '-' . $tokens[++$i]; } - else if (!is_array($tokens[$i]) && preg_match('/^:(is|contains|matches)$/i', $tokens[$i])) { + else if (!is_array($tokens[$i]) && preg_match('/^:(is|contains|matches|regex)$/i', $tokens[$i])) { $header['type'] = strtolower(substr($tokens[$i], 1)); } else { diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc index 1bfc88d8c..3da594f8a 100644 --- a/plugins/managesieve/localization/en_US.inc +++ b/plugins/managesieve/localization/en_US.inc @@ -17,6 +17,10 @@ $labels['filteris'] = 'is equal to'; $labels['filterisnot'] = 'is not equal to'; $labels['filterexists'] = 'exists'; $labels['filternotexists'] = 'not exists'; +$labels['filtermatches'] = 'matches expression'; +$labels['filternotmatches'] = 'not matches expression'; +$labels['filterregex'] = 'matches regular expression'; +$labels['filternotregex'] = 'not matches regular expression'; $labels['filterunder'] = 'under'; $labels['filterover'] = 'over'; $labels['addrule'] = 'Add rule'; diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc index e530619a4..f988d8f0b 100644 --- a/plugins/managesieve/localization/pl_PL.inc +++ b/plugins/managesieve/localization/pl_PL.inc @@ -18,6 +18,10 @@ $labels['filteris'] = 'jest równe'; $labels['filterisnot'] = 'nie jest równe'; $labels['filterexists'] = 'istnieje'; $labels['filternotexists'] = 'nie istnieje'; +$labels['filtermatches'] = 'pasuje do wyrażenia'; +$labels['filternotmatches'] = 'nie pasuje do wyrażenia'; +$labels['filterregex'] = 'pasuje do wyrażenia regularnego'; +$labels['filternotregex'] = 'nie pasuje do wyrażenia regularnego'; $labels['filterunder'] = 'poniżej'; $labels['filterover'] = 'ponad'; $labels['addrule'] = 'Dodaj regułę'; diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php index 96e6ebcce..d986141cd 100644 --- a/plugins/managesieve/managesieve.php +++ b/plugins/managesieve/managesieve.php @@ -893,8 +893,12 @@ class managesieve extends rcube_plugin $select_op->add(Q($this->gettext('filterisnot')), 'notis'); $select_op->add(Q($this->gettext('filterexists')), 'exists'); $select_op->add(Q($this->gettext('filternotexists')), 'notexists'); -// $select_op->add(Q($this->gettext('filtermatches')), 'matches'); -// $select_op->add(Q($this->gettext('filternotmatches')), 'notmatches'); + $select_op->add(Q($this->gettext('filtermatches')), 'matches'); + $select_op->add(Q($this->gettext('filternotmatches')), 'notmatches'); + if (in_array('regex', $this->exts)) { + $select_op->add(Q($this->gettext('filterregex')), 'regex'); + $select_op->add(Q($this->gettext('filternotregex')), 'notregex'); + } if (in_array('relational', $this->exts)) { $select_op->add(Q($this->gettext('countisgreaterthan')), 'count-gt'); $select_op->add(Q($this->gettext('countisgreaterthanequal')), 'count-ge'); -- cgit v1.2.3