summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2011-10-10 08:05:48 +0000
committeralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2011-10-10 08:05:48 +0000
commit6380c571c1ccbf127ce0262532a30b3dcc7e0347 (patch)
treeb6adc6f6bfc58b25d1e52f9517cd71aacde0e610
parent6b4876b53b2f56a57b54f91695e33438c00338b7 (diff)
- Support KEP:14's commented variables
git-svn-id: https://svn.roundcube.net/trunk@5325 208e9e7b-5314-0410-a742-e7e81cd9613c
-rw-r--r--plugins/managesieve/lib/rcube_sieve_script.php15
-rw-r--r--plugins/managesieve/tests/parser_kep14.phpt19
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";