diff options
| author | alec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-05-04 11:19:27 +0000 |
|---|---|---|
| committer | alec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-05-04 11:19:27 +0000 |
| commit | bf3f51e74d660e3d0efcff2739c58e932fdec72b (patch) | |
| tree | 2443f623f3da276febdcbd2fa8b304433d5e38d9 | |
| parent | 9bc4e105b040fcde268cd04a4cca3803f935119a (diff) | |
- Fix filters set activation, add possibility to deactivate sets (#1486699)
git-svn-id: https://svn.roundcube.net/trunk@3592 208e9e7b-5314-0410-a742-e7e81cd9613c
| -rw-r--r-- | plugins/managesieve/Changelog | 1 | ||||
| -rw-r--r-- | plugins/managesieve/lib/rcube_sieve.php | 127 | ||||
| -rw-r--r-- | plugins/managesieve/localization/en_US.inc | 3 | ||||
| -rw-r--r-- | plugins/managesieve/localization/pl_PL.inc | 3 | ||||
| -rw-r--r-- | plugins/managesieve/managesieve.js | 706 | ||||
| -rw-r--r-- | plugins/managesieve/managesieve.php | 64 | ||||
| -rw-r--r-- | plugins/managesieve/skins/default/templates/managesieve.html | 2 |
7 files changed, 463 insertions, 443 deletions
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index 16d7ca8bd..323c7f2cf 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -1,4 +1,5 @@ - Fix filters set label after activation +- Fix filters set activation, add possibility to deactivate sets (#1486699) * version 2.4 [2010-04-01] ----------------------------------------------------------- diff --git a/plugins/managesieve/lib/rcube_sieve.php b/plugins/managesieve/lib/rcube_sieve.php index 9f07299f8..01d259ae3 100644 --- a/plugins/managesieve/lib/rcube_sieve.php +++ b/plugins/managesieve/lib/rcube_sieve.php @@ -18,6 +18,7 @@ define('SIEVE_ERROR_INSTALL', 4); // script installation define('SIEVE_ERROR_ACTIVATE', 5); // script activation define('SIEVE_ERROR_DELETE', 6); // script deletion define('SIEVE_ERROR_INTERNAL', 7); // internal error +define('SIEVE_ERROR_DEACTIVATE', 8); // script activation define('SIEVE_ERROR_OTHER', 255); // other/unknown error @@ -44,7 +45,7 @@ class rcube_sieve public function __construct($username, $password='', $host='localhost', $port=2000, $usetls=true, $disabled=array(), $debug=false) { - $this->sieve = new Net_Sieve(); + $this->sieve = new Net_Sieve(); if ($debug) $this->sieve->setDebug(true, array($this, 'debug_handler')); @@ -67,7 +68,7 @@ class rcube_sieve */ public function error() { - return $this->error ? $this->error : false; + return $this->error ? $this->error : false; } /** @@ -78,16 +79,16 @@ class rcube_sieve if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); - if (!$this->script) - return $this->_set_error(SIEVE_ERROR_INTERNAL); + if (!$this->script) + return $this->_set_error(SIEVE_ERROR_INTERNAL); - if (!$name) - $name = $this->current; + if (!$name) + $name = $this->current; $script = $this->script->as_text(); if (!$script) - $script = '/* empty script */'; + $script = '/* empty script */'; if (PEAR::isError($this->sieve->installScript($name, $script))) return $this->_set_error(SIEVE_ERROR_INSTALL); @@ -104,7 +105,7 @@ class rcube_sieve return $this->_set_error(SIEVE_ERROR_INTERNAL); if (!$content) - $content = '/* empty script */'; + $content = '/* empty script */'; if (PEAR::isError($this->sieve->installScript($name, $content))) return $this->_set_error(SIEVE_ERROR_INSTALL); @@ -117,11 +118,11 @@ class rcube_sieve */ public function activate($name = null) { - if (!$this->sieve) + if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); - if (!$name) - $name = $this->current; + if (!$name) + $name = $this->current; if (PEAR::isError($this->sieve->setActive($name))) return $this->_set_error(SIEVE_ERROR_ACTIVATE); @@ -130,26 +131,40 @@ class rcube_sieve } /** + * De-activates specified script + */ + public function deactivate() + { + if (!$this->sieve) + return $this->_set_error(SIEVE_ERROR_INTERNAL); + + if (PEAR::isError($this->sieve->setActive(''))) + return $this->_set_error(SIEVE_ERROR_DEACTIVATE); + + return true; + } + + /** * Removes specified script */ public function remove($name = null) { - if (!$this->sieve) + if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); - if (!$name) - $name = $this->current; + if (!$name) + $name = $this->current; - // script must be deactivated first - if ($name == $this->sieve->getActive()) + // script must be deactivated first + if ($name == $this->sieve->getActive()) if (PEAR::isError($this->sieve->setActive(''))) - return $this->_set_error(SIEVE_ERROR_DELETE); + return $this->_set_error(SIEVE_ERROR_DELETE); if (PEAR::isError($this->sieve->removeScript($name))) - return $this->_set_error(SIEVE_ERROR_DELETE); + return $this->_set_error(SIEVE_ERROR_DELETE); - if ($name == $this->current) - $this->current = null; + if ($name == $this->current) + $this->current = null; return true; } @@ -160,18 +175,18 @@ class rcube_sieve public function get_extensions() { if (!$this->sieve) - return $this->_set_error(SIEVE_ERROR_INTERNAL); + return $this->_set_error(SIEVE_ERROR_INTERNAL); - $ext = $this->sieve->getExtensions(); - // we're working on lower-cased names - $ext = array_map('strtolower', (array) $ext); + $ext = $this->sieve->getExtensions(); + // we're working on lower-cased names + $ext = array_map('strtolower', (array) $ext); - if ($this->script) { - $supported = $this->script->get_extensions(); - foreach ($ext as $idx => $ext_name) - if (!in_array($ext_name, $supported)) - unset($ext[$idx]); - } + if ($this->script) { + $supported = $this->script->get_extensions(); + foreach ($ext as $idx => $ext_name) + if (!in_array($ext_name, $supported)) + unset($ext[$idx]); + } return array_values($ext); } @@ -183,14 +198,14 @@ class rcube_sieve { if (!$this->list) { - if (!$this->sieve) - return $this->_set_error(SIEVE_ERROR_INTERNAL); + if (!$this->sieve) + return $this->_set_error(SIEVE_ERROR_INTERNAL); $this->list = $this->sieve->listScripts(); if (PEAR::isError($this->list)) - return $this->_set_error(SIEVE_ERROR_OTHER); - } + return $this->_set_error(SIEVE_ERROR_OTHER); + } return $this->list; } @@ -200,10 +215,10 @@ class rcube_sieve */ public function get_active() { - if (!$this->sieve) + if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); - return $this->sieve->getActive(); + return $this->sieve->getActive(); } /** @@ -222,7 +237,7 @@ class rcube_sieve if (PEAR::isError($script)) return $this->_set_error(SIEVE_ERROR_OTHER); - // try to parse from Roundcube format + // try to parse from Roundcube format $this->script = $this->_parse($script); $this->current = $name; @@ -238,7 +253,7 @@ class rcube_sieve if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); - // try to parse from Roundcube format + // try to parse from Roundcube format $this->script = $this->_parse($script); } @@ -247,7 +262,7 @@ class rcube_sieve */ private function _parse($txt) { - // try to parse from Roundcube format + // try to parse from Roundcube format $script = new rcube_sieve_script($txt, $this->disabled); // ... else try to import from different formats @@ -296,14 +311,14 @@ class rcube_sieve if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); - if ($copy) { + if ($copy) { $content = $this->sieve->getScript($copy); if (PEAR::isError($content)) - return $this->_set_error(SIEVE_ERROR_OTHER); - } + return $this->_set_error(SIEVE_ERROR_OTHER); + } - return $this->save_script($name, $content); + return $this->save_script($name, $content); } private function _import_rules($script) @@ -314,13 +329,13 @@ class rcube_sieve // Squirrelmail (Avelsieve) if ($tokens = preg_split('/(#START_SIEVE_RULE.*END_SIEVE_RULE)\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE)) { foreach($tokens as $token) { - if (preg_match('/^#START_SIEVE_RULE.*/', $token, $matches)) { - $name[$i] = "unnamed rule ".($i+1); + if (preg_match('/^#START_SIEVE_RULE.*/', $token, $matches)) { + $name[$i] = "unnamed rule ".($i+1); $content .= "# rule:[".$name[$i]."]\n"; } - elseif (isset($name[$i])) { - $content .= "if $token\n"; - $i++; + elseif (isset($name[$i])) { + $content .= "if $token\n"; + $i++; } } } @@ -344,7 +359,7 @@ class rcube_sieve private function _set_error($error) { - $this->error = $error; + $this->error = $error; return false; } @@ -404,8 +419,8 @@ class rcube_sieve_script foreach ($content as $elem) { if (!isset($names[$elem['name']])) { array_push($this->content, $elem); - $result = true; - } + $result = true; + } } return $result; @@ -428,8 +443,8 @@ class rcube_sieve_script { if(isset($this->content[$index])) { unset($this->content[$index]); - return true; - } + return true; + } return false; } @@ -442,9 +457,9 @@ class rcube_sieve_script { // TODO: check this->supported if ($this->content[$index]) { - $this->content[$index] = $content; - return $index; - } + $this->content[$index] = $content; + return $index; + } return false; } diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc index cdd5603ea..577911134 100644 --- a/plugins/managesieve/localization/en_US.inc +++ b/plugins/managesieve/localization/en_US.inc @@ -40,6 +40,7 @@ $labels['filterset'] = 'Filters set'; $labels['filtersetadd'] = 'Add filters set'; $labels['filtersetdel'] = 'Delete current filters set'; $labels['filtersetact'] = 'Activate current filters set'; +$labels['filtersetdeact'] = 'Deactivate current filters set'; $labels['filtersetget'] = 'Download filters set in text format'; $labels['filterdef'] = 'Filter definition'; $labels['filtersetname'] = 'Filters set name'; @@ -63,8 +64,10 @@ $messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected ac $messages['forbiddenchars'] = 'Forbidden characters in field'; $messages['cannotbeempty'] = 'Field cannot be empty'; $messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured'; +$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured'; $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured'; $messages['setactivated'] = 'Filters set activated successfully'; +$messages['setdeactivated'] = 'Filters set deactivated successfully'; $messages['setdeleted'] = 'Filters set deleted successfully'; $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; $messages['setcreateerror'] = 'Unable to create filters set. Server error occured'; diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc index 324e46ad9..f10468115 100644 --- a/plugins/managesieve/localization/pl_PL.inc +++ b/plugins/managesieve/localization/pl_PL.inc @@ -41,6 +41,7 @@ $labels['filterset'] = 'Zbiór filtrów'; $labels['filtersetadd'] = 'Dodaj zbiór filtrów'; $labels['filtersetdel'] = 'Usuń bierzący zbiór filtrów'; $labels['filtersetact'] = 'Aktywuj bierzący zbiór filtrów'; +$labels['filtersetdeact'] = 'Deaktywuj bierzący zbiór filtrów'; $labels['filtersetget'] = 'Pobierz bierzący zbiór filtrów w formacie tekstowym'; $labels['filterdef'] = 'Definicja filtra'; $labels['filtersetname'] = 'Nazwa zbioru'; @@ -64,8 +65,10 @@ $messages['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?'; $messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki'; $messages['cannotbeempty'] = 'Pole nie może być puste'; $messages['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera'; +$messages['setdeactivateerror'] = 'Nie można deaktywować wybranego zbioru filtrów. Błąd serwera'; $messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera'; $messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie'; +$messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie'; $messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie'; $messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?'; $messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera'; diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js index 549afd077..a700ba55b 100644 --- a/plugins/managesieve/managesieve.js +++ b/plugins/managesieve/managesieve.js @@ -2,14 +2,13 @@ if (window.rcmail) { rcmail.addEventListener('init', function(evt) { - // <span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span> + var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink'); - var button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve') - .attr('title', rcmail.gettext('managesieve.managefilters')) - .html(rcmail.gettext('managesieve.filters')) - .bind('click', function(e){ return rcmail.command('plugin.managesieve', this) }) - .appendTo(tab); + .attr('title', rcmail.gettext('managesieve.managefilters')) + .html(rcmail.gettext('managesieve.filters')) + .bind('click', function(e){ return rcmail.command('plugin.managesieve', this) }) + .appendTo(tab); // add button and register commands rcmail.add_element(tab, 'tabs'); @@ -25,464 +24,451 @@ if (window.rcmail) { rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() }, true); rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() }, true); - if (rcmail.env.action == 'plugin.managesieve') - { - if (rcmail.gui_objects.sieveform) { - rcmail.enable_command('plugin.managesieve-save', true); - } - else { - rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', - 'plugin.managesieve-down', false); - rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror); - rcmail.enable_command('plugin.managesieve-set', 'plugin.managesieve-setget', - rcmail.gui_objects.filtersetslist != null); - rcmail.enable_command('plugin.managesieve-setact', - (rcmail.gui_objects.filtersetslist && rcmail.gui_objects.filtersetslist.length > 1 - && rcmail.gui_objects.filtersetslist.value != rcmail.env.active_set)); - rcmail.enable_command('plugin.managesieve-setdel', - (rcmail.gui_objects.filtersetslist && rcmail.gui_objects.filtersetslist.length > 1)); - } - if (rcmail.gui_objects.filterslist) { + if (rcmail.env.action == 'plugin.managesieve') { + if (rcmail.gui_objects.sieveform) { + rcmail.enable_command('plugin.managesieve-save', true); + } + else { + rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', + 'plugin.managesieve-down', false); + rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror); + } + + if (rcmail.gui_objects.filterslist) { var p = rcmail; - rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false}); - rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); }); - rcmail.filters_list.init(); - rcmail.filters_list.focus(); + rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false}); + rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); }); + rcmail.filters_list.init(); + rcmail.filters_list.focus(); + + rcmail.enable_command('plugin.managesieve-set', 'plugin.managesieve-setget', true); + rcmail.enable_command('plugin.managesieve-setact', rcmail.gui_objects.filtersetslist.length); + rcmail.enable_command('plugin.managesieve-setdel', rcmail.gui_objects.filtersetslist.length > 1); + + $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset' + + (rcmail.gui_objects.filtersetslist.value == rcmail.env.active_set ? 'deact' : 'act'))); } - } + } if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled) $('#disabled').attr('checked', true); }); +}; - /*********************************************************/ - /********* Managesieve filters methods *********/ - /*********************************************************/ - - rcube_webmail.prototype.managesieve_add = function() - { - this.load_managesieveframe(); - this.filters_list.clear_selection(); - }; - - rcube_webmail.prototype.managesieve_del = function() - { - var id = this.filters_list.get_single_selection(); +/*********************************************************/ +/********* Managesieve filters methods *********/ +/*********************************************************/ - if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) - this.http_request('plugin.managesieve', - '_act=delete&_fid='+this.filters_list.rows[id].uid, true); - }; +rcube_webmail.prototype.managesieve_add = function() +{ + this.load_managesieveframe(); + this.filters_list.clear_selection(); +}; - rcube_webmail.prototype.managesieve_up = function() - { - var id = this.filters_list.get_single_selection(); +rcube_webmail.prototype.managesieve_del = function() +{ + var id = this.filters_list.get_single_selection(); + if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) this.http_request('plugin.managesieve', - '_act=up&_fid='+this.filters_list.rows[id].uid, true); - }; + '_act=delete&_fid='+this.filters_list.rows[id].uid, true); +}; - rcube_webmail.prototype.managesieve_down = function() - { - var id = this.filters_list.get_single_selection(); - this.http_request('plugin.managesieve', - '_act=down&_fid='+this.filters_list.rows[id].uid, true); - }; +rcube_webmail.prototype.managesieve_up = function() +{ + var id = this.filters_list.get_single_selection(); + this.http_request('plugin.managesieve', + '_act=up&_fid='+this.filters_list.rows[id].uid, true); +}; + +rcube_webmail.prototype.managesieve_down = function() +{ + var id = this.filters_list.get_single_selection(); + this.http_request('plugin.managesieve', + '_act=down&_fid='+this.filters_list.rows[id].uid, true); +}; - rcube_webmail.prototype.managesieve_rowid = function(id) - { - var rows = this.filters_list.rows; +rcube_webmail.prototype.managesieve_rowid = function(id) +{ + var i, rows = this.filters_list.rows; - for (var i=0; i<rows.length; i++) - if (rows[i] != null && rows[i].uid == id) - return i; - } + for (i=0; i<rows.length; i++) + if (rows[i] != null && rows[i].uid == id) + + return i; +} - rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled) - { - this.set_busy(true); +rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled) +{ + this.set_busy(true); - switch (action) - { - case 'delete': - this.filters_list.remove_row(this.managesieve_rowid(id)); - this.filters_list.clear_selection(); - this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false); - this.show_contentframe(false); + switch (action) { + case 'delete': + this.filters_list.remove_row(this.managesieve_rowid(id)); + this.filters_list.clear_selection(); + this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false); + this.show_contentframe(false); - // re-numbering filters - var rows = this.filters_list.rows; - for (var i=0; i<rows.length; i++) - { - if (rows[i] != null && rows[i].uid > id) - rows[i].uid = rows[i].uid-1; + // re-numbering filters + var i, rows = this.filters_list.rows; + for (i=0; i<rows.length; i++) { + if (rows[i] != null && rows[i].uid > id) + rows[i].uid = rows[i].uid-1; } - break; + break; - case 'down': - var rows = this.filters_list.rows; - var from, fromstatus, status; + case 'down': + var from, fromstatus, status, rows = this.filters_list.rows; - // we need only to replace filter names... - for (var i=0; i<rows.length; i++) - { - if (rows[i]==null) { // removed row - continue; - } else if (rows[i].uid == id) { - from = rows[i].obj; - fromstatus = $(from).hasClass('disabled'); - } else if (rows[i].uid == id+1){ - name = rows[i].obj.cells[0].innerHTML; - status = $(rows[i].obj).hasClass('disabled'); - rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML; - from.cells[0].innerHTML = name; - $(from)[status?'addClass':'removeClass']('disabled'); - $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled'); - this.filters_list.highlight_row(i); - break; + // we need only to replace filter names... + for (var i=0; i<rows.length; i++) { + if (rows[i]==null) { // removed row + continue; + } + else if (rows[i].uid == id) { + from = rows[i].obj; + fromstatus = $(from).hasClass('disabled'); + } + else if (rows[i].uid == id+1) { + name = rows[i].obj.cells[0].innerHTML; + status = $(rows[i].obj).hasClass('disabled'); + rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML; + from.cells[0].innerHTML = name; + $(from)[status?'addClass':'removeClass']('disabled'); + $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled'); + this.filters_list.highlight_row(i); + break; + } } - } - // ... and disable/enable Down button - this.filters_listbuttons(); - break; + // ... and disable/enable Down button + this.filters_listbuttons(); + break; - case 'up': - var rows = this.filters_list.rows; - var from, status, fromstatus; + case 'up': + var from, status, fromstatus, rows = this.filters_list.rows; - // we need only to replace filter names... - for (var i=0; i<rows.length; i++) - { - if (rows[i]==null) { // removed row - continue; - } else if (rows[i].uid == id-1) { - from = rows[i].obj; - fromstatus = $(from).hasClass('disabled'); - this.filters_list.highlight_row(i); - } else if (rows[i].uid == id) { - name = rows[i].obj.cells[0].innerHTML; - status = $(rows[i].obj).hasClass('disabled'); - rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML; - from.cells[0].innerHTML = name; - $(from)[status?'addClass':'removeClass']('disabled'); - $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled'); - break; + // we need only to replace filter names... + for (var i=0; i<rows.length; i++) { + if (rows[i] == null) { // removed row + continue; + } + else if (rows[i].uid == id-1) { + from = rows[i].obj; + fromstatus = $(from).hasClass('disabled'); + this.filters_list.highlight_row(i); + } + else if (rows[i].uid == id) { + name = rows[i].obj.cells[0].innerHTML; + status = $(rows[i].obj).hasClass('disabled'); + rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML; + from.cells[0].innerHTML = name; + $(from)[status?'addClass':'removeClass']('disabled'); + $(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled'); + break; + } } - } - // ... and disable/enable Up button - this.filters_listbuttons(); - break; + // ... and disable/enable Up button + this.filters_listbuttons(); + break; - case 'update': - var rows = parent.rcmail.filters_list.rows; - for (var i=0; i<rows.length; i++) - if (rows[i] && rows[i].uid == id) - { - rows[i].obj.cells[0].innerHTML = name; - if (disabled) - $(rows[i].obj).addClass('disabled'); - else - $(rows[i].obj).removeClass('disabled'); - break; + case 'update': + var rows = parent.rcmail.filters_list.rows; + for (var i=0; i<rows.length; i++) + if (rows[i] && rows[i].uid == id) { + rows[i].obj.cells[0].innerHTML = name; + if (disabled) + $(rows[i].obj).addClass('disabled'); + else + $(rows[i].obj).removeClass('disabled'); + break; } - break; + break; - case 'add': - var row, new_row, td; - var list = parent.rcmail.filters_list; + case 'add': + var row, new_row, td, list = parent.rcmail.filters_list; - if (!list) - break; + if (!list) + break; - for (var i=0; i<list.rows.length; i++) - if (list.rows[i] != null && String(list.rows[i].obj.id).match(/^rcmrow/)) - row = list.rows[i].obj; + for (var i=0; i<list.rows.length; i++) + if (list.rows[i] != null && String(list.rows[i].obj.id).match(/^rcmrow/)) + row = list.rows[i].obj; - if (row) - { + if (row) { new_row = parent.document.createElement('tr'); new_row.id = 'rcmrow'+id; - td = parent.document.createElement('td'); - new_row.appendChild(td); + td = parent.document.createElement('td'); + new_row.appendChild(td); list.insert_row(new_row, false); - if (disabled) - $(new_row).addClass('disabled'); - - if (row.cells[0].className) - td.className = row.cells[0].className; + if (disabled) + $(new_row).addClass('disabled'); + if (row.cells[0].className) + td.className = row.cells[0].className; - td.innerHTML = name; + td.innerHTML = name; list.highlight_row(id); parent.rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', true); } - else // refresh whole page - parent.rcmail.goto_url('plugin.managesieve'); - break; - } - - this.set_busy(false); + else // refresh whole page + parent.rcmail.goto_url('plugin.managesieve'); + break; + } - }; + this.set_busy(false); +}; - rcube_webmail.prototype.managesieve_select = function(list) - { - var id = list.get_single_selection(); - if (id != null) - this.load_managesieveframe(list.rows[id].uid); - }; +rcube_webmail.prototype.managesieve_select = function(list) +{ + var id = list.get_single_selection(); + if (id != null) + this.load_managesieveframe(list.rows[id].uid); +}; - rcube_webmail.prototype.managesieve_save = function() - { - if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') - { - var id = parent.rcmail.filters_list.get_single_selection(); +rcube_webmail.prototype.managesieve_save = function() +{ + if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') { + var id = parent.rcmail.filters_list.get_single_selection(); if (id != null) this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid; - } - this.gui_objects.sieveform.submit(); - }; + } + this.gui_objects.sieveform.submit(); +}; - // load filter frame - rcube_webmail.prototype.load_managesieveframe = function(id) - { - if (typeof(id) != 'undefined' && id != null) - { - this.enable_command('plugin.managesieve-del', true); - this.filters_listbuttons(); - } - else - this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); +// load filter frame +rcube_webmail.prototype.load_managesieveframe = function(id) +{ + if (typeof(id) != 'undefined' && id != null) { + this.enable_command('plugin.managesieve-del', true); + this.filters_listbuttons(); + } + else + this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); - if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) - { - target = window.frames[this.env.contentframe]; - this.set_busy(true, 'loading'); - target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_fid='+id; - } - }; + if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { + target = window.frames[this.env.contentframe]; + this.set_busy(true, 'loading'); + target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_fid='+id; + } +}; - // enable/disable Up/Down buttons - rcube_webmail.prototype.filters_listbuttons = function() - { - var id = this.filters_list.get_single_selection(); - var rows = this.filters_list.rows; +// enable/disable Up/Down buttons +rcube_webmail.prototype.filters_listbuttons = function() +{ + var id = this.filters_list.get_single_selection(), + rows = this.filters_list.rows; - for (var i=0; i<rows.length; i++) - { - if (rows[i] == null) { // removed row - } else if (i == id) { + for (var i=0; i<rows.length; i++) { + if (rows[i] == null) { // removed row + } + else if (i == id) { this.enable_command('plugin.managesieve-up', false); break; - } else { + } + else { this.enable_command('plugin.managesieve-up', true); break; - } - } + } + } - for (var i=rows.length-1; i>0; i--) - { - if (rows[i] == null) { // removed row - } else if (i == id) { + for (var i=rows.length-1; i>0; i--) { + if (rows[i] == null) { // removed row + } + else if (i == id) { this.enable_command('plugin.managesieve-down', false); break; - } else { + } + else { this.enable_command('plugin.managesieve-down', true); break; } - } - }; + } +}; - // operations on filters form - rcube_webmail.prototype.managesieve_ruleadd = function(id) - { - this.http_post('plugin.managesieve', '_act=ruleadd&_rid='+id); - }; +// operations on filters form +rcube_webmail.prototype.managesieve_ruleadd = function(id) +{ + this.http_post('plugin.managesieve', '_act=ruleadd&_rid='+id); +}; - rcube_webmail.prototype.managesieve_rulefill = function(content, id, after) - { - if (content != '') - { +rcube_webmail.prototype.managesieve_rulefill = function(content, id, after) +{ + if (content != '') { // create new element - var div = document.getElementById('rules'); - var row = document.createElement('div'); + var div = document.getElementById('rules'), + row = document.createElement('div'); this.managesieve_insertrow(div, row, after); // fill row after inserting (for IE) row.setAttribute('id', 'rulerow'+id); row.className = 'rulerow'; - row.innerHTML = content; + row.innerHTML = content; this.managesieve_formbuttons(div); - } - }; + } +}; - rcube_webmail.prototype.managesieve_ruledel = function(id) - { - if (confirm(this.get_label('managesieve.ruledeleteconfirm'))) - { +rcube_webmail.prototype.managesieve_ruledel = function(id) +{ + if (confirm(this.get_label('managesieve.ruledeleteconfirm'))) { var row = document.getElementById('rulerow'+id); row.parentNode.removeChild(row); this.managesieve_formbuttons(document.getElementById('rules')); - } - }; + } +}; - rcube_webmail.prototype.managesieve_actionadd = function(id) - { - this.http_post('plugin.managesieve', '_act=actionadd&_aid='+id); - }; +rcube_webmail.prototype.managesieve_actionadd = function(id) +{ + this.http_post('plugin.managesieve', '_act=actionadd&_aid='+id); +}; - rcube_webmail.prototype.managesieve_actionfill = function(content, id, after) - { - if (content != '') - { - var div = document.getElementById('actions'); - var row = document.createElement('div'); +rcube_webmail.prototype.managesieve_actionfill = function(content, id, after) +{ + if (content != '') { + var div = document.getElementById('actions'), + row = document.createElement('div'); this.managesieve_insertrow(div, row, after); // fill row after inserting (for IE) row.className = 'actionrow'; row.setAttribute('id', 'actionrow'+id); - row.innerHTML = content; + row.innerHTML = content; - this.managesieve_formbuttons(div); - } - }; + this.managesieve_formbuttons(div); + } +}; - rcube_webmail.prototype.managesieve_actiondel = function(id) - { - if (confirm(this.get_label('managesieve.actiondeleteconfirm'))) - { +rcube_webmail.prototype.managesieve_actiondel = function(id) +{ + if (confirm(this.get_label('managesieve.actiondeleteconfirm'))) { var row = document.getElementById('actionrow'+id); row.parentNode.removeChild(row); this.managesieve_formbuttons(document.getElementById('actions')); - } - }; + } +}; - // insert rule/action row in specified place on the list - rcube_webmail.prototype.managesieve_insertrow = function(div, row, after) - { - for (var i=0; i<div.childNodes.length; i++) - { - if (div.childNodes[i].id == (div.id == 'rules' ? 'rulerow' : 'actionrow') + after) +// insert rule/action row in specified place on the list +rcube_webmail.prototype.managesieve_insertrow = function(div, row, after) +{ + for (var i=0; i<div.childNodes.length; i++) { + if (div.childNodes[i].id == (div.id == 'rules' ? 'rulerow' : 'actionrow') + after) break; - } + } - if (div.childNodes[i+1]) - div.insertBefore(row, div.childNodes[i+1]); - else - div.appendChild(row); - } + if (div.childNodes[i+1]) + div.insertBefore(row, div.childNodes[i+1]); + else + div.appendChild(row); +}; - // update Delete buttons status - rcube_webmail.prototype.managesieve_formbuttons = function(div) - { - var buttons = new Array(); - var i, j=0; - // count and get buttons - for (i=0; i<div.childNodes.length; i++) - { - if (div.id == 'rules' && div.childNodes[i].id) - { +// update Delete buttons status +rcube_webmail.prototype.managesieve_formbuttons = function(div) +{ + var i, button, buttons = []; + + // count and get buttons + for (i=0; i<div.childNodes.length; i++) { + if (div.id == 'rules' && div.childNodes[i].id) { if (/rulerow/.test(div.childNodes[i].id)) buttons.push('ruledel' + div.childNodes[i].id.replace(/rulerow/, '')); - } - else if (div.childNodes[i].id) - { + } + else if (div.childNodes[i].id) { if (/actionrow/.test(div.childNodes[i].id)) buttons.push( 'actiondel' + div.childNodes[i].id.replace(/actionrow/, '')); - } - } + } + } - for (i=0; i<buttons.length; i++) - { - var button = document.getElementById(buttons[i]); - if (i>0 || buttons.length>1) - { + for (i=0; i<buttons.length; i++) { + button = document.getElementById(buttons[i]); + if (i>0 || buttons.length>1) { $(button).removeClass('disabled'); button.removeAttribute('disabled'); - } - else - { + } + else { $(button).addClass('disabled'); button.setAttribute('disabled', true); - } - } - } + } + } +}; - // Set change - rcube_webmail.prototype.managesieve_set = function() - { - var script = $(this.gui_objects.filtersetslist).val(); - location.href = this.env.comm_path+'&_action=plugin.managesieve&_set='+script; - }; +// Set change +rcube_webmail.prototype.managesieve_set = function() +{ + var script = $(this.gui_objects.filtersetslist).val(); + location.href = this.env.comm_path+'&_action=plugin.managesieve&_set='+script; +}; - // Script download - rcube_webmail.prototype.managesieve_setget = function() - { - var script = $(this.gui_objects.filtersetslist).val(); - location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+script; - }; +// Script download +rcube_webmail.prototype.managesieve_setget = function() +{ + var script = $(this.gui_objects.filtersetslist).val(); + location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+script; +}; - // Set activate - rcube_webmail.prototype.managesieve_setact = function() - { - if (!this.gui_objects.filtersetslist) - return false; +// Set activate +rcube_webmail.prototype.managesieve_setact = function() +{ + if (!this.gui_objects.filtersetslist) + return false; - var script = this.gui_objects.filtersetslist.value; - this.http_post('plugin.managesieve', '_act=setact&_set='+script); - }; + var script = this.gui_objects.filtersetslist.value, + action = (script == rcmail.env.active_set ? 'deact' : 'setact'); - // Set activate flag in sets list after set activation - rcube_webmail.prototype.managesieve_reset = function(name) - { - if (!this.gui_objects.filtersetslist || !name) - return false; + this.http_post('plugin.managesieve', '_act='+action+'&_set='+script); +}; - var opts = this.gui_objects.filtersetslist.getElementsByTagName('option'), - label = ' (' + this.get_label('managesieve.active') + ')', - regx = new RegExp(RegExp.escape(label)); - - for (var x=0; x<opts.length; x++) - if (opts[x].value != name && opts[x].innerHTML.match(regx)) - opts[x].innerHTML = opts[x].innerHTML.replace(regx, ''); - else if (opts[x].value == name) - opts[x].innerHTML = opts[x].innerHTML + label; - }; +// Set activate flag in sets list after set activation +rcube_webmail.prototype.managesieve_reset = function() +{ + if (!this.gui_objects.filtersetslist) + return false; - // Set delete - rcube_webmail.prototype.managesieve_setdel = function() - { - if (!this.gui_objects.filtersetslist) - return false; + var list = this.gui_objects.filtersetslist, + opts = list.getElementsByTagName('option'), + label = ' (' + this.get_label('managesieve.active') + ')', + regx = new RegExp(RegExp.escape(label)+'$'); - if (!confirm(this.get_label('managesieve.setdeleteconfirm'))) - return false; + for (var x=0; x<opts.length; x++) { + if (opts[x].value != rcmail.env.active_set && opts[x].innerHTML.match(regx)) + opts[x].innerHTML = opts[x].innerHTML.replace(regx, ''); + else if (opts[x].value == rcmail.env.active_set) + opts[x].innerHTML = opts[x].innerHTML + label; + } - var script = this.gui_objects.filtersetslist.value; - this.http_post('plugin.managesieve', '_act=setdel&_set='+script); - }; + // change title of setact button + $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset' + + (list.value == rcmail.env.active_set ? 'deact' : 'act'))); +}; - // Set add - rcube_webmail.prototype.managesieve_setadd = function() - { - this.filters_list.clear_selection(); - this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); +// Set delete +rcube_webmail.prototype.managesieve_setdel = function() +{ + if (!this.gui_objects.filtersetslist) + return false; - if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) - { - target = window.frames[this.env.contentframe]; - this.set_busy(true, 'loading'); - target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1'; - } - }; + if (!confirm(this.get_label('managesieve.setdeleteconfirm'))) + return false; - rcube_webmail.prototype.managesieve_reload = function(set) - { - this.env.reload_set = set; - window.setTimeout(function() { - location.href = rcmail.env.comm_path + '&_action=plugin.managesieve' - + (rcmail.env.reload_set ? '&_set=' + rcmail.env.reload_set : '') - }, 500); - }; + var script = this.gui_objects.filtersetslist.value; + this.http_post('plugin.managesieve', '_act=setdel&_set='+script); +}; -} +// Set add +rcube_webmail.prototype.managesieve_setadd = function() +{ + this.filters_list.clear_selection(); + this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); + + if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { + target = window.frames[this.env.contentframe]; + this.set_busy(true, 'loading'); + target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1'; + } +}; + +rcube_webmail.prototype.managesieve_reload = function(set) +{ + this.env.reload_set = set; + window.setTimeout(function() { + location.href = rcmail.env.comm_path + '&_action=plugin.managesieve' + + (rcmail.env.reload_set ? '&_set=' + rcmail.env.reload_set : '') + }, 500); +}; diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php index 36746782e..0d9042eff 100644 --- a/plugins/managesieve/managesieve.php +++ b/plugins/managesieve/managesieve.php @@ -156,11 +156,11 @@ class managesieve extends rcube_plugin { if ($this->sieve->script->update_rule($fid, $this->script[$fid-1]) !== false && $this->sieve->script->update_rule($fid-1, $this->script[$fid]) !== false) - $result = $this->sieve->save(); + $result = $this->sieve->save(); if ($result) { // $this->rc->output->show_message('managesieve.filtersaved', 'confirmation'); - $this->rc->output->command('managesieve_updatelist', 'up', '', $fid); + $this->rc->output->command('managesieve_updatelist', 'up', '', $fid); } else $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); } @@ -171,15 +171,15 @@ class managesieve extends rcube_plugin { if ($this->sieve->script->update_rule($fid, $this->script[$fid+1]) !== false && $this->sieve->script->update_rule($fid+1, $this->script[$fid]) !== false) - $result = $this->sieve->save(); + $result = $this->sieve->save(); if ($result === true) { // $this->rc->output->show_message('managesieve.filtersaved', 'confirmation'); - $this->rc->output->command('managesieve_updatelist', 'down', '', $fid); + $this->rc->output->command('managesieve_updatelist', 'down', '', $fid); } else { $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); } - } + } } else if ($action=='delete' && !$error) { @@ -189,45 +189,57 @@ class managesieve extends rcube_plugin $result = $this->sieve->save(); if ($result === true) { - $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation'); - $this->rc->output->command('managesieve_updatelist', 'delete', '', $fid); + $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation'); + $this->rc->output->command('managesieve_updatelist', 'delete', '', $fid); } else { $this->rc->output->show_message('managesieve.filterdeleteerror', 'error'); } - } + } } else if ($action=='setact' && !$error) { $script_name = get_input_value('_set', RCUBE_INPUT_GPC); - $result = $this->sieve->activate($script_name); + $result = $this->sieve->activate($script_name); - if ($result === true) { + if ($result === true) { $this->rc->output->set_env('active_set', $script_name); - $this->rc->output->show_message('managesieve.setactivated', 'confirmation'); - $this->rc->output->command('enable_command', 'plugin.managesieve-setact', false); - $this->rc->output->command('managesieve_reset', $script_name); - $_SESSION['managesieve_active'] = $script_name; - } else { + $this->rc->output->show_message('managesieve.setactivated', 'confirmation'); + $this->rc->output->command('managesieve_reset'); + $_SESSION['managesieve_active'] = $script_name; + } else { $this->rc->output->show_message('managesieve.setactivateerror', 'error'); - } + } + } + else if ($action=='deact' && !$error) + { + $result = $this->sieve->deactivate(); + + if ($result === true) { + $this->rc->output->set_env('active_set', ''); + $this->rc->output->show_message('managesieve.setdeactivated', 'confirmation'); + $this->rc->output->command('managesieve_reset'); + $_SESSION['managesieve_active'] = ''; + } else { + $this->rc->output->show_message('managesieve.setdeactivateerror', 'error'); + } } else if ($action=='setdel' && !$error) { $script_name = get_input_value('_set', RCUBE_INPUT_GPC); - $result = $this->sieve->remove($script_name); + $result = $this->sieve->remove($script_name); - if ($result === true) { - $this->rc->output->show_message('managesieve.setdeleted', 'confirmation'); - $this->rc->output->command('managesieve_reload'); - $this->rc->session->remove('managesieve_current'); - } else { + if ($result === true) { + $this->rc->output->show_message('managesieve.setdeleted', 'confirmation'); + $this->rc->output->command('managesieve_reload'); + $this->rc->session->remove('managesieve_current'); + } else { $this->rc->output->show_message('managesieve.setdeleteerror', 'error'); - } + } } else if ($action=='setget') { $script_name = get_input_value('_set', RCUBE_INPUT_GPC); - $script = $this->sieve->get_script($script_name); + $script = $this->sieve->get_script($script_name); if (PEAR::isError($script)) exit; @@ -624,8 +636,8 @@ class managesieve extends rcube_plugin // set client env $this->rc->output->add_gui_object('filtersetslist', $attrib['id']); - $this->rc->output->add_label('managesieve.setdeleteconfirm'); - $this->rc->output->add_label('managesieve.active'); + $this->rc->output->add_label('managesieve.setdeleteconfirm', + 'managesieve.active', 'managesieve.filtersetact', 'managesieve.filtersetdeact'); return $out; } diff --git a/plugins/managesieve/skins/default/templates/managesieve.html b/plugins/managesieve/skins/default/templates/managesieve.html index a88c244a8..94cd1f1cc 100644 --- a/plugins/managesieve/skins/default/templates/managesieve.html +++ b/plugins/managesieve/skins/default/templates/managesieve.html @@ -31,7 +31,7 @@ <div id="filtersetsbuttons"> <roundcube:button command="plugin.managesieve-setadd" type="link" class="buttonPas setadd" classSel="button setaddsel" classAct="button setadd" title="managesieve.filtersetadd" content=" " /> <roundcube:button command="plugin.managesieve-setdel" type="link" class="buttonPas setdel" classSel="button setdelsel" classAct="button setdel" title="managesieve.filtersetdel" content=" " /> -<roundcube:button command="plugin.managesieve-setact" type="link" class="buttonPas setset" classSel="button setsetsel" classAct="button setset" title="managesieve.filtersetact" content=" " /> +<roundcube:button command="plugin.managesieve-setact" type="link" class="buttonPas setset" classSel="button setsetsel" classAct="button setset" content=" " /> <roundcube:button command="plugin.managesieve-setget" type="link" class="buttonPas setget" classSel="button setgetsel" classAct="button setget" title="managesieve.filtersetget" content=" " /> </div> <div id="filtersetselect"> |
