- Managesieve: Added import from Horde-INGO

- Managesieve: Support for more than one match using if+stop instead of if+elsif structures (#1486078)
- Managesieve: Support for selectively disabling rules within a single sieve script (#1485882)
- Managesieve: Added vertical splitter
release-0.6
alecpl 14 years ago
parent c16986be7f
commit 98c489e9f4

@ -1,6 +1,9 @@
CHANGELOG RoundCube Webmail
===========================
- Managesieve: import from Horde-INGO
- Managesieve: support for more than one match (#1486078)
- Managesieve: support for selectively disabling rules within a single sieve script (#1485882)
- Threaded message listing now available
- Added sorting by ARRIVAL and CC
- Message list columns configurable by the user

@ -1,3 +1,10 @@
* version 2.3 [2010-03-18]
-----------------------------------------------------------
- Added import from Horde-INGO
- Support for more than one match using if+stop instead of if+elsif structures (#1486078)
- Support for selectively disabling rules within a single sieve script (#1485882)
- Added vertical splitter
* version 2.2 [2010-02-06]
-----------------------------------------------------------
- Fix handling of "<>" characters in filter names (#1486477)

File diff suppressed because it is too large Load Diff

@ -46,6 +46,7 @@ $labels['newfilterset'] = 'New filters set';
$labels['active'] = 'active';
$labels['copyfromset'] = 'Copy filters from set';
$labels['none'] = '- none -';
$labels['filterdisabled'] = 'Filter disabled';
$messages = array();
$messages['filterunknownerror'] = 'Unknown server error';

@ -47,6 +47,7 @@ $labels['newfilterset'] = 'Nowy zbiór filtrów';
$labels['active'] = 'aktywny';
$labels['copyfromset'] = 'Skopiuj filtry ze zbioru';
$labels['none'] = '- brak -';
$labels['filterdisabled'] = 'Filtr wyłączony';
$messages = array();
$messages['filterunknownerror'] = 'Nieznany błąd serwera';

@ -26,9 +26,10 @@ if (window.rcmail) {
if (rcmail.env.action == 'plugin.managesieve')
{
if (rcmail.gui_objects.sieveform)
if (rcmail.gui_objects.sieveform) {
rcmail.enable_command('plugin.managesieve-save', true);
else {
}
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);
@ -47,6 +48,8 @@ if (window.rcmail) {
rcmail.filters_list.focus();
}
}
if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled)
$('#disabled').attr('checked', true);
});
/*********************************************************/
@ -91,7 +94,7 @@ if (window.rcmail) {
return i;
}
rcube_webmail.prototype.managesieve_updatelist = function(action, name, id)
rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled)
{
this.set_busy(true);
@ -114,7 +117,7 @@ if (window.rcmail) {
case 'down':
var rows = this.filters_list.rows;
var from;
var from, fromstatus, status;
// we need only to replace filter names...
for (var i=0; i<rows.length; i++)
@ -122,11 +125,15 @@ if (window.rcmail) {
if (rows[i]==null) { // removed row
continue;
} else if (rows[i].uid == id) {
from = rows[i].obj.cells[0];
from = rows[i].obj;
fromstatus = $(from).hasClass('disabled');
} else if (rows[i].uid == id+1){
name = rows[i].obj.cells[0].innerHTML;
rows[i].obj.cells[0].innerHTML = from.innerHTML;
from.innerHTML = name;
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;
}
@ -137,7 +144,7 @@ if (window.rcmail) {
case 'up':
var rows = this.filters_list.rows;
var from;
var from, status, fromstatus;
// we need only to replace filter names...
for (var i=0; i<rows.length; i++)
@ -145,12 +152,16 @@ if (window.rcmail) {
if (rows[i]==null) { // removed row
continue;
} else if (rows[i].uid == id-1) {
from = rows[i].obj.cells[0];
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;
rows[i].obj.cells[0].innerHTML = from.innerHTML;
from.innerHTML = name;
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;
}
}
@ -164,6 +175,10 @@ if (window.rcmail) {
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;
@ -186,6 +201,8 @@ if (window.rcmail) {
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;

@ -7,7 +7,7 @@
* It's clickable interface which operates on text scripts and communicates
* with server using managesieve protocol. Adds Filters tab in Settings.
*
* @version 2.2
* @version 2.3
* @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
*
* Configuration (see config.inc.php.dist)
@ -46,9 +46,7 @@ class managesieve extends rcube_plugin
function managesieve_start()
{
$rcmail = rcmail::get_instance();
$this->rc = &$rcmail;
$this->rc = rcmail::get_instance();
$this->load_config();
// register UI objects
@ -302,6 +300,7 @@ class managesieve extends rcube_plugin
foreach ($sizeitems as $item)
$items[] = $item;
$this->form['disabled'] = $_POST['_disabled'] ? true : false;
$this->form['join'] = $join=='allof' ? true : false;
$this->form['name'] = $name;
$this->form['tests'] = array();
@ -486,8 +485,10 @@ 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);",
isset($new) ? 'add' : 'update', Q($this->form['name']), $fid), 'foot');
$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
{
@ -504,10 +505,12 @@ class managesieve extends rcube_plugin
{
// Handle form action
if (isset($_GET['_framed']) || isset($_POST['_framed'])) {
if (isset($_GET['_newset']) || isset($_POST['_newset']))
if (isset($_GET['_newset']) || isset($_POST['_newset'])) {
$this->rc->output->send('managesieve.setedit');
else
}
else {
$this->rc->output->send('managesieve.filteredit');
}
} else {
$this->rc->output->set_pagetitle($this->gettext('filters'));
$this->rc->output->send('managesieve.managesieve');
@ -525,8 +528,12 @@ class managesieve extends rcube_plugin
$a_show_cols = array('managesieve.filtername');
foreach($this->script as $idx => $filter)
$result[] = array('managesieve.filtername' => $filter['name'], 'id' => $idx);
$result[] = array(
'managesieve.filtername' => $filter['name'],
'id' => $idx,
'class' => $filter['disabled'] ? 'disabled' : '',
);
// create XHTML table
$out = rcube_table_output($attrib, $result, $a_show_cols, 'id');
@ -722,7 +729,10 @@ class managesieve extends rcube_plugin
$out .= "</div>\n";
$out .= "</fieldset>\n";
if ($scr['disabled']) {
$this->rc->output->set_env('rule_disabled', true);
}
$this->rc->output->add_label('managesieve.ruledeleteconfirm');
$this->rc->output->add_label('managesieve.actiondeleteconfirm');
$this->rc->output->add_gui_object('sieveform', 'filterform');

@ -5,7 +5,6 @@
{
position: absolute;
left: 20px;
width: 220px;
top: 120px;
bottom: 30px;
border: 1px solid #999999;
@ -28,6 +27,11 @@
cursor: pointer;
}
#filters-table tbody tr.disabled td
{
color: #999999;
}
#filtersbuttons
{
position: absolute;
@ -38,7 +42,7 @@
#filtersetsbuttons
{
position: absolute;
left: 250px;
left: 230px;
top: 85px;
}
@ -131,7 +135,7 @@
#filtersetselect
{
position: absolute;
left: 380px;
left: 360px;
top: 90px;
}
@ -139,7 +143,6 @@
{
position: absolute;
top: 120px;
left: 250px;
right: 20px;
bottom: 30px;
border: 1px solid #999999;
@ -170,12 +173,6 @@ body.iframe
padding: 20px 10px 10px 10px;
}
#filter-form input, select
{
font-size: 10pt;
font-family: inherit;
}
fieldset
{
background-color: white;
@ -248,3 +245,24 @@ span.label
font-size: 10px;
white-space: nowrap;
}
#footer
{
padding-top: 5px;
width: 100%;
}
#footer .footerleft
{
padding-left: 2px;
white-space: nowrap;
float: left;
}
#footer .footerright
{
padding-right: 2px;
white-space: nowrap;
text-align: right;
float: right;
}

@ -99,9 +99,15 @@ function rule_join_radio(value)
<div id="filter-form">
<roundcube:object name="filterform" />
<p>
<div id="footer">
<div class="footerleft">
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
</p>
</div>
<div class="footerright">
<label for="disabled"><roundcube:label name="managesieve.filterdisabled" /></label>
<input type="checkbox" id="disabled" name="_disabled" value="1" />
</div>
</div>
</form>
</div>

@ -5,6 +5,15 @@
<roundcube:include file="/includes/links.html" />
<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
<script type="text/javascript" src="/functions.js"></script>
<script type="text/javascript" src="/splitter.js"></script>
<style type="text/css">
#filterslist { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter-5 : 210" />px; }
#filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px;
<roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220).')+\\'px\\');') : ''" />
}
</style>
</head>
<body>
@ -32,7 +41,10 @@
<div id="filterslist">
<roundcube:object name="filterslist" id="filters-table" class="records-table" cellspacing="0" summary="Filters list" />
</div>
<script type="text/javascript">
var sieveviewsplit = new rcube_splitter({id:'sieveviewsplitter', p1: 'filterslist', p2: 'filter-box', orientation: 'v', relative: true, start: 215});
rcmail.add_onload('sieveviewsplit.init()');
</script>
<div id="filter-box">
<roundcube:object name="filterframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
</div>

Loading…
Cancel
Save