summaryrefslogtreecommitdiff
path: root/plugins/managesieve
diff options
context:
space:
mode:
authoralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2011-09-04 06:44:18 +0000
committeralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2011-09-04 06:44:18 +0000
commitefe8de0b5b3dcc305cb8b353fd4dce8913052005 (patch)
tree02af1ea92e87c3eb04906a8ede98cfedd8581f75 /plugins/managesieve
parent6b0b80d957e05b5dfacf4ea070ebf2ff0dbdd803 (diff)
- Added possibility to create a filter based on selected message "in-place"
git-svn-id: https://svn.roundcube.net/trunk@5155 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'plugins/managesieve')
-rw-r--r--plugins/managesieve/Changelog2
-rw-r--r--plugins/managesieve/localization/en_US.inc6
-rw-r--r--plugins/managesieve/localization/pl_PL.inc4
-rw-r--r--plugins/managesieve/managesieve.js180
-rw-r--r--plugins/managesieve/managesieve.php150
-rw-r--r--plugins/managesieve/skins/default/filter.pngbin0 -> 547 bytes
-rw-r--r--plugins/managesieve/skins/default/managesieve.css17
-rw-r--r--plugins/managesieve/skins/default/managesieve_mail.css63
-rw-r--r--plugins/managesieve/skins/default/templates/filteredit.html7
9 files changed, 378 insertions, 51 deletions
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index 4472ccf21..7c056fb76 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -1,3 +1,5 @@
+- Added possibility to create a filter based on selected message "in-place"
+
* version 4.3 [2011-07-28]
-----------------------------------------------------------
- Fixed handling of error in Net_Sieve::listScripts()
diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc
index f08357ed9..559e9a06c 100644
--- a/plugins/managesieve/localization/en_US.inc
+++ b/plugins/managesieve/localization/en_US.inc
@@ -77,6 +77,9 @@ $labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
+$labels['filtercreate'] = 'Create filter';
+$labels['usedata'] = 'Use following data in the filter:';
+$labels['nextstep'] = 'Next Step';
$messages = array();
$messages['filterunknownerror'] = 'Unknown server error';
@@ -100,6 +103,7 @@ $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filte
$messages['setcreateerror'] = 'Unable to create filters set. Server error occured';
$messages['setcreated'] = 'Filters set created successfully';
$messages['emptyname'] = 'Unable to create filters set. Empty set name';
-$messages['nametoolong'] = 'Unable to create filters set. Name too long'
+$messages['nametoolong'] = 'Unable to create filters set. Name too long';
+$messages['nodata'] = 'At least one position must be selected!';
?>
diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc
index 290dd1a46..4b088f0a6 100644
--- a/plugins/managesieve/localization/pl_PL.inc
+++ b/plugins/managesieve/localization/pl_PL.inc
@@ -78,6 +78,9 @@ $labels['flagdeleted'] = 'Usunięta';
$labels['flaganswered'] = 'Z odpowiedzią';
$labels['flagflagged'] = 'Oflagowana';
$labels['flagdraft'] = 'Szkic';
+$labels['filtercreate'] = 'Utwóż filtr';
+$labels['usedata'] = 'Użyj następujących danych do utworzenia filtra:';
+$labels['nextstep'] = 'Następny krok';
$messages = array();
$messages['filterunknownerror'] = 'Nieznany błąd serwera';
@@ -102,5 +105,6 @@ $messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serw
$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie';
$messages['emptyname'] = 'Nie można utworzyć zbioru filtrów. Pusta nazwa zbioru';
$messages['nametoolong'] = 'Nie można utworzyć zbioru filtrów. Nazwa zbyt długa'
+$messages['nodata'] = 'Należy wybrać co najmniej jedną pozycję!';
?>
diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js
index ec6247aff..9efbfe6b4 100644
--- a/plugins/managesieve/managesieve.js
+++ b/plugins/managesieve/managesieve.js
@@ -1,43 +1,59 @@
-/* Sieve Filters (tab) */
+/* (Manage)Sieve Filters */
if (window.rcmail) {
rcmail.addEventListener('init', function(evt) {
+ // add managesieve-create command to message_commands array,
+ // so it's state will be updated on message selection/unselection
+ if (rcmail.env.task == 'mail') {
+ if (rcmail.env.action != 'show')
+ rcmail.env.message_commands.push('managesieve-create');
+ else
+ rcmail.enable_command('managesieve-create', true);
+ }
+ else {
+ var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink'),
+ button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve')
+ .attr('title', rcmail.gettext('managesieve.managefilters'))
+ .html(rcmail.gettext('managesieve.filters'))
+ .appendTo(tab);
- 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'))
- .appendTo(tab);
+ // add tab
+ rcmail.add_element(tab, 'tabs');
+ }
- // add button and register commands
- rcmail.add_element(tab, 'tabs');
- rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }, true);
- rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }, true);
- rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() }, true);
- rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() }, true);
- rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() }, true);
- rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() }, true);
- rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }, true);
- rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }, true);
- 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.task == 'mail' || rcmail.env.action.indexOf('plugin.managesieve') != -1) {
+ // Create layer for form tips
+ if (!rcmail.env.framed) {
+ rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
+ rcmail.env.ms_tip_layer.appendTo(document.body);
+ }
+ }
- if (rcmail.env.action == 'plugin.managesieve') {
+ // register commands
+ rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() });
+ rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() });
+ rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() });
+ rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() });
+ rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() });
+ rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() });
+ rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() });
+ rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() });
+ rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() });
+ rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() });
+
+ if (rcmail.env.action == 'plugin.managesieve' || rcmail.env.action == 'plugin.managesieve-save') {
if (rcmail.gui_objects.sieveform) {
rcmail.enable_command('plugin.managesieve-save', true);
+ // resize dialog window
+ if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
+ parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform);
+ }
+ $('input[type="text"]:first', rcmail.gui_objects.sieveform).focus();
}
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);
}
- // Create layer for form tips
- if (!rcmail.env.framed) {
- rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
- rcmail.env.ms_tip_layer.appendTo(document.body);
- }
-
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});
@@ -479,17 +495,19 @@ rcube_webmail.prototype.managesieve_reload = function(set)
// Register onmouse(leave/enter) events for tips on specified form element
rcube_webmail.prototype.managesieve_tip_register = function(tips)
{
+ var n, framed = parent.rcmail,
+ tip = framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;
+
for (var n in tips) {
$('#'+tips[n][0])
.bind('mouseenter', {str: tips[n][1]},
function(e) {
var offset = $(this).offset(),
- tip = rcmail.env.framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer,
left = offset.left,
top = offset.top - 12;
- if (rcmail.env.framed) {
- offset = $(parent.document.getElementById('filter-box')).offset();
+ if (framed) {
+ offset = $((rcmail.env.task == 'mail' ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
top += offset.top;
left += offset.left;
}
@@ -499,12 +517,7 @@ rcube_webmail.prototype.managesieve_tip_register = function(tips)
tip.css({left: left, top: top}).show();
})
- .bind('mouseleave',
- function(e) {
- var tip = parent.rcmail && parent.rcmail.env.ms_tip_layer ?
- parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;
- tip.hide();
- });
+ .bind('mouseleave', function(e) { tip.hide(); });
}
};
@@ -579,3 +592,98 @@ function action_type_select(id)
elems[x].style.display = !enabled[x] ? 'none' : 'inline';
}
};
+
+/*********************************************************/
+/********* Mail UI methods *********/
+/*********************************************************/
+
+rcube_webmail.prototype.managesieve_create = function()
+{
+ if (!rcmail.env.sieve_headers || !rcmail.env.sieve_headers.length)
+ return;
+
+ var i, html, buttons = {}, dialog = $("#sievefilterform");
+
+ // create dialog window
+ if (!dialog.length) {
+ dialog = $('<div id="sievefilterform"></div>');
+ $('body').append(dialog);
+ }
+
+ // build dialog window content
+ html = '<fieldset><legend>'+this.gettext('managesieve.usedata')+'</legend><ul>';
+ for (i in rcmail.env.sieve_headers)
+ html += '<li><input type="checkbox" name="headers[]" id="sievehdr'+i+'" value="'+i+'" checked="checked" />'
+ +'<label for="sievehdr'+i+'">'+rcmail.env.sieve_headers[i][0]+':</label> '+rcmail.env.sieve_headers[i][1]+'</li>';
+ html += '</ul></fieldset>';
+
+ dialog.html(html);
+
+ // [Next Step] button action
+ buttons[this.gettext('managesieve.nextstep')] = function () {
+ // check if there's at least one checkbox checked
+ var hdrs = $('input[name="headers[]"]:checked', dialog);
+ if (!hdrs.length) {
+ alert(rcmail.gettext('managesieve.nodata'));
+ return;
+ }
+
+ // build frame URL
+ var url = rcmail.get_task_url('mail');
+ url = rcmail.add_url(url, '_action', 'plugin.managesieve');
+ url = rcmail.add_url(url, '_framed', 1);
+
+ hdrs.map(function() {
+ var val = rcmail.env.sieve_headers[this.value];
+ url = rcmail.add_url(url, 'r['+this.value+']', val[0]+':'+val[1]);
+ });
+
+ // load form in the iframe
+ var frame = $('<iframe>').attr({src: url, frameborder: 0})
+ frame.height(dialog.height()); // temp.
+ dialog.empty().append(frame);
+ dialog.dialog('dialog').resize();
+
+ // Change [Next Step] button with [Save] button
+ buttons = {};
+ buttons[rcmail.gettext('save')] = function() {
+ var win = $('iframe', dialog).get(0).contentWindow;
+ win.rcmail.managesieve_save();
+ };
+ dialog.dialog('option', 'buttons', buttons);
+ };
+
+ // show dialog window
+ dialog.dialog({
+ modal: false,
+ resizable: !bw.ie6,
+ closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons
+ title: this.gettext('managesieve.newfilter'),
+ close: function() { rcmail.managesieve_dialog_close(); },
+ buttons: buttons,
+ minWidth: 600,
+ minHeight: 300
+ }).show();
+
+ this.env.managesieve_dialog = dialog;
+}
+
+rcube_webmail.prototype.managesieve_dialog_close = function()
+{
+ var dialog = this.env.managesieve_dialog;
+
+ // BUG(?): if we don't remove the iframe first, it will be reloaded
+ dialog.html('');
+ dialog.dialog('destroy').hide();
+}
+
+rcube_webmail.prototype.managesieve_dialog_resize = function(o)
+{
+ var dialog = this.env.managesieve_dialog,
+ win = $(window), form = $(o);
+ width = form.width(), height = form.height(),
+ w = win.width(), h = win.height();
+
+ dialog.dialog('option', { height: Math.min(h-20, height+120), width: Math.min(w-20, width+65) })
+ .dialog('option', 'position', ['center', 'center']); // only works in a separate call (!?)
+}
diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php
index 8ee3b3bde..41a60cf66 100644
--- a/plugins/managesieve/managesieve.php
+++ b/plugins/managesieve/managesieve.php
@@ -13,6 +13,7 @@
* Configuration (see config.inc.php.dist)
*
* Copyright (C) 2008-2011, The Roundcube Dev Team
+ * Copyright (C) 2011, Kolab Systems AG
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
@@ -32,7 +33,7 @@
class managesieve extends rcube_plugin
{
- public $task = 'settings';
+ public $task = 'mail|settings';
private $rc;
private $sieve;
@@ -50,20 +51,102 @@ class managesieve extends rcube_plugin
function init()
{
- // add Tab label/title
- $this->add_texts('localization/', array('filters','managefilters'));
+ $this->rc = rcmail::get_instance();
// register actions
$this->register_action('plugin.managesieve', array($this, 'managesieve_actions'));
$this->register_action('plugin.managesieve-save', array($this, 'managesieve_save'));
+ if ($this->rc->task == 'settings') {
+ // load localization
+ $this->add_texts('localization/', array('filters','managefilters'));
+
+ $this->include_script('managesieve.js');
+ }
+ else if ($this->rc->task == 'mail') {
+ // register message hook
+ $this->add_hook('message_headers_output', array($this, 'mail_headers'));
+
+ // inject Create Filter popup stuff
+ if (empty($this->rc->action) || $this->rc->action == 'show') {
+ $this->mail_task_handler();
+ }
+ }
+ }
+
+ /**
+ * Add UI elements to the 'mailbox view' and 'show message' UI.
+ */
+ function mail_task_handler()
+ {
+ // load localization
+ $this->add_texts('localization/');
+
+ // use jQuery for popup window
+ $this->require_plugin('jqueryui');
+
// include main js script
$this->include_script('managesieve.js');
+
+ // include styles
+ $skin = $this->rc->config->get('skin');
+ if (!file_exists($this->home."/skins/$skin/managesieve_mail.css"))
+ $skin = 'default';
+ $this->include_stylesheet("skins/$skin/managesieve_mail.css");
+
+ // add 'Create filter' item to message menu
+ $this->api->add_content(html::tag('li', null,
+ $this->api->output->button(array(
+ 'command' => 'managesieve-create',
+ 'label' => 'managesieve.filtercreate',
+ 'type' => 'link',
+ 'classact' => 'filterlink active',
+ 'class' => 'filterlink',
+ ))), 'messagemenu');
+
+ // register some labels/messages
+ $this->rc->output->add_label('managesieve.newfilter', 'managesieve.usedata',
+ 'managesieve.nodata', 'managesieve.nextstep', 'save');
}
+ /**
+ * Get message headers for popup window
+ */
+ function mail_headers($args)
+ {
+ $headers = $args['headers'];
+ $ret = array();
+
+ if ($headers->subject)
+ $ret[] = array('Subject', $headers->subject);
+
+ // @TODO: List-Id, others?
+ foreach (array('From', 'To') as $h) {
+ $hl = strtolower($h);
+ if ($headers->$hl) {
+ $list = $this->rc->imap->decode_address_list($headers->$hl);
+ foreach ($list as $item) {
+ if ($item['mailto']) {
+ $ret[] = array($h, $item['mailto']);
+ }
+ }
+ }
+ }
+
+ if ($this->rc->action == 'preview')
+ $this->rc->output->command('parent.set_env', array('sieve_headers' => $ret));
+ else
+ $this->rc->output->set_env('sieve_headers', $ret);
+
+
+ return $args;
+ }
+
+ /**
+ * Loads configuration, initializes plugin (including sieve connection)
+ */
function managesieve_start()
{
- $this->rc = rcmail::get_instance();
$this->load_config();
// register UI objects
@@ -169,6 +252,14 @@ class managesieve extends rcube_plugin
function managesieve_actions()
{
+ // load localization
+ $this->add_texts('localization/', array('filters','managefilters'));
+
+ // include main js script
+ if ($this->api->output->type == 'html') {
+ $this->include_script('managesieve.js');
+ }
+
// Init plugin and handle managesieve connection
$error = $this->managesieve_start();
@@ -298,12 +389,47 @@ class managesieve extends rcube_plugin
$this->rc->output->send();
}
+ else if ($this->rc->task == 'mail') {
+ // Initialize the form
+ $rules = get_input_value('r', RCUBE_INPUT_GET);
+ if (!empty($rules)) {
+ $i = 0;
+ foreach ($rules as $rule) {
+ list($header, $value) = explode(':', $rule, 2);
+ $tests[$i] = array(
+ 'type' => 'contains',
+ 'test' => 'header',
+ 'arg1' => $header,
+ 'arg2' => $value,
+ );
+ $i++;
+ }
+
+ $this->form = array(
+ 'join' => count($tests) > 1 ? 'allof' : 'anyof',
+ 'name' => '',
+ 'tests' => $tests,
+ 'actions' => array(
+ 0 => array('type' => 'fileinto'),
+ 1 => array('type' => 'stop'),
+ ),
+ );
+ }
+ }
$this->managesieve_send();
}
function managesieve_save()
{
+ // load localization
+ $this->add_texts('localization/', array('filters','managefilters'));
+
+ // include main js script
+ if ($this->api->output->type == 'html') {
+ $this->include_script('managesieve.js');
+ }
+
// Init plugin and handle managesieve connection
$error = $this->managesieve_start();
@@ -596,11 +722,17 @@ class managesieve extends rcube_plugin
if ($save && $fid !== false) {
$this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
- $this->rc->output->add_script(
- sprintf("rcmail.managesieve_updatelist('%s', '%s', %d, %d);",
- isset($new) ? 'add' : 'update', Q($this->form['name']),
- $fid, $this->form['disabled']),
- 'foot');
+ if ($this->rc->task != 'mail') {
+ $this->rc->output->add_script(
+ sprintf("rcmail.managesieve_updatelist('%s', '%s', %d, %d);",
+ isset($new) ? 'add' : 'update', Q($this->form['name']),
+ $fid, $this->form['disabled']),
+ 'foot');
+ }
+ else {
+ $this->rc->output->command('managesieve_dialog_close');
+ $this->rc->output->send('iframe');
+ }
}
else {
$this->rc->output->show_message('managesieve.filtersaveerror', 'error');
diff --git a/plugins/managesieve/skins/default/filter.png b/plugins/managesieve/skins/default/filter.png
new file mode 100644
index 000000000..a79ba1083
--- /dev/null
+++ b/plugins/managesieve/skins/default/filter.png
Binary files differ
diff --git a/plugins/managesieve/skins/default/managesieve.css b/plugins/managesieve/skins/default/managesieve.css
index 675c5d0dc..e416fd17e 100644
--- a/plugins/managesieve/skins/default/managesieve.css
+++ b/plugins/managesieve/skins/default/managesieve.css
@@ -1,6 +1,3 @@
-/***** Roundcube|Filters styles *****/
-
-
#filterslist
{
position: absolute;
@@ -168,6 +165,7 @@ body.iframe
{
min-width: 740px;
width: expression(Math.max(740, document.documentElement.clientWidth)+'px');
+ background-color: #F2F2F2;
}
#filter-form
@@ -294,3 +292,16 @@ span.sieve.error
{
width: 200px;
}
+
+/* fixes for popup window */
+
+body.iframe.mail
+{
+ margin: 0;
+ padding: 0;
+}
+
+body.iframe.mail #filter-form
+{
+ padding: 10px 5px 5px 5px;
+}
diff --git a/plugins/managesieve/skins/default/managesieve_mail.css b/plugins/managesieve/skins/default/managesieve_mail.css
new file mode 100644
index 000000000..5bb2a2825
--- /dev/null
+++ b/plugins/managesieve/skins/default/managesieve_mail.css
@@ -0,0 +1,63 @@
+#messagemenu li a.filterlink {
+ background-image: url(filter.png);
+ background-position: 7px 0;
+}
+
+#sievefilterform {
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background-color: #F2F2F2;
+ border: 1px solid #999999;
+ padding: 0;
+ margin: 5px;
+}
+
+#sievefilterform iframe {
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ width: 100%;
+ min-height: 100%; /* Chrome 14 bug */
+ background-color: #F2F2F2;
+ border: 0;
+ padding: 0;
+ margin: 0;
+}
+
+#sievefilterform ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ margin-top: 5px;
+}
+
+#sievefilterform fieldset {
+ margin: 5px;
+}
+
+#sievefilterform ul li {
+ margin-bottom: 5px;
+ white-space: nowrap;
+}
+
+#sievefilterform ul li input {
+ margin-right: 5px;
+}
+
+#sievefilterform label {
+ font-weight: bold;
+}
+
+#managesieve-tip
+{
+ width: 200px;
+ z-index: 100000;
+}
+
+span.sieve.error
+{
+ color: red;
+}
diff --git a/plugins/managesieve/skins/default/templates/filteredit.html b/plugins/managesieve/skins/default/templates/filteredit.html
index 8b1993528..6ecb03cae 100644
--- a/plugins/managesieve/skins/default/templates/filteredit.html
+++ b/plugins/managesieve/skins/default/templates/filteredit.html
@@ -5,13 +5,16 @@
<roundcube:include file="/includes/links.html" />
<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
</head>
-<body class="iframe">
+<body class="iframe<roundcube:exp expression="env:task != 'mail' ? '' : ' mail'" />">
+<roundcube:if condition="env:task != 'mail'" />
<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.filterdef" /></div>
+<roundcube:endif />
<div id="filter-form" class="boxcontent">
<roundcube:object name="filterform" />
+<roundcube:if condition="env:task != 'mail'" />
<div id="footer">
<div class="footerleft">
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
@@ -21,10 +24,10 @@
<input type="checkbox" id="disabled" name="_disabled" value="1" />
</div>
</div>
+<roundcube:endif />
</form>
</div>
-
</body>
</html>