summaryrefslogtreecommitdiff
path: root/plugins/managesieve/lib
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2012-09-20 13:15:03 +0200
committerAleksander Machniak <alec@alec.pl>2012-09-20 13:15:03 +0200
commitcd97f0ad1190f4fe1f65542389b517936bf32b5d (patch)
tree10ce77964e27640fc109c3d9dd91c80534c24035 /plugins/managesieve/lib
parent270da4b87b3601b558d37721aae9e4816359aca5 (diff)
Support only 00 version of draft-ietf-sieve-notify which is more common (Cyrus 2.4)
Diffstat (limited to 'plugins/managesieve/lib')
-rw-r--r--plugins/managesieve/lib/rcube_sieve_script.php29
1 files changed, 26 insertions, 3 deletions
diff --git a/plugins/managesieve/lib/rcube_sieve_script.php b/plugins/managesieve/lib/rcube_sieve_script.php
index fe63141fe..36eb1bcf8 100644
--- a/plugins/managesieve/lib/rcube_sieve_script.php
+++ b/plugins/managesieve/lib/rcube_sieve_script.php
@@ -42,7 +42,7 @@ class rcube_sieve_script
'body', // RFC5173
'subaddress', // RFC5233
'enotify', // RFC5435
- 'notify', // draft-ietf-sieve-notify-04
+ 'notify', // draft-ietf-sieve-notify-00
// @TODO: spamtest+virustest, mailbox, date
);
@@ -408,11 +408,25 @@ class rcube_sieve_script
array_push($exts, $notify);
$action_script .= 'notify';
+ // Here we support only 00 version of notify draft, there
+ // were a couple regressions in 00 to 04 changelog, we use
+ // the version used by Cyrus
+ if ($notify == 'notify') {
+ switch ($action['importance']) {
+ case 1: $action_script .= " :high"; break;
+ case 2: $action_script .= " :normal"; break;
+ case 3: $action_script .= " :low"; break;
+
+ }
+ unset($action['importance']);
+ }
+
foreach (array('from', 'importance', 'options', 'message') as $n_tag) {
if (!empty($action[$n_tag])) {
$action_script .= " :$n_tag " . self::escape_string($action[$n_tag]);
}
}
+
if (!empty($action['address'])) {
$method = 'mailto:' . $action['address'];
if (!empty($action['body'])) {
@@ -869,13 +883,22 @@ class rcube_sieve_script
case 'notify':
$notify = array('type' => 'notify');
+ $priorities = array(':high' => 1, ':normal' => 2, ':low' => 3);
// Parameters: :from, :importance, :options, :message
// additional (optional) :method parameter for notify extension
for ($i=0, $len=count($tokens); $i<$len; $i++) {
$tok = strtolower($tokens[$i]);
if ($tok[0] == ':') {
- $notify[substr($tok, 1)] = $tokens[++$i];
+ // Here we support only 00 version of notify draft, there
+ // were a couple regressions in 00 to 04 changelog, we use
+ // the version used by Cyrus
+ if (isset($priorities[$tok])) {
+ $notify['importance'] = $priorities[$tok];
+ }
+ else {
+ $notify[substr($tok, 1)] = $tokens[++$i];
+ }
}
else {
// unnamed parameter is a :method in enotify extension
@@ -891,7 +914,7 @@ class rcube_sieve_script
parse_str($method_components['query'], $method_params);
}
$method_params = array_change_key_case($method_params, CASE_LOWER);
- /* magic_quotes_gpc and magic_quotes_sybase affect the output of parse_str */
+ // magic_quotes_gpc and magic_quotes_sybase affect the output of parse_str
if (ini_get('magic_quotes_gpc') || ini_get('magic_quotes_sybase')) {
array_map('stripslashes', $method_params);
}