summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/managesieve/Changelog1
-rw-r--r--plugins/managesieve/lib/rcube_sieve.php127
-rw-r--r--plugins/managesieve/localization/en_US.inc3
-rw-r--r--plugins/managesieve/localization/pl_PL.inc3
-rw-r--r--plugins/managesieve/managesieve.js706
-rw-r--r--plugins/managesieve/managesieve.php64
-rw-r--r--plugins/managesieve/skins/default/templates/managesieve.html2
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">