implemented raw editor for sieve filter sets (#5473)

* implemented raw editor for sieve filter sets

Signed-off-by: Martin Fischer <martin.fischer@fau.de>

* updated according to comments
pull/5507/head
Martin Fischer 8 years ago committed by Aleksander Machniak
parent 0e5a167cd2
commit 7215013b53

@ -84,11 +84,12 @@ class rcube_sieve_engine
{
// register UI objects
$this->rc->output->add_handlers(array(
'filterslist' => array($this, 'filters_list'),
'filtersetslist' => array($this, 'filtersets_list'),
'filterframe' => array($this, 'filter_frame'),
'filterform' => array($this, 'filter_form'),
'filtersetform' => array($this, 'filterset_form'),
'filterslist' => array($this, 'filters_list'),
'filtersetslist' => array($this, 'filtersets_list'),
'filterframe' => array($this, 'filter_frame'),
'filterform' => array($this, 'filter_form'),
'filtersetform' => array($this, 'filterset_form'),
'filterseteditraw' => array($this, 'filterset_editraw'),
));
// connect to managesieve server
@ -487,10 +488,30 @@ class rcube_sieve_engine
);
}
}
$this->send();
}
function saveraw()
{
// Init plugin and handle managesieve connection
$error = $this->start();
$this->rc->request_security_check(rcube_utils::INPUT_POST);
$script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST);
$result = $this->sieve->save_script($script_name, $_POST['rawsetcontent']);
if ($result == true) {
$this->rc->output->show_message('managesieve.setupdated', 'confirmation');
$this->send();
} else {
$this->rc->output->show_message('managesieve.filtersaveerror', 'error');
$this->send();
}
}
function save()
{
// Init plugin and handle managesieve connection
@ -1160,6 +1181,9 @@ class rcube_sieve_engine
if (isset($_GET['_newset']) || isset($_POST['_newset'])) {
$this->rc->output->send('managesieve.setedit');
}
else if (isset($_GET['_seteditraw']) || isset($_POST['_seteditraw'])) {
$this->rc->output->send('managesieve.seteditraw');
}
else {
$this->rc->output->send('managesieve.filteredit');
}
@ -1254,6 +1278,38 @@ class rcube_sieve_engine
{
return $this->rc->output->frame($attrib, true);
}
function filterset_editraw($attrib)
{
$scriptName = isset($_GET['_set']) ? $_GET['_set'] : $_POST['_set'];
$script = $this->sieve->get_script($scriptName);
if ($script != false) {
$out = '<form name="filtersetrawform" action="./" method="post" enctype="multipart/form-data">'."\n";
$hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $this->rc->task));
$hiddenfields->add(array('name' => '_action', 'value' => 'plugin.managesieve-saveraw'));
$hiddenfields->add(array('name' => '_set', 'value' => $scriptName));
$hiddenfields->add(array('name' => '_seteditraw', 'value' => 1));
$hiddenfields->add(array('name' => '_framed', 'value' => ($_POST['_framed'] || $_GET['_framed'] ? 1 : 0)));
$out .= $hiddenfields->show();
$txtarea = new html_textarea(array(
'id' => 'rawfiltersettxt',
'name' => 'rawsetcontent',
'rows' => '15'
));
$out .= $txtarea->show($script);
//$out .= '<textarea id="rawfiltersettxt" name="rawsetcontent" rows="15">' . $script . '</textarea>';
$this->rc->output->add_gui_object('sievesetrawform', 'filtersetrawform');
return $out;
} else {
$this->rc->output->show_message('managesieve.filterunknownerror', 'error');
return '';
}
}
function filterset_form($attrib)
{

@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Filtersatz anlegen';
$labels['filtersetdel'] = 'Aktuellen Filtersatz löschen';
$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtersatzname';
$labels['newfilterset'] = 'Neuer Filtersatz';
@ -216,6 +217,7 @@ $messages['setdeleteerror'] = 'Serverfehler beim Löschen des gewählten Filters
$messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.';
$messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.';
$messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.';
$messages['setupdated'] = 'Filtersatz wurde erfolgreich aktualisiert';
$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
$messages['setcreateerror'] = 'Serverfehler beim Erstellen des Filtersatzes.';
$messages['setcreated'] = 'Filter erfolgreich erstellt.';

@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Filtersatz anlegen';
$labels['filtersetdel'] = 'Aktuellen Filtersatz löschen';
$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtersatzname';
$labels['newfilterset'] = 'Neuer Filtersatz';
@ -217,6 +218,7 @@ $messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Ser
$messages['setactivated'] = 'Filtersatz wurde erfolgreich aktiviert';
$messages['setdeactivated'] = 'Filtersatz wurde erfolgreich deaktiviert';
$messages['setdeleted'] = 'Filtersatz wurde erfolgreich gelöscht';
$messages['setupdated'] = 'Filtersatz wurde erfolgreich aktualisiert';
$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
$messages['setcreateerror'] = 'Erstellen von Filter Sätzen nicht möglich. Es ist ein Serverfehler aufgetreten.';
$messages['setcreated'] = 'Filtersatz wurde erfolgreich erstellt';

@ -68,6 +68,7 @@ $labels['filtersetadd'] = 'Add filters set';
$labels['filtersetdel'] = 'Delete current filters set';
$labels['filtersetact'] = 'Activate current filters set';
$labels['filtersetdeact'] = 'Deactivate current filters set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filters set name';
$labels['newfilterset'] = 'New filters set';
@ -188,6 +189,7 @@ $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server err
$messages['setactivated'] = 'Filters set activated successfully.';
$messages['setdeactivated'] = 'Filters set deactivated successfully.';
$messages['setdeleted'] = 'Filters set deleted successfully.';
$messages['setupdated'] = 'Filters set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
$messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.';
$messages['setcreated'] = 'Filters set created successfully.';

@ -70,6 +70,7 @@ $labels['filtersetadd'] = 'Add filters set';
$labels['filtersetdel'] = 'Delete current filters set';
$labels['filtersetact'] = 'Activate current filters set';
$labels['filtersetdeact'] = 'Deactivate current filters set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filters set name';
$labels['newfilterset'] = 'New filters set';
@ -216,6 +217,7 @@ $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server err
$messages['setactivated'] = 'Filters set activated successfully.';
$messages['setdeactivated'] = 'Filters set deactivated successfully.';
$messages['setdeleted'] = 'Filters set deleted successfully.';
$messages['setupdated'] = 'Filters set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
$messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.';
$messages['setcreated'] = 'Filters set created successfully.';

@ -72,6 +72,7 @@ $labels['filtersetadd'] = 'Add filters set';
$labels['filtersetdel'] = 'Delete current filters set';
$labels['filtersetact'] = 'Activate current filters set';
$labels['filtersetdeact'] = 'Deactivate current filters set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filters set name';
$labels['newfilterset'] = 'New filters set';
@ -221,6 +222,7 @@ $messages['setdeleteerror'] = 'Unable to delete selected filters set. Server err
$messages['setactivated'] = 'Filters set activated successfully.';
$messages['setdeactivated'] = 'Filters set deactivated successfully.';
$messages['setdeleted'] = 'Filters set deleted successfully.';
$messages['setupdated'] = 'Filters set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
$messages['setcreateerror'] = 'Unable to create filters set. Server error occurred.';
$messages['setcreated'] = 'Filters set created successfully.';

@ -44,12 +44,16 @@ if (window.rcmail) {
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() });
rcmail.register_command('plugin.managesieve-seteditraw', function() { rcmail.managesieve_seteditraw() });
if (rcmail.env.action.startsWith('plugin.managesieve')) {
if (rcmail.gui_objects.sieveform) {
rcmail.enable_command('plugin.managesieve-save', true);
sieve_form_init();
}
else if (rcmail.gui_objects.sievesetrawform) {
rcmail.enable_command('plugin.managesieve-save', true);
}
else {
rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
}
@ -89,6 +93,7 @@ if (window.rcmail) {
rcmail.enable_command('plugin.managesieve-set', true);
rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', setcnt);
rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1);
rcmail.enable_command('plugin.managesieve-seteditraw', true);
// Fix dragging filters over sets list
$('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); });
@ -208,6 +213,19 @@ rcube_webmail.prototype.managesieve_setdel = function()
this.http_post('plugin.managesieve-action', '_act=setdel&_set='+urlencode(script), lock);
};
// Set edit raw request
rcube_webmail.prototype.managesieve_seteditraw = function()
{
var id = this.filtersets_list.get_single_selection(),
script = this.env.filtersets[id];
if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
var lock = this.set_busy(true, 'loading');
target = window.frames[this.env.contentframe];
target.location.href = this.env.comm_path+'&_action=plugin.managesieve-action&_framed=1&_seteditraw=1&_unlock='+lock+'&_set='+urlencode(script);
}
}
// Set add request
rcube_webmail.prototype.managesieve_setadd = function()
{
@ -453,12 +471,18 @@ rcube_webmail.prototype.managesieve_save = function()
return;
}
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;
if (this.gui_objects.sieveform) {
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();
}
if (this.gui_objects.sievesetrawform) {
this.gui_objects.sievesetrawform.submit();
}
this.gui_objects.sieveform.submit();
};
// Operations on filters form

@ -43,6 +43,7 @@ class managesieve extends rcube_plugin
$this->register_action('plugin.managesieve-action', array($this, 'managesieve_actions'));
$this->register_action('plugin.managesieve-vacation', array($this, 'managesieve_actions'));
$this->register_action('plugin.managesieve-save', array($this, 'managesieve_save'));
$this->register_action('plugin.managesieve-saveraw', array($this, 'managesieve_saveraw'));
if ($this->rc->task == 'settings') {
$this->add_hook('settings_actions', array($this, 'settings_actions'));
@ -224,6 +225,21 @@ class managesieve extends rcube_plugin
$engine = $this->get_engine();
$engine->save();
}
/**
* Raw form save action handler
*/
function managesieve_saveraw()
{
// load localization
$this->add_texts('localization/', array('filters','managefilters'));
// include main js script
$this->include_script('managesieve.js');
$engine = $this->get_engine();
$engine->saveraw();
}
/**
* Initializes engine object

@ -332,6 +332,14 @@ a.button.disabled
vertical-align: middle;
}
#filter-form #rawfiltersettxt {
width: 98%;
min-height: 400px;
max-width: none;
font-family: monospace;
}
/* smart multi-row input field */
.listarea
{

@ -64,6 +64,7 @@
<ul>
<li><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
<li><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
<li class="separator_above"><roundcube:button command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" classAct="active" /></li>
<li class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li>
<roundcube:container name="filtersetoptions" id="filtersetmenu" />
</ul>

@ -0,0 +1,23 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
<body class="iframe">
<div id="filtersetraw-title" class="boxtitle"><roundcube:label name="managesieve.filterseteditraw" /></div>
<div id="filter-form" class="boxcontent">
<roundcube:object name="filterseteditraw" />
<p>
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
</p>
</form>
</div>
</body>
</html>

@ -318,6 +318,13 @@ a.button.disabled
max-width: 280px;
}
#filter-form #rawfiltersettxt {
width: 98%;
min-height: 400px;
max-width: none;
font-family: monospace;
}
/* revert larry style button */
#filter-form input.button
{

@ -52,6 +52,7 @@
<ul class="toolbarmenu" id="filtersetmenu-menu" role="menu" aria-labelledby="aria-label-setactions">
<li role="menuitem"><roundcube:button command="plugin.managesieve-setact" label="managesieve.enable" classAct="active" /></li>
<li role="menuitem"><roundcube:button command="plugin.managesieve-setdel" label="delete" classAct="active" /></li>
<li role="menuitem"><roundcube:button command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" classAct="active" /></li>
<li role="menuitem" class="separator_above"><roundcube:button command="plugin.managesieve-setget" label="download" classAct="active" /></li>
<roundcube:container name="filtersetoptions" id="filtersetmenu" />
</ul>

@ -0,0 +1,23 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
<body class="iframe">
<div id="filtersetraw-title" class="boxtitle"><roundcube:label name="managesieve.filterseteditraw" /></div>
<div id="filter-form" class="boxcontent">
<roundcube:object name="filterseteditraw" />
<p>
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
</p>
</form>
</div>
</body>
</html>
Loading…
Cancel
Save