diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index 21ed307a4..498fe028a 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -1,59 +1,65 @@ -* version 1.0 [2009-05-21] +* version 1.1 [2009-05-27] ----------------------------------------------------------- -Rewritten using plugin API -Added hu_HU localization (Tamas Tevesz) +- Added new icons +- Added support for headers lists (coma-separated) in rules +- Added de_CH localization -* version beta7 (svn-r2300) [2009-03-01] +* version 1.0 [2009-05-21] ----------------------------------------------------------- -Added SquirrelMail script auto-import (Jonathan Ernst) -Added 'vacation' support (Jonathan Ernst & alec) -Added 'stop' support (Jonathan Ernst) -Added option for extensions disabling (Jonathan Ernst & alec) -Added fi_FI, nl_NL, bg_BG localization -Small style fixes +- Rewritten using plugin API +- Added hu_HU localization (Tamas Tevesz) + +* version beta7 (svn-r2300) [2009-03-01] +----------------------------------------------------------- +- Added SquirrelMail script auto-import (Jonathan Ernst) +- Added 'vacation' support (Jonathan Ernst & alec) +- Added 'stop' support (Jonathan Ernst) +- Added option for extensions disabling (Jonathan Ernst & alec) +- Added fi_FI, nl_NL, bg_BG localization +- Small style fixes * version 0.2-stable1 (svn-r2205) [2009-01-03] ----------------------------------------------------------- -Fix moving down filter row -Fixes for compressed js files in stable release package -Created patch for svn version r2205 +- Fix moving down filter row +- Fixes for compressed js files in stable release package +- Created patch for svn version r2205 * version 0.2-stable [2008-12-31] ----------------------------------------------------------- -Added ru_RU, fr_FR, zh_CN translation -Fixes for Roundcube 0.2-stable +- Added ru_RU, fr_FR, zh_CN translation +- Fixes for Roundcube 0.2-stable * version rc0.2beta [2008-09-21] ----------------------------------------------------------- -Small css fixes for IE -Fixes for Roundcube 0.2-beta +- Small css fixes for IE +- Fixes for Roundcube 0.2-beta * version beta6 [2008-08-08] ----------------------------------------------------------- -Added de_DE translation -Fix for Roundcube r1634 +- Added de_DE translation +- Fix for Roundcube r1634 * version beta5 [2008-06-10] ----------------------------------------------------------- -Fixed 'exists' operators -Fixed 'not*' operators for custom headers -Fixed filters deleting +- Fixed 'exists' operators +- Fixed 'not*' operators for custom headers +- Fixed filters deleting * version beta4 [2008-06-09] ----------------------------------------------------------- -Fix for Roundcube r1490 +- Fix for Roundcube r1490 * version beta3 [2008-05-22] ----------------------------------------------------------- -Fixed textarea error class setting -Added pagetitle setting -Added option 'managesieve_replace_delimiter' -Fixed errors on IE (still need some css fixes) +- Fixed textarea error class setting +- Added pagetitle setting +- Added option 'managesieve_replace_delimiter' +- Fixed errors on IE (still need some css fixes) * version beta2 [2008-05-20] ----------------------------------------------------------- -Use 'if' only for first filter and 'elsif' for the rest +- Use 'if' only for first filter and 'elsif' for the rest * version beta1 [2008-05-15] ----------------------------------------------------------- -Initial version for Roundcube r1388. +- Initial version for Roundcube r1388. diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php index d29ad345e..fc2925765 100644 --- a/plugins/managesieve/managesieve.php +++ b/plugins/managesieve/managesieve.php @@ -7,7 +7,7 @@ * It's clickable interface which operates on text scripts and communicates * with server using managesieve protocol. Adds Filters tab in Settings. * - * @version 1.0 + * @version 1.1 * @author Aleksander 'A.L.E.C' Machniak * * Configuration (main.inc.php): @@ -308,7 +308,7 @@ class managesieve extends rcube_plugin $this->errors['tests'][$i]['sizetarget'] = $this->gettext('wrongformat'); break; case '...': - $cust_header = $this->strip_value($cust_headers[$idx]); + $cust_header = $headers = $this->strip_value($cust_headers[$idx]); if(preg_match('/^not/', $op)) $this->form['tests'][$i]['not'] = true; @@ -316,10 +316,22 @@ class managesieve extends rcube_plugin if ($cust_header == '') $this->errors['tests'][$i]['header'] = $this->gettext('cannotbeempty'); - elseif (!preg_match('/^[a-z0-9-]+$/i', $cust_header)) - $this->errors['tests'][$i]['header'] = $this->gettext('forbiddenchars'); - - if ($type == 'exists') + else { + $headers = preg_split('/[\s,]+/', $cust_header, -1, PREG_SPLIT_NO_EMPTY); + + if (!count($headers)) + $this->errors['tests'][$i]['header'] = $this->gettext('cannotbeempty'); + else { + foreach ($headers as $hr) + if (!preg_match('/^[a-z0-9-]+$/i', $hr)) + $this->errors['tests'][$i]['header'] = $this->gettext('forbiddenchars'); + } + } + + if (empty($this->errors['tests'][$i]['header'])) + $cust_header = $headers; + + if ($type == 'exists') { $this->form['tests'][$i]['test'] = 'exists'; $this->form['tests'][$i]['arg'] = $cust_header; @@ -599,9 +611,11 @@ class managesieve extends rcube_plugin // TODO: list arguments - if ((isset($rule['test']) && $rule['test'] == 'header') && in_array($rule['arg1'], $this->headers)) + if ((isset($rule['test']) && $rule['test'] == 'header') + && !is_array($rule['arg1']) && in_array($rule['arg1'], $this->headers)) $out .= $select_header->show($rule['arg1']); - elseif ((isset($rule['test']) && $rule['test'] == 'exists') && in_array($rule['arg'], $this->headers)) + elseif ((isset($rule['test']) && $rule['test'] == 'exists') + && !is_array($rule['arg']) && in_array($rule['arg'], $this->headers)) $out .= $select_header->show($rule['arg']); elseif (isset($rule['test']) && $rule['test'] == 'size') $out .= $select_header->show('size'); @@ -612,10 +626,12 @@ class managesieve extends rcube_plugin $out .= ''; - if ((isset($rule['test']) && $rule['test'] == 'header') && !in_array($rule['arg1'], $this->headers)) - $custom = $rule['arg1']; - elseif ((isset($rule['test']) && $rule['test'] == 'exists') && !in_array($rule['arg'], $this->headers)) - $custom = $rule['arg']; + if ((isset($rule['test']) && $rule['test'] == 'header') + && (is_array($rule['arg1']) || !in_array($rule['arg1'], $this->headers))) + $custom = is_array($rule['arg1']) ? implode(', ', $rule['arg1']) : $rule['arg1']; + elseif ((isset($rule['test']) && $rule['test'] == 'exists') + && (is_array($rule['arg']) || !in_array($rule['arg'], $this->headers))) + $custom = is_array($rule['arg']) ? implode(', ', $rule['arg']) : $rule['arg']; $out .= '
error_class($id, 'test', 'header')