diff --git a/CHANGELOG b/CHANGELOG
index de90b8863..39be19cce 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -51,6 +51,7 @@ CHANGELOG Roundcube Webmail
- Indicate that a collapsed thread has flagged children (#5013)
- Implemented message/rfc822 attachment preview
- Update to jsTimezoneDetect 1.0.6
+- Managesieve: Add (optional) RAW script editor (#5414)
- Managesieve: Add option to automatically set vacation :from address (#5428)
- Managesieve: Support 'string' test from variables extension [RFC 5229] (#5248)
- Managesieve: Support 'duplicate' extension [RFC 7352]
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index adee09261..8280e04d3 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -2,6 +2,7 @@
- Fix regression where js error is thrown if server does not support 'duplicate' extension
- Add option to automatically set vacation :from address (#5428)
- Support per-host managesieve_conn_options (#5136)
+- Added (optional) RAW script editor (#5414)
* version 8.7 [2016-07-19]
-----------------------------------------------------------
diff --git a/plugins/managesieve/config.inc.php.dist b/plugins/managesieve/config.inc.php.dist
index a7315d508..96fffb3f2 100644
--- a/plugins/managesieve/config.inc.php.dist
+++ b/plugins/managesieve/config.inc.php.dist
@@ -103,3 +103,6 @@ $config['managesieve_vacation_from_init'] = false;
// Supported methods of notify extension. Default: 'mailto'
$config['managesieve_notify_methods'] = array('mailto');
+
+// Enables scripts RAW editor feature
+$config['managesieve_raw_editor'] = true;
diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
index 452f9a24d..0f3f047ea 100644
--- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
@@ -146,6 +146,8 @@ class rcube_sieve_engine
$_SESSION['managesieve_current'] = $this->sieve->current;
}
+ $this->rc->output->set_env('raw_sieve_editor', $this->rc->config->get('managesieve_raw_editor', true));
+
return $error;
}
@@ -488,7 +490,7 @@ class rcube_sieve_engine
);
}
}
-
+
$this->send();
}
@@ -496,22 +498,22 @@ class rcube_sieve_engine
{
// 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 {
+
+ if ($result === false) {
$this->rc->output->show_message('managesieve.filtersaveerror', 'error');
- $this->send();
}
+ else {
+ $this->rc->output->show_message('managesieve.setupdated', 'confirmation');
+ $this->rc->output->command('parent.managesieve_updatelist', 'refresh');
+ }
+
+ $this->send();
}
-
+
function save()
{
// Init plugin and handle managesieve connection
@@ -1142,8 +1144,9 @@ class rcube_sieve_engine
$fid = $this->sieve->script->update_rule($fid, $this->form);
}
- if ($fid !== false)
+ if ($fid !== false) {
$save = $this->save_script();
+ }
if ($save && $fid !== false) {
$this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
@@ -1163,7 +1166,6 @@ class rcube_sieve_engine
}
else {
$this->rc->output->show_message('managesieve.filtersaveerror', 'error');
-// $this->rc->output->send();
}
}
else {
@@ -1223,8 +1225,9 @@ class rcube_sieve_engine
function filtersets_list($attrib, $no_env = false)
{
// add id to message list table if not specified
- if (!strlen($attrib['id']))
+ if (!strlen($attrib['id'])) {
$attrib['id'] = 'rcmfiltersetslist';
+ }
$list = $this->list_scripts();
@@ -1278,37 +1281,39 @@ class rcube_sieve_engine
{
return $this->rc->output->frame($attrib, true);
}
-
- function filterset_editraw($attrib)
+
+ function filterset_editraw($attrib)
{
- $scriptName = isset($_GET['_set']) ? $_GET['_set'] : $_POST['_set'];
- $script = $this->sieve->get_script($scriptName);
-
- if ($script != false) {
- $out = '