diff options
| -rw-r--r-- | plugins/managesieve/lib/rcube_sieve_script.php | 15 | ||||
| -rw-r--r-- | plugins/managesieve/tests/parser_kep14.phpt | 19 |
2 files changed, 30 insertions, 4 deletions
diff --git a/plugins/managesieve/lib/rcube_sieve_script.php b/plugins/managesieve/lib/rcube_sieve_script.php index e303f2779..8fc0e5545 100644 --- a/plugins/managesieve/lib/rcube_sieve_script.php +++ b/plugins/managesieve/lib/rcube_sieve_script.php @@ -181,10 +181,13 @@ class rcube_sieve_script $exts = array(); $idx = 0; - if (!empty($this->vars) && in_array('variables', (array)$this->capabilities)) { - array_push($exts, 'variables'); + if (!empty($this->vars)) { + if (in_array('variables', (array)$this->capabilities)) { + $has_vars = true; + array_push($exts, 'variables'); + } foreach ($this->vars as $var) { - $output .= 'set '; + $output .= (empty($has_vars) ? '# ' : '') . 'set '; foreach (array_diff(array_keys($var), array('name', 'value')) as $opt) { $output .= ":$opt "; } @@ -411,7 +414,7 @@ class rcube_sieve_script $rule = array(); // Comments - while ($script[0] == '#') { + while (!empty($script) && $script[0] == '#') { $endl = strpos($script, "\n"); $line = $endl ? substr($script, 0, $endl) : $script; @@ -419,6 +422,10 @@ class rcube_sieve_script if (preg_match('/^# rule:\[(.*)\]/', $line, $matches)) { $rulename = $matches[1]; } + // KEP:14 variables + else if (preg_match('/^# set "([^"]+)" "([^"]+)";$/', $line, $matches)) { + $this->set_var($matches[1], $matches[2]); + } // Horde-Ingo format else if (!empty($options['format']) && $options['format'] == 'INGO' && preg_match('/^# (.*)/', $line, $matches) diff --git a/plugins/managesieve/tests/parser_kep14.phpt b/plugins/managesieve/tests/parser_kep14.phpt new file mode 100644 index 000000000..9be4eba04 --- /dev/null +++ b/plugins/managesieve/tests/parser_kep14.phpt @@ -0,0 +1,19 @@ +--TEST-- +Test of Kolab's KEP:14 implementation +--SKIPIF-- +--FILE-- +<?php +include '../lib/rcube_sieve_script.php'; + +$txt = ' +# set "editor" "Roundcube"; +# set "editor_version" "123"; +'; + +$s = new rcube_sieve_script($txt, array()); +echo $s->as_text(); + +?> +--EXPECT-- +# set "editor" "Roundcube"; +# set "editor_version" "123"; |
