summaryrefslogtreecommitdiff
path: root/plugins/managesieve
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/managesieve')
-rw-r--r--plugins/managesieve/Changelog12
-rw-r--r--plugins/managesieve/composer.json2
-rw-r--r--plugins/managesieve/config.inc.php.dist6
-rw-r--r--plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php79
-rw-r--r--plugins/managesieve/lib/Roundcube/rcube_sieve_script.php1
-rw-r--r--plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php303
-rw-r--r--plugins/managesieve/localization/cs_CZ.inc6
-rw-r--r--plugins/managesieve/localization/da_DK.inc7
-rw-r--r--plugins/managesieve/localization/de_DE.inc10
-rw-r--r--plugins/managesieve/localization/en_GB.inc54
-rw-r--r--plugins/managesieve/localization/en_US.inc21
-rw-r--r--plugins/managesieve/localization/eu_ES.inc27
-rw-r--r--plugins/managesieve/localization/fa_IR.inc10
-rw-r--r--plugins/managesieve/localization/gl_ES.inc2
-rw-r--r--plugins/managesieve/localization/he_IL.inc10
-rw-r--r--plugins/managesieve/localization/hr_HR.inc54
-rw-r--r--plugins/managesieve/localization/km_KH.inc119
-rw-r--r--plugins/managesieve/localization/sv_SE.inc6
-rw-r--r--plugins/managesieve/localization/uk_UA.inc25
-rw-r--r--plugins/managesieve/localization/vi_VN.inc38
-rw-r--r--plugins/managesieve/managesieve.js51
-rw-r--r--plugins/managesieve/managesieve.php125
-rw-r--r--plugins/managesieve/package.xml4
-rw-r--r--plugins/managesieve/skins/classic/managesieve.css20
-rw-r--r--plugins/managesieve/skins/classic/managesieve_mail.css2
-rw-r--r--plugins/managesieve/skins/classic/templates/filteredit.html1
-rw-r--r--plugins/managesieve/skins/classic/templates/managesieve.html1
-rw-r--r--plugins/managesieve/skins/classic/templates/setedit.html1
-rw-r--r--plugins/managesieve/skins/classic/templates/vacation.html31
-rw-r--r--plugins/managesieve/skins/larry/images/vacation_icons.pngbin0 -> 767 bytes
-rw-r--r--plugins/managesieve/skins/larry/managesieve.css42
-rw-r--r--plugins/managesieve/skins/larry/managesieve_mail.css2
-rw-r--r--plugins/managesieve/skins/larry/templates/filteredit.html1
-rw-r--r--plugins/managesieve/skins/larry/templates/managesieve.html1
-rw-r--r--plugins/managesieve/skins/larry/templates/setedit.html1
-rw-r--r--plugins/managesieve/skins/larry/templates/vacation.html30
36 files changed, 995 insertions, 110 deletions
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index 825bef6fd..afdafed28 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -1,9 +1,19 @@
+- Added optional separate interface for out-of-office management (#1488266)
+
+* version 7.2 [2014-02-14]
+-----------------------------------------------------------
- Nicely handle server-side modification of script names (#1489412)
- Add Filters tab/section using plugin API hook
+- Fix issue where folder selector wasn't visible on new filter form
+- Fix issue where multi-select fields were not visible in new filter action rows (#1489600)
+- Fix issue in displaying filter form when managesieve_kolab_master=true
+ and sieve variables extension is supported by the server (#1489599)
+- Fix wrong action folder selection if managesieve_domains is not empty (#1489617)
+- Fix filter creation from an email when preview frame is disabled (#1489647)
* version 7.1 [2013-11-22]
-----------------------------------------------------------
-- lib/Net Sieve.php moved to Roundcube /lib directory
+- lib/Net_Sieve.php moved to Roundcube /lib directory
- Added managesieve_domains option to limit redirect destinations
- Fix bug where at least one additional address of vacation message was required (#1489345)
- Fix so i;ascii-numeric comparator is not forced as default for :count and :value operators
diff --git a/plugins/managesieve/composer.json b/plugins/managesieve/composer.json
index 58c70e5b9..51e76bc92 100644
--- a/plugins/managesieve/composer.json
+++ b/plugins/managesieve/composer.json
@@ -3,7 +3,7 @@
"type": "roundcube-plugin",
"description": "Adds a possibility to manage Sieve scripts (incoming mail filters). It's clickable interface which operates on text scripts and communicates with server using managesieve protocol. Adds Filters tab in Settings.",
"license": "GNU GPLv3+",
- "version": "7.0",
+ "version": "7.2",
"authors": [
{
"name": "Aleksander Machniak",
diff --git a/plugins/managesieve/config.inc.php.dist b/plugins/managesieve/config.inc.php.dist
index 52d3a9b1e..316eddd4f 100644
--- a/plugins/managesieve/config.inc.php.dist
+++ b/plugins/managesieve/config.inc.php.dist
@@ -68,4 +68,10 @@ $config['managesieve_filename_exceptions'] = array();
// If not empty, user will need to select domain from a list
$config['managesieve_domains'] = array();
+// Enables separate management interface for vacation responses (out-of-office)
+// 0 - no separate section (default),
+// 1 - add Vacation section,
+// 2 - add Vacation section, but hide Filters section
+$config['managesieve_vacation'] = 0;
+
?>
diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
index 4a375d353..a1bcc86ca 100644
--- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
@@ -24,21 +24,21 @@
class rcube_sieve_engine
{
- private $rc;
- private $sieve;
- private $errors;
- private $form;
- private $tips = array();
- private $script = array();
- private $exts = array();
- private $list;
- private $active = array();
- private $headers = array(
+ protected $rc;
+ protected $sieve;
+ protected $errors;
+ protected $form;
+ protected $tips = array();
+ protected $script = array();
+ protected $exts = array();
+ protected $list;
+ protected $active = array();
+ protected $headers = array(
'subject' => 'Subject',
'from' => 'From',
'to' => 'To',
);
- private $addr_headers = array(
+ protected $addr_headers = array(
// Required
"from", "to", "cc", "bcc", "sender", "resent-from", "resent-to",
// Additional (RFC 822 / RFC 2822)
@@ -53,7 +53,7 @@ class rcube_sieve_engine
"x-beenthere",
);
- const VERSION = '7.1';
+ const VERSION = '8.0';
const PROGNAME = 'Roundcube (Managesieve)';
const PORT = 4190;
@@ -70,7 +70,7 @@ class rcube_sieve_engine
/**
* Loads configuration, initializes plugin (including sieve connection)
*/
- function start()
+ function start($mode = null)
{
// register UI objects
$this->rc->output->add_handlers(array(
@@ -137,13 +137,16 @@ class rcube_sieve_engine
$this->rc->session->remove('managesieve_current');
}
- if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
- }
- else if (!empty($_SESSION['managesieve_current'])) {
- $script_name = $_SESSION['managesieve_current'];
+ if ($mode != 'vacation') {
+ if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
+ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
+ }
+ else if (!empty($_SESSION['managesieve_current'])) {
+ $script_name = $_SESSION['managesieve_current'];
+ }
}
- else {
+
+ if ($script_name === null || $script_name === '') {
// get (first) active script
if (!empty($this->active[0])) {
$script_name = $this->active[0];
@@ -980,7 +983,7 @@ class rcube_sieve_engine
}
if (!$this->errors && !$error) {
- // zapis skryptu
+ // save the script
if (!isset($this->script[$fid])) {
$fid = $this->sieve->script->add_rule($this->form);
$new = true;
@@ -1016,7 +1019,7 @@ class rcube_sieve_engine
$this->send();
}
- private function send()
+ protected function send()
{
// Handle form action
if (isset($_GET['_framed']) || isset($_POST['_framed'])) {
@@ -1026,7 +1029,8 @@ class rcube_sieve_engine
else {
$this->rc->output->send('managesieve.filteredit');
}
- } else {
+ }
+ else {
$this->rc->output->set_pagetitle($this->plugin->gettext('filters'));
$this->rc->output->send('managesieve.managesieve');
}
@@ -1642,11 +1646,12 @@ class rcube_sieve_engine
$domain_select = new html_select(array('name' => "_action_target_domain[$id]", 'id' => 'action_target_domain'.$id));
$domain_select->add(array_combine($domains, $domains));
- $parts = explode('@', $action['target']);
-
- if (!empty($parts)) {
- $action['domain'] = array_pop($parts);
- $action['target'] = implode('@', $parts);
+ if ($action['type'] == 'redirect') {
+ $parts = explode('@', $action['target']);
+ if (!empty($parts)) {
+ $action['domain'] = array_pop($parts);
+ $action['target'] = implode('@', $parts);
+ }
}
}
@@ -1788,7 +1793,7 @@ class rcube_sieve_engine
'maxlength' => 100,
'id' => 'action_mailbox' . $id,
'name' => "_action_mailbox[$id]",
- 'style' => 'display:'.(!isset($action) || $action['type']=='fileinto' ? 'inline' : 'none')
+ 'style' => 'display:'.(empty($action['type']) || $action['type'] == 'fileinto' ? 'inline' : 'none')
));
$out .= $select->show($mailbox);
$out .= '</td>';
@@ -1808,12 +1813,12 @@ class rcube_sieve_engine
return $out;
}
- private function genid()
+ protected function genid()
{
return preg_replace('/[^0-9]/', '', microtime(true));
}
- private function strip_value($str, $allow_html = false, $trim = true)
+ protected function strip_value($str, $allow_html = false, $trim = true)
{
if (is_array($str)) {
foreach ($str as $idx => $val) {
@@ -1834,7 +1839,7 @@ class rcube_sieve_engine
return $trim ? trim($str) : $str;
}
- private function error_class($id, $type, $target, $elem_prefix='')
+ protected function error_class($id, $type, $target, $elem_prefix='')
{
// TODO: tooltips
if (($type == 'test' && ($str = $this->errors['tests'][$id][$target])) ||
@@ -1847,7 +1852,7 @@ class rcube_sieve_engine
return '';
}
- private function add_tip($id, $str, $error=false)
+ protected function add_tip($id, $str, $error=false)
{
if ($error)
$str = html::span('sieve error', $str);
@@ -1855,7 +1860,7 @@ class rcube_sieve_engine
$this->tips[] = array($id, $str);
}
- private function print_tips()
+ protected function print_tips()
{
if (empty($this->tips))
return;
@@ -1864,7 +1869,7 @@ class rcube_sieve_engine
$this->rc->output->add_script($script, 'foot');
}
- private function list_input($id, $name, $value, $enabled, $class, $size=null)
+ protected function list_input($id, $name, $value, $enabled, $class, $size=null)
{
$value = (array) $value;
$value = array_map(array('rcube', 'Q'), $value);
@@ -1880,7 +1885,7 @@ class rcube_sieve_engine
/**
* Validate input for date part elements
*/
- private function validate_date_part($type, $value)
+ protected function validate_date_part($type, $value)
{
// we do simple validation of date/part format
switch ($type) {
@@ -1925,7 +1930,7 @@ class rcube_sieve_engine
*
* @return string Mailbox name
*/
- private function mod_mailbox($mailbox, $mode = 'out')
+ protected function mod_mailbox($mailbox, $mode = 'out')
{
$delimiter = $_SESSION['imap_delimiter'];
$replace_delimiter = $this->rc->config->get('managesieve_replace_delimiter');
@@ -2217,7 +2222,7 @@ class rcube_sieve_engine
/**
* Initializes internal script data
*/
- private function init_script()
+ protected function init_script()
{
$this->script = $this->sieve->script->as_array();
diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php
index 6fbc3f89d..c6ad78add 100644
--- a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php
@@ -585,6 +585,7 @@ class rcube_sieve_script
if ($rule[0]['type'] == 'set') {
unset($rule[0]['type']);
$this->vars[] = $rule[0];
+ unset($rule);
}
else {
$rule = array('actions' => $rule);
diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php
new file mode 100644
index 000000000..636b5fcc1
--- /dev/null
+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php
@@ -0,0 +1,303 @@
+<?php
+
+/**
+ * Managesieve Vacation Engine
+ *
+ * Engine part of Managesieve plugin implementing UI and backend access.
+ *
+ * Copyright (C) 2011-2014, 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 as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ */
+
+class rcube_sieve_vacation extends rcube_sieve_engine
+{
+ function actions()
+ {
+ $error = $this->start('vacation');
+
+ // find current vacation rule
+ if (!$error) {
+ $this->vacation_rule();
+ $this->vacation_post();
+ }
+
+ $this->plugin->add_label('vacation.saving');
+ $this->rc->output->add_handlers(array(
+ 'vacationform' => array($this, 'vacation_form'),
+ ));
+
+ $this->rc->output->set_pagetitle($this->plugin->gettext('vacation'));
+ $this->rc->output->send('managesieve.vacation');
+ }
+
+ private function vacation_rule()
+ {
+ $this->vacation = array();
+
+ if (empty($this->active)) {
+ return;
+ }
+
+ $list = array();
+
+ // find (first) vacation rule
+ foreach ($this->script as $idx => $rule) {
+ if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
+ $this->vacation = array_merge($rule['actions'][0], array(
+ 'idx' => $idx,
+ 'disabled' => $rule['disabled'],
+ 'name' => $rule['name'],
+ 'tests' => $rule['tests'],
+ ));
+ }
+ else {
+ $list[$idx] = $rule['name'];
+ }
+ }
+
+ $this->vacation['list'] = $list;
+ }
+
+ private function vacation_post()
+ {
+ if (empty($_POST)) {
+ return;
+ }
+
+ $status = rcube_utils::get_input_value('vacation_status', rcube_utils::INPUT_POST);
+ $subject = rcube_utils::get_input_value('vacation_subject', rcube_utils::INPUT_POST, true);
+ $reason = rcube_utils::get_input_value('vacation_reason', rcube_utils::INPUT_POST, true);
+ $addresses = rcube_utils::get_input_value('vacation_addresses', rcube_utils::INPUT_POST, true);
+ $interval = rcube_utils::get_input_value('vacation_interval', rcube_utils::INPUT_POST);
+ $interval_type = rcube_utils::get_input_value('vacation_interval_type', rcube_utils::INPUT_POST);
+ $date_from = rcube_utils::get_input_value('vacation_datefrom', rcube_utils::INPUT_POST);
+ $date_to = rcube_utils::get_input_value('vacation_dateto', rcube_utils::INPUT_POST);
+ $after = rcube_utils::get_input_value('vacation_after', rcube_utils::INPUT_POST);
+
+ $interval_type = $interval_type == 'seconds' ? 'seconds' : 'days';
+ $vacation_action['type'] = 'vacation';
+ $vacation_action['reason'] = $this->strip_value(str_replace("\r\n", "\n", $reason));
+ $vacation_action['subject'] = $subject;
+ $vacation_action['addresses'] = $addresses;
+ $vacation_action[$interval_type] = $interval;
+ $vacation_tests = (array) $this->vacation['tests'];
+
+ foreach ((array) $vacation_action['addresses'] as $aidx => $address) {
+ $vacation_action['addresses'][$aidx] = $address = trim($address);
+
+ if (empty($address)) {
+ unset($vacation_action['addresses'][$aidx]);
+ }
+ else if (!rcube_utils::check_email($address)) {
+ $error = 'noemailwarning';
+ break;
+ }
+ }
+
+ if ($vacation_action['reason'] == '') {
+ $error = 'managesieve.cannotbeempty';
+ }
+ if ($vacation_action[$interval_type] && !preg_match('/^[0-9]+$/', $vacation_action[$interval_type])) {
+ $error = 'managesieve.forbiddenchars';
+ }
+
+ foreach (array('date_from', 'date_to') as $var) {
+ $date = $$var;
+
+ if ($date && ($dt = rcube_utils::anytodatetime($date))) {
+ $type = 'value-' . ($var == 'date_from' ? 'ge' : 'le');
+ $test = array(
+ 'test' => 'currentdate',
+ 'part' => 'date',
+ 'type' => $type,
+ 'arg' => $dt->format('Y-m-d'),
+ );
+
+ // find existing date rule
+ foreach ((array) $vacation_tests as $idx => $t) {
+ if ($t['test'] == 'currentdate' && $t['part'] == 'date' && $t['type'] == $type) {
+ $vacation_tests[$idx] = $test;
+ continue 2;
+ }
+ }
+
+ $vacation_tests[] = $test;
+ }
+ }
+
+ if (empty($vacation_tests)) {
+ $vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
+ }
+
+ // @TODO: handle situation when there's no active script
+
+ if (!$error) {
+ $rule = $this->vacation;
+ $rule['type'] = 'if';
+ $rule['name'] = $rule['name'] ?: $this->plugin->gettext('vacation');
+ $rule['disabled'] = $status == 'off';
+ $rule['actions'][0] = $vacation_action;
+ $rule['tests'] = $vacation_tests;
+ $rule['join'] = count($vacation_tests) > 1;
+
+ // reset original vacation rule
+ if (isset($this->vacation['idx'])) {
+ $this->script[$this->vacation['idx']] = null;
+ }
+
+ // re-order rules if needed
+ if (isset($after) && $after !== '') {
+ // add at target position
+ if ($after >= count($this->script) - 1) {
+ $this->script[] = $rule;
+ }
+ else {
+ $script = array();
+
+ foreach ($this->script as $idx => $r) {
+ if ($r) {
+ $script[] = $r;
+ }
+
+ if ($idx == $after) {
+ $script[] = $rule;
+ }
+ }
+
+ $this->script = $script;
+ }
+ }
+ else {
+ array_unshift($this->script, $rule);
+ }
+
+ $this->sieve->script->content = array_values(array_filter($this->script));
+
+ if ($this->save_script()) {
+ $this->rc->output->show_message('managesieve.vacationsaved', 'confirmation');
+ $this->rc->output->send();
+ }
+ }
+
+ $this->rc->output->show_message($error ? $error : 'managesieve.saveerror', 'error');
+ $this->rc->output->send();
+ }
+
+ /**
+ * Independent vacation form
+ */
+ public function vacation_form($attrib)
+ {
+ // check supported extensions
+ $date_extension = in_array('date', $this->exts);
+ $seconds_extension = in_array('vacation-seconds', $this->exts);
+
+ // build FORM tag
+ $form_id = !empty($attrib['id']) ? $attrib['id'] : 'form';
+ $out = $this->rc->output->request_form(array(
+ 'id' => $form_id,
+ 'name' => $form_id,
+ 'method' => 'post',
+ 'task' => 'settings',
+ 'action' => 'plugin.managesieve-vacation',
+ 'noclose' => true
+ ) + $attrib);
+
+ // form elements
+ $subject = new html_inputfield(array('name' => 'vacation_subject', 'size' => 50));
+ $reason = new html_textarea(array('name' => 'vacation_reason', 'cols' => 60, 'rows' => 8));
+ $interval = new html_inputfield(array('name' => 'vacation_interval', 'size' => 5));
+ $addresses = '<textarea name="vacation_addresses" data-type="list" data-size="30" style="display: none">'
+ . rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) . '</textarea>';
+ $status = new html_select(array('name' => 'vacation_status'));
+
+ $status->add($this->plugin->gettext('vacation.on'), 'on');
+ $status->add($this->plugin->gettext('vacation.off'), 'off');
+
+ if ($this->rc->config->get('managesieve_vacation') != 2 && count($this->vacation['list'])) {
+ $after = new html_select(array('name' => 'vacation_after'));
+
+ $after->add('', '');
+ foreach ($this->vacation['list'] as $idx => $rule) {
+ $after->add($rule, $idx);
+ }
+ }
+
+ $interval_txt = $interval->show(isset($this->vacation['seconds']) ? $this->vacation['seconds'] : $this->vacation['days']);
+ if ($seconds_extension) {
+ $interval_select = new html_select(array('name' => 'vacation_interval_type'));
+ $interval_select->add($this->plugin->gettext('days'), 'days');
+ $interval_select->add($this->plugin->gettext('seconds'), 'seconds');
+ $interval_txt .= '&nbsp;' . $interval_select->show(isset($this->vacation['seconds']) ? 'seconds' : 'days');
+ }
+ else {
+ $interval_txt .= '&nbsp;' . $this->plugin->gettext('days');
+ }
+
+ if ($date_extension) {
+ $date_from = new html_inputfield(array('name' => 'vacation_datefrom', 'class' => 'datepicker', 'size' => 12));
+ $date_to = new html_inputfield(array('name' => 'vacation_dateto', 'class' => 'datepicker', 'size' => 12));
+ $date_format = $this->rc->config->get('date_format', 'Y-m-d');
+
+ foreach ((array) $this->vacation['tests'] as $test) {
+ if ($test['test'] == 'currentdate' && $test['part'] == 'date') {
+ $date = $this->rc->format_date($test['arg'], $date_format, false);
+ $date_value[$test['type'] == 'value-ge' ? 'from' : 'to'] = $date;
+ }
+ }
+ }
+
+ // Message tab
+ $table = new html_table(array('cols' => 2));
+
+ $table->add('title', html::label('vacation_subject', $this->plugin->gettext('vacation.subject')));
+ $table->add(null, $subject->show($this->vacation['subject']));
+ $table->add('title', html::label('vacation_reason', $this->plugin->gettext('vacation.body')));
+ $table->add(null, $reason->show($this->vacation['reason']));
+
+ if ($date_extension) {
+ $table->add('title', html::label('vacation_datefrom', $this->plugin->gettext('vacation.dates')));
+ $table->add(null,
+ $this->plugin->gettext('vacation.from'). ' ' . $date_from->show($date_value['from'])
+ . ' ' . $this->plugin->gettext('vacation.to'). ' ' . $date_to->show($date_value['to'])
+ );
+ }
+
+ $table->add('title', html::label('vacation_status', $this->plugin->gettext('vacation.status')));
+ $table->add(null, $status->show($this->vacation['disabled'] ? 'off' : 'on'));
+
+ $out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.reply')) . $table->show($attrib));
+
+ // Advanced tab
+ $table = new html_table(array('cols' => 2));
+
+ $table->add('title', $this->plugin->gettext('vacation.addresses'));
+ $table->add(null, $addresses);
+ $table->add('title', $this->plugin->gettext('vacation.interval'));
+ $table->add(null, $interval_txt);
+ if ($after) {
+ $table->add('title', $this->plugin->gettext('vacation.after'));
+ $table->add(null, $after->show($this->vacation['idx'] - 1));
+ }
+
+ $out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.advanced')) . $table->show($attrib));
+
+ $out .= '</form>';
+
+ $this->rc->output->add_gui_object('sieveform', $form_id);
+
+ return $out;
+ }
+}
diff --git a/plugins/managesieve/localization/cs_CZ.inc b/plugins/managesieve/localization/cs_CZ.inc
index f14b13287..d304da61e 100644
--- a/plugins/managesieve/localization/cs_CZ.inc
+++ b/plugins/managesieve/localization/cs_CZ.inc
@@ -67,7 +67,7 @@ $labels['filterset'] = 'Sada filtrů';
$labels['filtersets'] = 'Sady filtrů';
$labels['filtersetadd'] = 'Přidat sadu filtrů';
$labels['filtersetdel'] = 'Odebrat tuto sadu filtrů';
-$labels['filtersetact'] = 'Zapnout tuto sadu filtrů';
+$labels['filtersetact'] = 'Activate current filters set';
$labels['filtersetdeact'] = 'Vypnout tuto sadu filtrů';
$labels['filterdef'] = 'Definice filtru';
$labels['filtersetname'] = 'Nastavit název sady filtrů';
@@ -180,8 +180,8 @@ $messages['setcreateerror'] = 'Nelze vytvořit sadu filtrů. Došlo k chybě ser
$messages['setcreated'] = 'Sada filtrů úspěšně vytvořena.';
$messages['activateerror'] = 'Nelze zapnout vybrané filtr/y. Došlo k chybě serveru.';
$messages['deactivateerror'] = 'Nelze vypnout vybrané filtr/y. Došlo k chybě serveru.';
-$messages['deactivated'] = 'Filtr/y úspěšně zapnuty.';
-$messages['activated'] = 'Filtr/y úspěšne vypnuty.';
+$messages['deactivated'] = 'Filtr/y úspěšne vypnuty.';
+$messages['activated'] = 'Filtr/y úspěšně zapnuty.';
$messages['moved'] = 'Filtr byl úspěšně přesunut.';
$messages['moveerror'] = 'Nelze přesunout vybraný filtr. Došlo k chybě serveru.';
$messages['nametoolong'] = 'Příliš dlouhý název.';
diff --git a/plugins/managesieve/localization/da_DK.inc b/plugins/managesieve/localization/da_DK.inc
index b67c50786..b240741dc 100644
--- a/plugins/managesieve/localization/da_DK.inc
+++ b/plugins/managesieve/localization/da_DK.inc
@@ -169,14 +169,21 @@ $messages['actiondeleteconfirm'] = 'Er du sikker på du vil slette den valgte ha
$messages['forbiddenchars'] = 'Ulovlige tegn i feltet';
$messages['cannotbeempty'] = 'Feltet kan ikke være tomt.';
$messages['ruleexist'] = 'Filter med dette navn eksisterer allerede.';
+$messages['setactivateerror'] = 'Kan ikke aktiverer valgt filter sæt. Server fejl.';
+$messages['setdeactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
+$messages['setdeleteerror'] = 'Kan ikke slette valgt filter sæt. Server fejl.';
$messages['setactivated'] = 'Filter sæt aktiveret.';
$messages['setdeactivated'] = 'Filter sæt deaktiveret.';
$messages['setdeleted'] = 'Filter sæt slettet.';
$messages['setdeleteconfirm'] = 'Er du sikker på du vil slette valgt filter sæt?';
+$messages['setcreateerror'] = 'Kan ikke oprette filter sæt. Server fejl.';
$messages['setcreated'] = 'Filter sæt oprettet.';
+$messages['activateerror'] = 'Kan ikke aktivere valgt filter sæt. Server fejl.';
+$messages['deactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
$messages['deactivated'] = 'Filter(filtre) aktiveret.';
$messages['activated'] = 'Filter(filtre) deaktiveret.';
$messages['moved'] = 'Filter flyttet.';
+$messages['moveerror'] = 'Kan ikke flytte valgt filter. Server fejl.';
$messages['nametoolong'] = 'Navn er for langt.';
$messages['namereserved'] = 'Reserveret navn.';
$messages['setexist'] = 'Filterv sæt eksisterer allerede';
diff --git a/plugins/managesieve/localization/de_DE.inc b/plugins/managesieve/localization/de_DE.inc
index ac81ccd75..2eaa21580 100644
--- a/plugins/managesieve/localization/de_DE.inc
+++ b/plugins/managesieve/localization/de_DE.inc
@@ -54,6 +54,7 @@ $labels['add'] = 'Hinzufügen';
$labels['del'] = 'Löschen';
$labels['sender'] = 'Absender';
$labels['recipient'] = 'Empfänger';
+$labels['vacationaddr'] = 'Meine zusätzliche E-Mail-Adresse(n):';
$labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
$labels['vacationinterval'] = 'Wie oft sollen Nachrichten gesendet werden:';
$labels['days'] = 'Tage';
@@ -158,22 +159,31 @@ $labels['index'] = 'index:';
$labels['indexlast'] = 'rückwärts';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen';
+$messages['filterdeleteerror'] = 'Filter kann nicht gelöscht werden. Ein Serverfehler ist aufgetreten.';
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
$messages['filtersaved'] = 'Filter erfolgreich gespeichert';
+$messages['filtersaveerror'] = 'Filter kann nicht gespeichert werden. Ein Serverfehler ist aufgetreten.';
$messages['filterdeleteconfirm'] = 'Möchten Sie den ausgewählten Filter wirklich löschen?';
$messages['ruledeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Regel löschen möchten?';
$messages['actiondeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Aktion löschen möchten?';
$messages['forbiddenchars'] = 'Unzulässige Zeichen im Eingabefeld';
$messages['cannotbeempty'] = 'Eingabefeld darf nicht leer sein';
$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
+$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler';
+$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler';
+$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler';
$messages['setactivated'] = 'Filtersatz wurde erfolgreich aktiviert';
$messages['setdeactivated'] = 'Filtersatz wurde erfolgreich deaktiviert';
$messages['setdeleted'] = 'Filtersatz wurde erfolgreich gelöscht';
$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';
+$messages['activateerror'] = 'Filter kann nicht aktiviert werden. Serverfehler.';
+$messages['deactivateerror'] = 'Filter kann nicht deaktiviert werden. Serverfehler.';
$messages['deactivated'] = 'Filter erfolgreich deaktiviert.';
$messages['activated'] = 'Filter erfolgreich aktiviert.';
$messages['moved'] = 'Filter erfolgreich verschoben.';
+$messages['moveerror'] = 'Filter kann nicht verschoben werden. Serverfehler.';
$messages['nametoolong'] = 'Kann Filtersatz nicht erstellen. Name zu lang';
$messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
diff --git a/plugins/managesieve/localization/en_GB.inc b/plugins/managesieve/localization/en_GB.inc
index 63006144a..f899e60fe 100644
--- a/plugins/managesieve/localization/en_GB.inc
+++ b/plugins/managesieve/localization/en_GB.inc
@@ -47,13 +47,18 @@ $labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
+$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
+$labels['vacationaddr'] = 'My additional e-mail address(es):';
$labels['vacationdays'] = 'How often send messages (in days):';
+$labels['vacationinterval'] = 'How often send messages:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationsubject'] = 'Message subject:';
$labels['rulestop'] = 'Stop evaluating rules';
@@ -77,11 +82,13 @@ $labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
+$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
+$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
@@ -90,10 +97,45 @@ $labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
+$labels['setvariable'] = 'Set variable';
+$labels['setvarname'] = 'Variable name:';
+$labels['setvarvalue'] = 'Variable value:';
+$labels['setvarmodifiers'] = 'Modifiers:';
+$labels['varlower'] = 'lower-case';
+$labels['varupper'] = 'upper-case';
+$labels['varlowerfirst'] = 'first character lower-case';
+$labels['varupperfirst'] = 'first character upper-case';
+$labels['varquotewildcard'] = 'quote special characters';
+$labels['varlength'] = 'length';
+$labels['notify'] = 'Send notification';
+$labels['notifyaddress'] = 'To e-mail address:';
+$labels['notifybody'] = 'Notification body:';
+$labels['notifysubject'] = 'Notification subject:';
+$labels['notifyfrom'] = 'Notification sender:';
+$labels['notifyimportance'] = 'Importance:';
+$labels['notifyimportancelow'] = 'low';
+$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancehigh'] = 'high';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
+$labels['currdate'] = 'Current date';
+$labels['datetest'] = 'Date';
+$labels['dateheader'] = 'header:';
+$labels['year'] = 'year';
+$labels['month'] = 'month';
+$labels['day'] = 'day';
+$labels['date'] = 'date (yyyy-mm-dd)';
+$labels['julian'] = 'date (julian)';
+$labels['hour'] = 'hour';
+$labels['minute'] = 'minute';
+$labels['second'] = 'second';
+$labels['time'] = 'time (hh:mm:ss)';
+$labels['iso8601'] = 'date (ISO8601)';
+$labels['std11'] = 'date (RFC2822)';
+$labels['zone'] = 'time-zone';
+$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
@@ -113,26 +155,38 @@ $labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
+$labels['index'] = 'index:';
+$labels['indexlast'] = 'backwards';
$messages['filterunknownerror'] = 'Unknown server error';
$messages['filterconnerror'] = 'Unable to connect to managesieve server';
+$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully';
$messages['filtersaved'] = 'Filter saved successfully';
+$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field';
$messages['cannotbeempty'] = 'Field cannot be empty';
$messages['ruleexist'] = 'Filter with specified name already exists.';
+$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occurred.';
+$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occurred.';
+$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occurred.';
$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 occurred.';
$messages['setcreated'] = 'Filters set created successfully.';
+$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
+$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
+$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
+$messages['invaliddateformat'] = 'Invalid date or date part format';
?>
diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc
index cbe69dc9f..e732b4831 100644
--- a/plugins/managesieve/localization/en_US.inc
+++ b/plugins/managesieve/localization/en_US.inc
@@ -59,10 +59,10 @@ $labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My additional e-mail address(es):';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
-$labels['days'] = 'days';
-$labels['seconds'] = 'seconds';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationsubject'] = 'Message subject:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filters set';
@@ -159,6 +159,21 @@ $labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
+$labels['vacation'] = 'Vacation';
+$labels['vacation.reply'] = 'Reply message';
+$labels['vacation.advanced'] = 'Advanced settings';
+$labels['vacation.subject'] = 'Subject';
+$labels['vacation.body'] = 'Body';
+$labels['vacation.dates'] = 'Vacation time';
+$labels['vacation.from'] = 'From:';
+$labels['vacation.to'] = 'To:';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.addresses'] = 'My additional addresses';
+$labels['vacation.interval'] = 'Reply interval';
+$labels['vacation.after'] = 'Put vacation rule after';
+$labels['vacation.saving'] = 'Saving data...';
$messages = array();
$messages['filterunknownerror'] = 'Unknown server error.';
@@ -193,5 +208,7 @@ $messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
+$messages['saveerror'] = 'Unable to save data. Server error occurred.';
+$messages['vacationsaved'] = 'Vacation data saved successfully.';
?>
diff --git a/plugins/managesieve/localization/eu_ES.inc b/plugins/managesieve/localization/eu_ES.inc
index fde8f919d..fe29e5859 100644
--- a/plugins/managesieve/localization/eu_ES.inc
+++ b/plugins/managesieve/localization/eu_ES.inc
@@ -16,15 +16,15 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/
$labels['filters'] = 'Iragazkiak';
-$labels['managefilters'] = 'Administratu postaren sarrera-iragazkiak';
+$labels['managefilters'] = 'Kudeatu sarrerako posta-iragazkiak';
$labels['filtername'] = 'Iragazkiaren izena';
$labels['newfilter'] = 'Iragazki berria';
$labels['filteradd'] = 'Gehitu iragazkia';
$labels['filterdel'] = 'Ezabatu iragazkia';
$labels['moveup'] = 'Mugitu gora';
$labels['movedown'] = 'Mugitu behera';
-$labels['filterallof'] = 'alderatu datozen arau guztiak';
-$labels['filteranyof'] = 'alderatu datozen arauetako batzuk';
+$labels['filterallof'] = 'datozen arau guztiak parekatzen';
+$labels['filteranyof'] = 'datozen arauetako batzuk parekatzen';
$labels['filterany'] = 'mezu guztiak';
$labels['filtercontains'] = 'badu';
$labels['filternotcontains'] = 'ez du';
@@ -32,10 +32,10 @@ $labels['filteris'] = 'honen berdina da';
$labels['filterisnot'] = 'ez da honen berdina';
$labels['filterexists'] = 'badago';
$labels['filternotexists'] = 'ez dago';
-$labels['filtermatches'] = 'bat datozen adierazpenak';
-$labels['filternotmatches'] = 'bat ez datozen adierazpenak';
+$labels['filtermatches'] = 'bat datorren espresio';
+$labels['filternotmatches'] = 'bat ez datorren espresio';
$labels['filterregex'] = 'bat datozen adierazpen erregularrak';
-$labels['filternotregex'] = 'bat ez datozen adierazpen erregularrak';
+$labels['filternotregex'] = 'bat ez datorren espresio erregularrak';
$labels['filterunder'] = 'azpian';
$labels['filterover'] = 'gainean';
$labels['addrule'] = 'Gehitu araua';
@@ -47,12 +47,14 @@ $labels['messagesendcopy'] = 'Bidali mezuaren kopia hona';
$labels['messagereply'] = 'Erantzun mezuarekin';
$labels['messagedelete'] = 'Ezabatu mezua';
$labels['messagediscard'] = 'Baztertu mezuarekin';
+$labels['messagekeep'] = 'Mantendu mezua Sarrera-ontzian';
$labels['messagesrules'] = 'Sarrerako postarako:';
$labels['messagesactions'] = '...exekutatu datozen ekintzak:';
$labels['add'] = 'Gehitu';
$labels['del'] = 'Ezabatu';
$labels['sender'] = 'Bidaltzailea';
$labels['recipient'] = 'Hartzailea';
+$labels['vacationaddr'] = 'Nire helbide elektroniko osagarria(k):';
$labels['vacationdays'] = 'Zer maiztasunarekin bidaltzen ditu mezuak (egunak)';
$labels['vacationinterval'] = 'Zenbatero bidali mezuak:';
$labels['days'] = 'egun';
@@ -62,7 +64,7 @@ $labels['vacationsubject'] = 'Mezuaren izenburua:';
$labels['rulestop'] = 'Gelditu arauak ebaluatzen';
$labels['enable'] = 'Gaitu/Ezgaitu';
$labels['filterset'] = 'Iragazki-paketea';
-$labels['filtersets'] = 'Iragazki paketeak';
+$labels['filtersets'] = 'Iragazki-paketeak';
$labels['filtersetadd'] = 'Gehitu iragazki-paketea';
$labels['filtersetdel'] = 'Ezabatu uneko iragazki-paketea';
$labels['filtersetact'] = 'Gaitu uneko iragazki-paketea';
@@ -70,7 +72,7 @@ $labels['filtersetdeact'] = 'Ezgaitu uneko iragazki-paketea';
$labels['filterdef'] = 'Iragazkiaren definizioa';
$labels['filtersetname'] = 'Iragazki-paketearen izena';
$labels['newfilterset'] = 'Iragazki-pakete berria';
-$labels['active'] = 'gaitua';
+$labels['active'] = 'aktiboa';
$labels['none'] = 'Bat ere ez';
$labels['fromset'] = 'paketetik';
$labels['fromfile'] = 'fitxategitik';
@@ -157,22 +159,31 @@ $labels['index'] = 'indexatu:';
$labels['indexlast'] = 'atzeraka';
$messages['filterunknownerror'] = 'Zerbitzari ezezaguna errorea';
$messages['filterconnerror'] = 'Ezin da konektatu zerbitzariarekin.';
+$messages['filterdeleteerror'] = 'Ezin da ezabatu iragazkia. Errore bat gertatu da zerbitzarian.';
$messages['filterdeleted'] = 'Iragazkia ongi ezabatu da.';
$messages['filtersaved'] = 'Iragazkia ongi ezabatu da.';
+$messages['filtersaveerror'] = 'Ezin da gorde iragazkia. Zerbitzarian errore bat gertatu da.';
$messages['filterdeleteconfirm'] = 'Seguru zaude hautatutako iragazkiak ezabatu nahi dituzula?';
$messages['ruledeleteconfirm'] = 'Seguru zaude hautatutako arauak ezabatu nahi dituzula?';
$messages['actiondeleteconfirm'] = 'Seguru zaude hautatutako ekintzak ezabatu nahi dituzula?';
$messages['forbiddenchars'] = 'Debekatutako karaktereak eremuan.';
$messages['cannotbeempty'] = 'Eremua ezin da hutsik egon.';
$messages['ruleexist'] = 'Lehendik badago izen hori duen iragazki bat.';
+$messages['setactivateerror'] = 'Ezin da aktibatu hautatutako iragazki paketea. Zerbitzarian errore bat gertatu da.';
+$messages['setdeactivateerror'] = 'Ezin da ezgaitu hautatutako iragazki-paketea. Zerbitzarian errore bat gertatu da.';
+$messages['setdeleteerror'] = 'Ezin da ezabatu hautatutako iragazki-paketea. Zerbitzarian errore bat gertatu da.';
$messages['setactivated'] = 'Iragazki paketea ongi aktibatu da.';
$messages['setdeactivated'] = 'Iragazki paketea ongi desaktibatu da.';
$messages['setdeleted'] = 'Iragazki paketea ongi ezabatu da.';
$messages['setdeleteconfirm'] = 'Seguru zaude hautatutako iragazki paketea ezabatu nahi duzula?';
+$messages['setcreateerror'] = 'Ezin da iragazki-paketea sortu. Zerbitzarian errore bat gertatu da.';
$messages['setcreated'] = 'Iragazki paketea ongi sortu da.';
+$messages['activateerror'] = 'Ezin da gaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
+$messages['deactivateerror'] = 'Ezin da ezgaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
$messages['deactivated'] = 'Iragazkia(k) ongi ezgaitu da.';
$messages['activated'] = 'Iragazkia(k) ongi gaitu da.';
$messages['moved'] = 'Iragazkia ongi mugitu da.';
+$messages['moveerror'] = 'Ezin da mugitu hautatutako iragazkia. Zerbitzarian errore bat gertatu da.';
$messages['nametoolong'] = 'Izen luzeegia.';
$messages['namereserved'] = 'Izen erreserbatua.';
$messages['setexist'] = 'Lehendik badago pakete hori.';
diff --git a/plugins/managesieve/localization/fa_IR.inc b/plugins/managesieve/localization/fa_IR.inc
index 8aeb51711..b938c5850 100644
--- a/plugins/managesieve/localization/fa_IR.inc
+++ b/plugins/managesieve/localization/fa_IR.inc
@@ -54,6 +54,7 @@ $labels['add'] = 'افزودن';
$labels['del'] = 'حذف';
$labels['sender'] = 'فرستنده';
$labels['recipient'] = 'گیرنده';
+$labels['vacationaddr'] = 'آدرس(های) ایمیل اضافی من:';
$labels['vacationdays'] = 'پیغام ها در چه مواقعی فرستاده شدند (در روزهای):';
$labels['vacationinterval'] = 'مواقعی که پیغام‌ها ارسال می‌شوند:';
$labels['days'] = 'روزها';
@@ -158,22 +159,31 @@ $labels['index'] = 'فهرست:';
$labels['indexlast'] = 'به عقب';
$messages['filterunknownerror'] = 'خطای سرور نامعلوم.';
$messages['filterconnerror'] = 'ناتوانی در اتصال به سرور.';
+$messages['filterdeleteerror'] = 'ناتوانی در حذف صافی. خطای سرور رخ داد.';
$messages['filterdeleted'] = 'صافی با موفقیت حذف شد.';
$messages['filtersaved'] = 'صافی با موفقیت ذخیره شد.';
+$messages['filtersaveerror'] = 'ناتوانی در ذخیره فیلتر. خطای سرور رخ داد.';
$messages['filterdeleteconfirm'] = 'آیا مطمئن به حذف صافی انتخاب شده هستید؟';
$messages['ruledeleteconfirm'] = 'آیا مطمئن هستید که می خواهید قانون انتخاب شده را حذف کنید؟';
$messages['actiondeleteconfirm'] = 'آیا مطمئن هستید که می خواهید عمل انتخاب شده را حذف کنید.';
$messages['forbiddenchars'] = 'حروف ممنوعه در فیلد.';
$messages['cannotbeempty'] = 'فیلد نمی تواند خالی باشد.';
$messages['ruleexist'] = 'صافی با این نام مشخص وجود دارد.';
+$messages['setactivateerror'] = 'ناتوان در فعال کردن مجموعه صافی‌ها انتخاب شده. خطای سرور رخ داد.';
+$messages['setdeactivateerror'] = 'ناتوان در غیرفعال کردن مجموعه صافی‌ها انتخاب شده. خطای سرور رخ داد.';
+$messages['setdeleteerror'] = 'ناتوان در حذف مجموعه صافی‌ها انتخاب شده. خطای سرور رخ داد.';
$messages['setactivated'] = 'مجموعه صافی‌ها با موفقیت فعال شد.';
$messages['setdeactivated'] = 'مجموعه صافی‌ها با موفقیت غیرفعال شد.';
$messages['setdeleted'] = 'مجموعه صافی‌ها با موفقیت حذف شد.';
$messages['setdeleteconfirm'] = 'آیا مطمئن هستید که می‌خواهید مجموعه صافی‌ها انتخاب شده را حذف کنید؟';
+$messages['setcreateerror'] = 'ناتوانی در ایجاد مجموعه صافی‌ها. خطای سرور رخ داد.';
$messages['setcreated'] = 'مجموعه صافی‌ها با موفقیت ایجاد شد.';
+$messages['activateerror'] = 'ناتوانی در فعال کردن صافی(های) انتخاب شده. خطای سرور رخ داد.';
+$messages['deactivateerror'] = 'ناتوانی در غیرفعال کردن صافی(های) انتخاب شده. خطای سرور رخ داد.';
$messages['deactivated'] = 'صافی(ها) با موفقیت فعال شدند.';
$messages['activated'] = 'صافی(ها) با موفقیت غیرفعال شدند.';
$messages['moved'] = 'صافی با موفقیت منتقل شد.';
+$messages['moveerror'] = 'ناتوانی در انتقال صافی انتخاب شده. خطای سرور رخ داد.';
$messages['nametoolong'] = 'نام خیلی بلند.';
$messages['namereserved'] = 'نام رزرو شده.';
$messages['setexist'] = 'مجموعه در حال حاضر موجود است.';
diff --git a/plugins/managesieve/localization/gl_ES.inc b/plugins/managesieve/localization/gl_ES.inc
index 6686ddcb4..f1f9d2faa 100644
--- a/plugins/managesieve/localization/gl_ES.inc
+++ b/plugins/managesieve/localization/gl_ES.inc
@@ -83,7 +83,7 @@ $labels['countislessthan'] = 'a conta é menor que';
$labels['countislessthanequal'] = 'a conta é menor ou igual a';
$labels['countequals'] = 'a conta é igual a';
$labels['countnotequals'] = 'a conta non é igual a';
-$labels['valueisgreaterthan'] = 'o valor é maior que ';
+$labels['valueisgreaterthan'] = 'o valor é meirande que ';
$labels['valueisgreaterthanequal'] = 'o valor é maior ou igual a';
$labels['valueislessthan'] = 'o valor é menor que';
$labels['valueislessthanequal'] = 'o valor é menor ou igual a';
diff --git a/plugins/managesieve/localization/he_IL.inc b/plugins/managesieve/localization/he_IL.inc
index 7c2ff29ce..f347d945d 100644
--- a/plugins/managesieve/localization/he_IL.inc
+++ b/plugins/managesieve/localization/he_IL.inc
@@ -54,6 +54,7 @@ $labels['add'] = 'הוספה';
$labels['del'] = 'מחיקה';
$labels['sender'] = 'השולח';
$labels['recipient'] = 'הנמען';
+$labels['vacationaddr'] = 'כתובות דוא"ל נוספות:';
$labels['vacationdays'] = 'באיזו תדירות ( בימים ) לשלוח הודעות:';
$labels['vacationinterval'] = 'באיזו תדירות לשלוח ההודעה';
$labels['days'] = 'ימים';
@@ -158,22 +159,31 @@ $labels['index'] = 'אינדקס:';
$labels['indexlast'] = 'בחזרה';
$messages['filterunknownerror'] = 'שגיאת שרת בלתי מוכרת.';
$messages['filterconnerror'] = 'לא ניתן להתחבר לשרת.';
+$messages['filterdeleteerror'] = 'לא ניתן למחוק סינון. שגיאת שרת.';
$messages['filterdeleted'] = 'המסנן נמחק בהצלחה.';
$messages['filtersaved'] = 'המסנן נשמר בהצלחה.';
+$messages['filtersaveerror'] = 'לא ניתן לשמור סינון. שגיאת שרת.';
$messages['filterdeleteconfirm'] = 'האם אכן ברצונך למחוק את המסנן הנבחר?';
$messages['ruledeleteconfirm'] = 'האם אכן ברצונך למחוק את הכלל הנבחר?';
$messages['actiondeleteconfirm'] = 'האם אכן ברצונך למחוק את הפעולה הנבחרת?';
$messages['forbiddenchars'] = 'תווים אסורים בשדה.';
$messages['cannotbeempty'] = 'השדה לא יכול להישאר ריק.';
$messages['ruleexist'] = 'כבר קיים מסנן בשם כזה.';
+$messages['setactivateerror'] = 'לא ניתן להפעיל את ערכת המסננים הנבחרת. אירעה שגיאה בצד השרת.';
+$messages['setdeactivateerror'] = 'לא ניתן להשבית רשימת מסננים שנבחרה. שגיאת שרת.';
+$messages['setdeleteerror'] = 'לא ניתן למחוק רשימת מסננים שנבחרה. שגיאת שרת.';
$messages['setactivated'] = 'ערכת המסננים הופעלה בהצלחה.';
$messages['setdeactivated'] = 'ערכת המסננים נוטרלה בהצלחה.';
$messages['setdeleted'] = 'ערכת המסננים נמחקה בהצלחה.';
$messages['setdeleteconfirm'] = 'האם אכן ברצונך למחוק את ערכת המסננים הנבחרת?';
+$messages['setcreateerror'] = 'לא ניתן ליצור ערכת מסננים. אירעה שגיאה בצד השרת.';
$messages['setcreated'] = 'ערכת המסננים נוצרה בהצלחה.';
+$messages['activateerror'] = 'לא ניתן להפעיל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
+$messages['deactivateerror'] = 'לא ניתן לנטרל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
$messages['deactivated'] = 'המסננים הופעלו בהצלחה.';
$messages['activated'] = 'המסננים נוטרלו בהצלחה.';
$messages['moved'] = 'המסנן הועבר בהצלחה.';
+$messages['moveerror'] = 'לא ניתן להעביר את המסנן הנבחר. אירעה שגיאה בצד השרת.';
$messages['nametoolong'] = 'השם ארוך מדי.';
$messages['namereserved'] = 'השם הזה שמור.';
$messages['setexist'] = 'הערכה כבר קיימת.';
diff --git a/plugins/managesieve/localization/hr_HR.inc b/plugins/managesieve/localization/hr_HR.inc
index eadbfcc0f..b3192abe5 100644
--- a/plugins/managesieve/localization/hr_HR.inc
+++ b/plugins/managesieve/localization/hr_HR.inc
@@ -47,13 +47,18 @@ $labels['messagesendcopy'] = 'Pošalji kopiju poruke na';
$labels['messagereply'] = 'Odgovori sa porukom';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Otkaži sa porukom';
+$labels['messagekeep'] = 'Zadrži poruku u mapi Inbox';
$labels['messagesrules'] = 'Za pristigle poruke:';
$labels['messagesactions'] = '...primijeni sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Primatelj';
+$labels['vacationaddr'] = 'Dodatna e-mail adresa(e):';
$labels['vacationdays'] = 'Koliko često slati poruku (u danima):';
+$labels['vacationinterval'] = 'Koliko često slati poruku:';
+$labels['days'] = 'dana';
+$labels['seconds'] = 'sekundi';
$labels['vacationreason'] = 'Tijelo poruke (razlog odmora):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['rulestop'] = 'Prekini izvođenje filtera';
@@ -77,11 +82,13 @@ $labels['countisgreaterthanequal'] = 'brojač je veći ili jednak od';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak od';
$labels['countequals'] = 'brojač je jednak';
+$labels['countnotequals'] = 'brojač nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka od';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka od';
$labels['valueequals'] = 'vrijednost je jednaka';
+$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake na poruku';
$labels['addflags'] = 'Dodaj oznake na poruku';
$labels['removeflags'] = 'Ukloni oznake sa poruke';
@@ -90,10 +97,45 @@ $labels['flagdeleted'] = 'Obrisana';
$labels['flaganswered'] = 'Odgovorena';
$labels['flagflagged'] = 'Označena';
$labels['flagdraft'] = 'Predložak';
+$labels['setvariable'] = 'Postavi varijablu';
+$labels['setvarname'] = 'Ime varijable:';
+$labels['setvarvalue'] = 'Vrijednost varijable:';
+$labels['setvarmodifiers'] = 'Modifikatori:';
+$labels['varlower'] = 'mala slova';
+$labels['varupper'] = 'velika slova';
+$labels['varlowerfirst'] = 'prvo slovo malo';
+$labels['varupperfirst'] = 'prvo slovo veliko';
+$labels['varquotewildcard'] = 'Citiraj specijalne znakove';
+$labels['varlength'] = 'duljina';
+$labels['notify'] = 'Pošalji obavijest';
+$labels['notifyaddress'] = 'Na e-mail adresu:';
+$labels['notifybody'] = 'Tekst obavijesti:';
+$labels['notifysubject'] = 'Naslov obavijesti:';
+$labels['notifyfrom'] = 'Pošiljatelj obavijesti:';
+$labels['notifyimportance'] = 'Važnost:';
+$labels['notifyimportancelow'] = 'niska';
+$labels['notifyimportancenormal'] = 'normalna';
+$labels['notifyimportancehigh'] = 'visoka';
$labels['filtercreate'] = 'Stvori filter';
$labels['usedata'] = 'Koristi podatke za filter:';
$labels['nextstep'] = 'Idući korak';
$labels['...'] = '…';
+$labels['currdate'] = 'Današnji datum';
+$labels['datetest'] = 'Datum';
+$labels['dateheader'] = 'zaglavlje:';
+$labels['year'] = 'godina';
+$labels['month'] = 'mjesec';
+$labels['day'] = 'dan';
+$labels['date'] = 'datum (yyyy-mm-dd)';
+$labels['julian'] = 'datum (julijanski)';
+$labels['hour'] = 'sat';
+$labels['minute'] = 'minute';
+$labels['second'] = 'sekunde';
+$labels['time'] = 'vrijeme (hh:mm:ss)';
+$labels['iso8601'] = 'datum (ISO8601)';
+$labels['std11'] = 'datum (RFC2822)';
+$labels['zone'] = 'vremenska zona';
+$labels['weekday'] = 'dan u tjednu (0-6)';
$labels['advancedopts'] = 'Napredne postavke';
$labels['body'] = 'Tijelo poruke';
$labels['address'] = 'adresa';
@@ -113,26 +155,38 @@ $labels['default'] = 'preddefinirano';
$labels['octet'] = 'strogo (oktet)';
$labels['asciicasemap'] = 'neosjetljivo na veličinu slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
+$labels['index'] = 'indeks:';
+$labels['indexlast'] = 'unatrag';
$messages['filterunknownerror'] = 'Nepoznata greška na poslužitelju';
$messages['filterconnerror'] = 'Nemoguće spajanje na poslužitelj (managesieve)';
+$messages['filterdeleteerror'] = 'Nemoguće brisanje filtera. Greška na poslužitelju.';
$messages['filterdeleted'] = 'Filter je uspješno obrisan';
$messages['filtersaved'] = 'Filter je uspješno spremljen';
+$messages['filtersaveerror'] = 'Nemoguće spremiti filter. Greška na poslužitelju.';
$messages['filterdeleteconfirm'] = 'Sigurno želite obrisati odabrani filter?';
$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrana pravila?';
$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrane akcije?';
$messages['forbiddenchars'] = 'Nedozvoljeni znakovi u polju';
$messages['cannotbeempty'] = 'Polje nesmije biti prazno';
$messages['ruleexist'] = 'Filter sa zadanim imenom već postoji.';
+$messages['setactivateerror'] = 'Nemoguće aktivirati odabranu grupu filtera. Greška na poslužitelju.';
+$messages['setdeactivateerror'] = 'Nemoguće deaktivirati odabranu grupu filtera. Greška na poslužitelju.';
+$messages['setdeleteerror'] = 'Nemoguće obrisati odabranu grupu filtera. Greška na poslužitelju.';
$messages['setactivated'] = 'Grupa filtera je uspješno aktivirana';
$messages['setdeactivated'] = 'Grupa filtera je uspješno deaktivirana';
$messages['setdeleted'] = 'Grupa filtera je uspješno obrisana';
$messages['setdeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabranu grupu filtera?';
+$messages['setcreateerror'] = 'Nemoguće stvoriti grupu filtera. Greška na poslužitelju.';
$messages['setcreated'] = 'Grupa filtera je uspješno stvorena';
+$messages['activateerror'] = 'Nije moguće omogućiti odabrani filter(e). Greška poslužitelja.';
+$messages['deactivateerror'] = 'Nije moguće onemogućiti odabrane filter(e). Greška poslužitelja.';
$messages['deactivated'] = 'Filter(i) omogućen(i) uspješno.';
$messages['activated'] = 'Filter(i) onemogućen(i) uspješno.';
$messages['moved'] = 'Filter uspješno premješten.';
+$messages['moveerror'] = 'Nije moguće premjestiti odabrani filter. Greška poslužitelja.';
$messages['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugačak';
$messages['namereserved'] = 'Rezervirano ime.';
$messages['setexist'] = 'Skup već postoji.';
$messages['nodata'] = 'Barem jedan pozicija mora biti odabrana!';
+$messages['invaliddateformat'] = 'Neispravan datum ili dio datuma';
?>
diff --git a/plugins/managesieve/localization/km_KH.inc b/plugins/managesieve/localization/km_KH.inc
new file mode 100644
index 000000000..a6094be55
--- /dev/null
+++ b/plugins/managesieve/localization/km_KH.inc
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | plugins/managesieve/localization/<lang>.inc |
+ | |
+ | Localization file of the Roundcube Webmail Managesieve plugin |
+ | Copyright (C) 2012-2013, The Roundcube Dev Team |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
+ | |
+ +-----------------------------------------------------------------------+
+
+ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
+*/
+$labels['filters'] = 'តម្រង';
+$labels['managefilters'] = 'គ្រប់គ្រង​តម្រប​សំបុត្រ​ចូល';
+$labels['filtername'] = 'ឈ្មោះ​តម្រង';
+$labels['newfilter'] = 'តម្រង​ថ្មី';
+$labels['filteradd'] = 'បន្ថែម​តម្រង';
+$labels['filterdel'] = 'លុប​តម្រង';
+$labels['moveup'] = 'រុញ​ទៅ​លើ';
+$labels['movedown'] = 'រុញ​ចុះ​ក្រោម';
+$labels['filterallof'] = 'ត្រូវ​គ្នា​ទៅ​នឹង​លក្ខខណ្ឌ​ទាំង​នេះ';
+$labels['filteranyof'] = 'ត្រូវ​គ្នា​ទៅ​នឹង​លក្ខខណ្ឌ​ណាមួយ';
+$labels['filterany'] = 'សារ​ទាំង​អស់';
+$labels['filtercontains'] = 'មាន​ផ្ទុក';
+$labels['filternotcontains'] = 'មិន​មាន';
+$labels['filteris'] = 'ស្មើ​នឹង';
+$labels['filterisnot'] = 'មិន​ស្មើ​នឹង';
+$labels['filterexists'] = 'មាន';
+$labels['filternotexists'] = 'មិន​មាន';
+$labels['filtermatches'] = 'សញ្ញាណ​ដែល​ត្រូវ';
+$labels['filterunder'] = 'ក្រោម';
+$labels['filterover'] = 'លើ';
+$labels['addrule'] = 'បន្ថែម​លក្ខខណ្ឌ';
+$labels['delrule'] = 'លុប​លក្ខខណ្ឌ';
+$labels['messagemoveto'] = 'ផ្លាស់​ទី​សារ​ទៅ';
+$labels['messageredirect'] = 'ប្ដូរ​ទិសដៅ​សារ​ទៅ';
+$labels['messagecopyto'] = 'ចម្លង​សារ​ទៅ';
+$labels['messagesendcopy'] = 'ផ្ញើ​ការ​ចម្លង​សារ​ទៅ';
+$labels['messagereply'] = 'ឆ្លើយ​តប​ជាមួយ​សារ';
+$labels['messagedelete'] = 'លុប​សារ';
+$labels['messagediscard'] = 'បោះបង់​ជាមួយ​នឹង​សារ';
+$labels['messagesrules'] = 'សម្រាប់​សំបុត្រ​ចូល៖';
+$labels['messagesactions'] = '...ប្រតិបត្តិ​សកម្មភាព​ទាំង​នេះ៖';
+$labels['add'] = 'បន្ថែម';
+$labels['del'] = 'លុប';
+$labels['sender'] = 'អ្នក​ផ្ញើ';
+$labels['recipient'] = 'អ្នក​ទទួល';
+$labels['vacationdays'] = 'តើ​ផ្ញើ​សារ​ញឹកញាប់​ប៉ុណ្ណា (ក្នុង​មួយ​ថ្ងៃ)៖';
+$labels['days'] = 'ថ្ងៃ';
+$labels['seconds'] = 'វិនាទី';
+$labels['vacationreason'] = 'តួ​សារ (ហេតុផល​វិស្សមកាល)៖';
+$labels['vacationsubject'] = 'ប្រធានបទ​សារ៖';
+$labels['rulestop'] = 'ឈប់​គិត​ទៅ​លើ​លក្ខខណ្ឌ';
+$labels['enable'] = 'បើក/បិទ';
+$labels['filterdef'] = 'អត្ថន័យ​តម្រង';
+$labels['active'] = 'សកម្ម';
+$labels['none'] = 'គ្មាន';
+$labels['fromfile'] = 'ពី​ឯកសារ';
+$labels['valuenotequals'] = 'តម្លៃ​មិន​ស្មើ​នឹង';
+$labels['flagread'] = 'បាន​អាន';
+$labels['flagdeleted'] = 'បាន​លុប';
+$labels['flaganswered'] = 'បាន​ឆ្លើយ';
+$labels['flagflagged'] = 'បាន​ដាក់​ទង់';
+$labels['flagdraft'] = 'ការ​ព្រាង';
+$labels['setvariable'] = 'កំណត់​អថេរ';
+$labels['setvarname'] = 'ឈ្មោះ​អថេរ៖';
+$labels['setvarvalue'] = 'តម្លៃ​អថេរ៖';
+$labels['varlower'] = 'អក្សរ​តូច';
+$labels['varupper'] = 'អក្សរ​ធំ';
+$labels['varlength'] = 'ប្រវែង';
+$labels['notify'] = 'ផ្ញើ​ការ​ជូន​ដំណឹង';
+$labels['notifyaddress'] = 'ទៅ​អាសយដ្ឋាន​អ៊ីមែល៖';
+$labels['notifybody'] = 'តួ​ការ​ជូន​ដំណឹង៖';
+$labels['notifysubject'] = 'ប្រធានបទ​ការ​ជូន​ដំណឹង៖';
+$labels['notifyfrom'] = 'អ្នក​ផ្ញើ​ការ​ជូន​ដំណឹង៖';
+$labels['notifyimportance'] = 'សំខាន់៖';
+$labels['notifyimportancelow'] = 'ទាប';
+$labels['notifyimportancenormal'] = 'ធម្មតា';
+$labels['notifyimportancehigh'] = 'ខ្ពស់';
+$labels['filtercreate'] = 'បង្កើត​តម្រង';
+$labels['usedata'] = 'ប្រើ​ទិន្នន័យ​ទាំង​នេះ​ក្នុង​តម្រង៖';
+$labels['nextstep'] = 'ជំហាន​បន្ទាប់';
+$labels['...'] = '...';
+$labels['currdate'] = 'កាលបរិច្ឆេទ​បច្ចុប្បន្ន';
+$labels['datetest'] = 'កាលបរិច្ឆេទ';
+$labels['dateheader'] = 'ក្បាល៖';
+$labels['year'] = 'ឆ្នាំ';
+$labels['month'] = 'ខែ';
+$labels['day'] = 'ថ្ងៃ';
+$labels['date'] = 'កាល​បរិច្ឆេទ (yyyy-mm-dd)';
+$labels['julian'] = 'កាល​បរិច្ឆេទ (julian)';
+$labels['hour'] = 'ម៉ោង';
+$labels['minute'] = 'នាទី';
+$labels['second'] = 'វិនាទី';
+$labels['time'] = 'ម៉ោង (hh:mm:ss)';
+$labels['iso8601'] = 'កាល​បរិច្ឆេទ (ISO8601)';
+$labels['std11'] = 'កាល​បរិច្ឆេទ (RFC2822)';
+$labels['zone'] = 'តំបន់​ម៉ោង';
+$labels['weekday'] = 'ថ្ងៃ​សប្ដាហ៍ (0-6)';
+$labels['advancedopts'] = 'ជម្រើស​កម្រិត​ខ្ពស់';
+$labels['body'] = 'តួ';
+$labels['address'] = 'អាសយដ្ឋាន';
+$labels['envelope'] = 'ស្រោម​សំបុត្រ';
+$labels['text'] = 'អត្ថបទ';
+$labels['contenttype'] = 'ប្រភេទ​មាតិកា';
+$labels['modtype'] = 'ប្រភេទ៖';
+$labels['allparts'] = 'ទាំងអស់';
+$labels['domain'] = 'ដូមេន';
+$labels['localpart'] = 'ផ្នែក​មូលដ្ឋាន';
+$labels['user'] = 'អ្នកប្រើ';
+$labels['detail'] = 'លម្អិត';
+$labels['index'] = 'លិបិក្រម៖';
+$labels['indexlast'] = 'បកក្រោយ';
+?>
diff --git a/plugins/managesieve/localization/sv_SE.inc b/plugins/managesieve/localization/sv_SE.inc
index 63f88aeba..131d46c5f 100644
--- a/plugins/managesieve/localization/sv_SE.inc
+++ b/plugins/managesieve/localization/sv_SE.inc
@@ -132,8 +132,8 @@ $labels['hour'] = 'timme';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (hh:mm:ss)';
-$labels['iso8601'] = 'datum (ISO8601)';
-$labels['std11'] = 'datum (RFC2822)';
+$labels['iso8601'] = 'datum (ISO 8601)';
+$labels['std11'] = 'datum (RFC 2822)';
$labels['zone'] = 'tidszon';
$labels['weekday'] = 'veckodag (0-6)';
$labels['advancedopts'] = 'Avancerade inställningar';
@@ -184,7 +184,7 @@ $messages['deactivated'] = 'Filter aktiverat.';
$messages['activated'] = 'Filter deaktiverat.';
$messages['moved'] = 'Filter flyttat.';
$messages['moveerror'] = 'Kunde inte flytta filter på grund av serverfel.';
-$messages['nametoolong'] = 'Filtergruppen kan inte läggas till med för långt namn';
+$messages['nametoolong'] = 'För långt namn.';
$messages['namereserved'] = 'Reserverat namn.';
$messages['setexist'] = 'Filtergrupp finns redan.';
$messages['nodata'] = 'Minst en position måste väljas!';
diff --git a/plugins/managesieve/localization/uk_UA.inc b/plugins/managesieve/localization/uk_UA.inc
index 9dc0bd3cd..d85b03bf5 100644
--- a/plugins/managesieve/localization/uk_UA.inc
+++ b/plugins/managesieve/localization/uk_UA.inc
@@ -43,12 +43,14 @@ $labels['messagesendcopy'] = 'Надсилати копію листа на';
$labels['messagereply'] = 'Автовідповідач';
$labels['messagedelete'] = 'Видалити повідомлення';
$labels['messagediscard'] = 'Відхилити з повідомленням';
+$labels['messagekeep'] = 'Залишити лист у Вхідних';
$labels['messagesrules'] = 'Для вхідної пошти';
$labels['messagesactions'] = '... виконати дію:';
$labels['add'] = 'Додати';
$labels['del'] = 'Видалити';
$labels['sender'] = 'Відправник';
$labels['recipient'] = 'Отримувач';
+$labels['vacationaddr'] = 'Додаткова адреса(и):';
$labels['vacationdays'] = 'Як часто повторювати (у днях):';
$labels['days'] = 'днів';
$labels['seconds'] = 'секунд';
@@ -68,8 +70,18 @@ $labels['none'] = 'нічого';
$labels['fromset'] = 'з набору';
$labels['fromfile'] = 'з файлу';
$labels['filterdisabled'] = 'Фільтр вимкнено';
+$labels['countisgreaterthan'] = 'лічильник більший за';
+$labels['countisgreaterthanequal'] = 'лічильник більший або рівний ';
+$labels['countislessthan'] = 'лічильник менший';
+$labels['countislessthanequal'] = 'льчильник менший або рівний';
+$labels['countequals'] = 'лічильник рівний';
+$labels['countnotequals'] = 'лічильник рівний';
+$labels['valueisgreaterthan'] = 'значення більше за';
+$labels['valueisgreaterthanequal'] = 'значення більше або рівне';
$labels['valueislessthan'] = 'значення менше за';
$labels['valueislessthanequal'] = 'значення менше або рівне';
+$labels['valueequals'] = 'значення рівне';
+$labels['valuenotequals'] = 'значення не рівне';
$labels['flagdraft'] = 'Чернетка';
$labels['setvariable'] = 'Встановити змінну';
$labels['setvarname'] = 'Назва змінної:';
@@ -80,12 +92,17 @@ $labels['varupper'] = 'верхній регістр';
$labels['varlowerfirst'] = 'перший символ в нижньому регістрі';
$labels['varupperfirst'] = 'перший символ в верхньому регістрі';
$labels['varlength'] = 'довжина';
+$labels['notify'] = 'Надсилати сповіщення';
$labels['notifyaddress'] = 'На електронну адресу:';
+$labels['notifybody'] = 'Тіло сповіщення:';
+$labels['notifysubject'] = 'Тема сповіщення:';
+$labels['notifyfrom'] = 'Відправник сповіщення:';
$labels['filtercreate'] = 'Створити фільтр';
$labels['nextstep'] = 'Наступний крок';
$labels['...'] = '...';
$labels['currdate'] = 'Поточна дата';
$labels['datetest'] = 'Дата';
+$labels['dateheader'] = 'шапка:';
$labels['year'] = 'рік';
$labels['month'] = 'місяць';
$labels['day'] = 'день';
@@ -98,10 +115,17 @@ $labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часовий пояс';
$labels['advancedopts'] = 'Розширені параметри';
+$labels['body'] = 'Тіло';
$labels['address'] = 'адреса';
$labels['text'] = 'текст';
$labels['modtype'] = 'тип:';
$labels['allparts'] = 'все';
+$labels['domain'] = 'домен';
+$labels['localpart'] = 'локальна частина';
+$labels['user'] = 'користувач';
+$labels['detail'] = 'деталь';
+$labels['default'] = 'типово';
+$labels['index'] = 'індекс:';
$messages['filterunknownerror'] = 'Невідома помилка сервера';
$messages['filterconnerror'] = 'Неможливо з\'єднатися з сервером';
$messages['filterdeleted'] = 'Фільтр успішно видалено';
@@ -115,5 +139,6 @@ $messages['setactivated'] = 'Набір фільтрів активовано у
$messages['setdeleted'] = 'Набір фільтрів видалено успішно';
$messages['setdeleteconfirm'] = 'Ви впевнені, що хочете видалити обраний набір?';
$messages['setcreated'] = 'Набір фільтрів створено успішно';
+$messages['moveerror'] = 'Неможливо перемістити обраний фільтр. Помилка сервера.';
$messages['nametoolong'] = 'Не вдалося створити набір. Занадто довга назва';
?>
diff --git a/plugins/managesieve/localization/vi_VN.inc b/plugins/managesieve/localization/vi_VN.inc
index 747d1931f..c7913813e 100644
--- a/plugins/managesieve/localization/vi_VN.inc
+++ b/plugins/managesieve/localization/vi_VN.inc
@@ -47,13 +47,18 @@ $labels['messagesendcopy'] = 'Gửi bản sao chép tin nhắn tới';
$labels['messagereply'] = 'Trả lời tin nhắn';
$labels['messagedelete'] = 'Xóa thư';
$labels['messagediscard'] = 'Loại bỏ với tin nhắn';
+$labels['messagekeep'] = 'Giữ thư ở Hộp thư chính';
$labels['messagesrules'] = 'Với thư đến';
$labels['messagesactions'] = 'Thực hiện các hành động sau:';
$labels['add'] = 'Thêm';
$labels['del'] = 'Xoá';
$labels['sender'] = 'Người gửi';
$labels['recipient'] = 'Người nhận';
+$labels['vacationaddr'] = '(Các) Địa chỉ email bổ sung của tôi:';
$labels['vacationdays'] = 'Số lần gửi thư (trong ngày)';
+$labels['vacationinterval'] = 'Tần suất gửi thư:';
+$labels['days'] = 'ngày';
+$labels['seconds'] = 'giây';
$labels['vacationreason'] = 'Nội dung chính';
$labels['vacationsubject'] = 'Tiêu đề thư';
$labels['rulestop'] = 'Ngừng đánh giá qui luật';
@@ -77,11 +82,13 @@ $labels['countisgreaterthanequal'] = 'Đếm lớn hơn hoặc bằng';
$labels['countislessthan'] = 'Đếm ít hơn';
$labels['countislessthanequal'] = 'Đếm ít hơn hoặc bằng';
$labels['countequals'] = 'Đếm bằng';
+$labels['countnotequals'] = 'đếm không bằng với';
$labels['valueisgreaterthan'] = 'Giá trị lớn hơn';
$labels['valueisgreaterthanequal'] = 'Giá trị lớn hơn hoặc bằng';
$labels['valueislessthan'] = 'Giá trị nhỏ hơn';
$labels['valueislessthanequal'] = 'Giá trị nhỏ hơn hoặc bằng';
$labels['valueequals'] = 'Giá trị bằng';
+$labels['valuenotequals'] = 'giá trị không bằng với';
$labels['setflags'] = 'Thiết lập đánh dấu cho thư';
$labels['addflags'] = 'Thêm đánh dấu cho thư';
$labels['removeflags'] = 'Bỏ đánh dấu khỏi thư';
@@ -102,6 +109,9 @@ $labels['varquotewildcard'] = 'trích dẫn ký tự đặc biệt';
$labels['varlength'] = 'độ dài';
$labels['notify'] = 'Gửi thông báo';
$labels['notifyaddress'] = 'Gửi đến địa chỉ email:';
+$labels['notifybody'] = 'Nội dung thông báo:';
+$labels['notifysubject'] = 'Tiêu đề thông báo:';
+$labels['notifyfrom'] = 'Người gửi thông báo:';
$labels['notifyimportance'] = 'Mức độ quan trọng:';
$labels['notifyimportancelow'] = 'thấp';
$labels['notifyimportancenormal'] = 'vừa phải';
@@ -110,6 +120,22 @@ $labels['filtercreate'] = 'Tạo bộ lọc';
$labels['usedata'] = 'Dùng dữ liệu trong bộ lọc sau:';
$labels['nextstep'] = 'Bước tiếp theo';
$labels['...'] = '…';
+$labels['currdate'] = 'Ngày hiện tại';
+$labels['datetest'] = 'Ngày';
+$labels['dateheader'] = 'tiêu đề:';
+$labels['year'] = 'năm';
+$labels['month'] = 'tháng';
+$labels['day'] = 'ngày';
+$labels['date'] = 'ngày (cú pháp: năm-tháng-ngày)';
+$labels['julian'] = 'ngày (theo kiểu Julian)';
+$labels['hour'] = 'giờ';
+$labels['minute'] = 'phút';
+$labels['second'] = 'giây';
+$labels['time'] = 'giờ (cú pháp: giờ:phút:giây)';
+$labels['iso8601'] = 'ngày (theo chuẩn ISO 8601)';
+$labels['std11'] = 'ngày (theo chuẩn RFC 2822)';
+$labels['zone'] = 'vùng thời gian';
+$labels['weekday'] = 'ngày trog tuần (0-6)';
$labels['advancedopts'] = 'Tùy chọn tính năng cao hơn';
$labels['body'] = 'Nội dung';
$labels['address'] = 'Địa chỉ';
@@ -129,26 +155,38 @@ $labels['default'] = 'Mặc định';
$labels['octet'] = 'Khắt khe';
$labels['asciicasemap'] = 'Không phân biệt chữ hoa chữ thường';
$labels['asciinumeric'] = 'Bảng mã ASCII';
+$labels['index'] = 'chỉ mục:';
+$labels['indexlast'] = 'ngược';
$messages['filterunknownerror'] = 'Không tìm được lỗi máy chủ';
$messages['filterconnerror'] = 'Không kết nối được với máy chủ.';
+$messages['filterdeleteerror'] = 'Không thể xóa bộ lọc. Xuất hiện lỗi ở máy chủ';
$messages['filterdeleted'] = 'Xóa bộ lọc thành công';
$messages['filtersaved'] = 'Lưu bộ lọc thành công';
+$messages['filtersaveerror'] = 'Không thể lưu bộ lọc. Xuất hiện lỗi ở máy chủ';
$messages['filterdeleteconfirm'] = 'Bạn có thực sự muốn xóa bộ lọc được chọn?';
$messages['ruledeleteconfirm'] = 'Bạn có chắc chắn muốn xóa qui luật được chọn?';
$messages['actiondeleteconfirm'] = 'Bạn có chắc chắn muốn xóa hành động được chọn?';
$messages['forbiddenchars'] = 'Ký tự bị cấm trong ô';
$messages['cannotbeempty'] = 'Ô không thể bị bỏ trống';
$messages['ruleexist'] = 'Đã tồn tại bộ lọc với tên cụ thế';
+$messages['setactivateerror'] = 'Không thể kích hoạt bộ lọc được lựa chọn. Xuất hiện lỗi ở máy chủ';
+$messages['setdeactivateerror'] = 'Không thể tắt bộ lọc được lựa chọn. Xuất hiện lỗi ở máy chủ';
+$messages['setdeleteerror'] = 'Không thể xóa bộ lọc được lựa chọn. Xuất hiện lỗi ở máy chủ.';
$messages['setactivated'] = 'Bộ lọc được khởi động thành công';
$messages['setdeactivated'] = 'Ngừng kích hoạt bộ lọc thành công';
$messages['setdeleted'] = 'Xóa bộ lọc thành công';
$messages['setdeleteconfirm'] = 'Bạn có chắc bạn muốn xóa thiết lập bộ lọc được chọn?';
+$messages['setcreateerror'] = 'Không thể tạo thiết lập bộ lọc. Có lỗi xuất hiện ở máy chủ';
$messages['setcreated'] = 'Thiết lập bộ lọc được tạo thành công';
+$messages['activateerror'] = 'Không thể khởi động (các) bộ lọc được chọn. Có lỗi xuất hiện ở máy chủ';
+$messages['deactivateerror'] = 'Không thể tắt (các) bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ';
$messages['deactivated'] = 'Bộ lọc được khởi động thành công';
$messages['activated'] = 'Bộ lọc được tắt thành công';
$messages['moved'] = 'Bộ lọc được chuyển đi thành công';
+$messages['moveerror'] = 'Không thể chuyển bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ.';
$messages['nametoolong'] = 'Tên quá dài';
$messages['namereserved'] = 'Tên đã được bảo vệ';
$messages['setexist'] = 'Thiết lập đã tồn tại';
$messages['nodata'] = 'Ít nhất một vị trí phải được chọn';
+$messages['invaliddateformat'] = 'Lỗi không đúng cú pháp ngày hoặc nhập ngày sai';
?>
diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js
index 15637026e..7fcd9d9c6 100644
--- a/plugins/managesieve/managesieve.js
+++ b/plugins/managesieve/managesieve.js
@@ -50,6 +50,18 @@ if (window.rcmail) {
$('textarea[data-type="list"]', rcmail.gui_objects.sieveform).each(function() {
smart_field_init(this);
});
+
+ // enable date pickers on date fields
+ if ($.datepicker && rcmail.env.date_format) {
+ $.datepicker.setDefaults({
+ dateFormat: rcmail.env.date_format,
+ changeMonth: true,
+ showOtherMonths: true,
+ selectOtherMonths: true,
+ onSelect: function(dateText) { $(this).focus().val(dateText) }
+ });
+ $('input.datepicker').datepicker();
+ }
}
else {
rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
@@ -226,7 +238,7 @@ rcube_webmail.prototype.managesieve_updatelist = function(action, o)
// Delete filter row
case 'del':
- var i = 0, list = this.filters_list;
+ var id = o.id, list = this.filters_list;
list.remove_row(this.managesieve_rowid(o.id));
list.clear_selection();
@@ -241,8 +253,14 @@ rcube_webmail.prototype.managesieve_updatelist = function(action, o)
return;
}
- // modify ID and remove all attached events
- $(this).attr('id', 'rcmrow'+(i++)).unbind();
+ var rowid = this.id.substr(6);
+
+ // remove all attached events
+ $(this).unbind();
+
+ // update row id
+ if (rowid > id)
+ $(this).attr('id', 'rcmrow' + (rowid-1));
});
list.init();
@@ -437,6 +455,12 @@ rcube_webmail.prototype.managesieve_unfocus_filter = function(row)
// Form submition
rcube_webmail.prototype.managesieve_save = function()
{
+ if (this.env.action == 'plugin.managesieve-vacation') {
+ var data = $(this.gui_objects.sieveform).serialize();
+ this.http_post('plugin.managesieve-vacation', data, this.display_message(this.get_label('managesieve.vacation.saving'), 'loading'));
+ 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)
@@ -502,6 +526,11 @@ rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
row.setAttribute('id', 'actionrow'+id);
row.innerHTML = content;
+ // initialize smart list inputs
+ $('textarea[data-type="list"]', row).each(function() {
+ smart_field_init(this);
+ });
+
this.managesieve_formbuttons(div);
}
};
@@ -790,9 +819,17 @@ rcube_webmail.prototype.managesieve_tip_register = function(tips)
/********* Mail UI methods *********/
/*********************************************************/
-rcube_webmail.prototype.managesieve_create = function()
+rcube_webmail.prototype.managesieve_create = function(force)
{
- if (!rcmail.env.sieve_headers || !rcmail.env.sieve_headers.length)
+ if (!force && this.env.action != 'show' && !$('#'+this.env.contentframe).is(':visible')) {
+ var uid = this.message_list.get_single_selection(),
+ lock = this.set_busy(true, 'loading');
+
+ this.http_post('plugin.managesieve-action', {_uid: uid}, lock);
+ return;
+ }
+
+ if (!this.env.sieve_headers || !this.env.sieve_headers.length)
return;
var i, html, buttons = {}, dialog = $("#sievefilterform");
@@ -805,9 +842,9 @@ rcube_webmail.prototype.managesieve_create = function()
// build dialog window content
html = '<fieldset><legend>'+this.gettext('managesieve.usedata')+'</legend><ul>';
- for (i in rcmail.env.sieve_headers)
+ for (i in this.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>';
+ +'<label for="sievehdr'+i+'">'+this.env.sieve_headers[i][0]+':</label> '+this.env.sieve_headers[i][1]+'</li>';
html += '</ul></fieldset>';
dialog.html(html);
diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php
index 7a7faee4c..aba34251c 100644
--- a/plugins/managesieve/managesieve.php
+++ b/plugins/managesieve/managesieve.php
@@ -42,6 +42,7 @@ class managesieve extends rcube_plugin
// register actions
$this->register_action('plugin.managesieve', array($this, 'managesieve_actions'));
$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'));
if ($this->rc->task == 'settings') {
@@ -69,8 +70,25 @@ class managesieve extends rcube_plugin
}
// load localization
- $this->add_texts('localization/', array('filters','managefilters'));
- $this->include_script('managesieve.js');
+ $this->add_texts('localization/');
+
+ if (strpos($this->rc->action, 'plugin.managesieve') === 0) {
+ $this->include_script('managesieve.js');
+ }
+
+ // include styles
+ $skin_path = $this->local_skin_path();
+ if ($this->rc->task == 'settings') {
+ if (is_file($this->home . "/$skin_path/managesieve.css")) {
+ $this->include_stylesheet("$skin_path/managesieve.css");
+ }
+ }
+ else {
+ if (is_file($this->home . "/$skin_path/managesieve_mail.css")) {
+ $this->include_stylesheet("$skin_path/managesieve_mail.css");
+ }
+ }
+
$this->ui_initialized = true;
}
@@ -80,8 +98,30 @@ class managesieve extends rcube_plugin
*/
function settings_actions($args)
{
- // register as settings action
- $args['actions'][] = array('action' => 'plugin.managesieve', 'class' => 'filter', 'label' => 'filters', 'domain' => 'managesieve');
+ $this->load_config();
+
+ $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
+
+ // register Filters action
+ if ($vacation_mode != 2) {
+ $args['actions'][] = array(
+ 'action' => 'plugin.managesieve',
+ 'class' => 'filter',
+ 'label' => 'filters',
+ 'domain' => 'managesieve',
+ );
+ }
+
+ // register Vacation action
+ if ($vacation_mode > 0) {
+ $args['actions'][] = array(
+ 'action' => 'plugin.managesieve-vacation',
+ 'class' => 'vacation',
+ 'label' => 'vacation',
+ 'domain' => 'managesieve',
+ );
+ }
+
return $args;
}
@@ -101,12 +141,6 @@ class managesieve extends rcube_plugin
// include js script and localization
$this->init_ui();
- // include styles
- $skin_path = $this->local_skin_path();
- if (is_file($this->home . "/$skin_path/managesieve_mail.css")) {
- $this->include_stylesheet("$skin_path/managesieve_mail.css");
- }
-
// add 'Create filter' item to message menu
$this->api->add_content(html::tag('li', null,
$this->api->output->button(array(
@@ -137,30 +171,12 @@ class managesieve extends rcube_plugin
$this->mail_headers_done = true;
- $headers = $args['headers'];
- $ret = array();
-
- if ($headers->subject)
- $ret[] = array('Subject', rcube_mime::decode_header($headers->subject));
-
- // @TODO: List-Id, others?
- foreach (array('From', 'To') as $h) {
- $hl = strtolower($h);
- if ($headers->$hl) {
- $list = rcube_mime::decode_address_list($headers->$hl);
- foreach ($list as $item) {
- if ($item['mailto']) {
- $ret[] = array($h, $item['mailto']);
- }
- }
- }
- }
+ $headers = $this->parse_headers($args['headers']);
if ($this->rc->action == 'preview')
- $this->rc->output->command('parent.set_env', array('sieve_headers' => $ret));
+ $this->rc->output->command('parent.set_env', array('sieve_headers' => $headers));
else
- $this->rc->output->set_env('sieve_headers', $ret);
-
+ $this->rc->output->set_env('sieve_headers', $headers);
return $args;
}
@@ -170,8 +186,22 @@ class managesieve extends rcube_plugin
*/
function managesieve_actions()
{
+ // handle fetching email headers for the new filter form
+ if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GPC)) {
+ $mailbox = $this->rc->get_storage()->get_folder();
+ $message = new rcube_message($uid, $mailbox);
+ $headers = $this->parse_headers($message->headers);
+
+ $this->rc->output->set_env('sieve_headers', $headers);
+ $this->rc->output->command('managesieve_create', true);
+ $this->rc->output->send();
+ }
+
+ // handle other actions
+ $engine_type = $this->rc->action == 'plugin.managesieve-vacation' ? 'vacation' : '';
+ $engine = $this->get_engine($engine_type);
+
$this->init_ui();
- $engine = $this->get_engine();
$engine->actions();
}
@@ -195,7 +225,7 @@ class managesieve extends rcube_plugin
/**
* Initializes engine object
*/
- private function get_engine()
+ private function get_engine($type = null)
{
if (!$this->engine) {
$this->load_config();
@@ -205,9 +235,36 @@ class managesieve extends rcube_plugin
$include_path .= ini_get('include_path');
set_include_path($include_path);
- $this->engine = new rcube_sieve_engine($this);
+ $class_name = 'rcube_sieve_' . ($type ? $type : 'engine');
+ $this->engine = new $class_name($this);
}
return $this->engine;
}
+
+ /**
+ * Extract mail headers for new filter form
+ */
+ private function parse_headers($headers)
+ {
+ $result = array();
+
+ if ($headers->subject)
+ $result[] = array('Subject', rcube_mime::decode_header($headers->subject));
+
+ // @TODO: List-Id, others?
+ foreach (array('From', 'To') as $h) {
+ $hl = strtolower($h);
+ if ($headers->$hl) {
+ $list = rcube_mime::decode_address_list($headers->$hl);
+ foreach ($list as $item) {
+ if ($item['mailto']) {
+ $result[] = array($h, $item['mailto']);
+ }
+ }
+ }
+ }
+
+ return $result;
+ }
}
diff --git a/plugins/managesieve/package.xml b/plugins/managesieve/package.xml
index 6ae53c250..f4c4bb941 100644
--- a/plugins/managesieve/package.xml
+++ b/plugins/managesieve/package.xml
@@ -17,9 +17,9 @@
<email>alec@alec.pl</email>
<active>yes</active>
</lead>
- <date>2013-09-09</date>
+ <date>2014-02-14</date>
<version>
- <release>7.0</release>
+ <release>7.2</release>
<api>7.0</api>
</version>
<stability>
diff --git a/plugins/managesieve/skins/classic/managesieve.css b/plugins/managesieve/skins/classic/managesieve.css
index 59d88cb46..836e16d5a 100644
--- a/plugins/managesieve/skins/classic/managesieve.css
+++ b/plugins/managesieve/skins/classic/managesieve.css
@@ -115,7 +115,7 @@ body.iframe
padding: 20px 10px 10px 10px;
}
-legend, label
+#filter-form legend, #filter-form label
{
color: #666666;
}
@@ -410,3 +410,21 @@ body.iframe.mail #filter-form
{
padding: 10px 5px 5px 5px;
}
+
+#vacationform .listarea {
+ max-height: 75px;
+}
+
+#vacationform .listelement,
+#vacationform .listelement .reset {
+ height: 18px;
+}
+
+#vacationform .listelement .reset {
+ background-position: -1px 1px;
+}
+
+#vacationform .listelement input {
+ vertical-align: top;
+ border: 0;
+}
diff --git a/plugins/managesieve/skins/classic/managesieve_mail.css b/plugins/managesieve/skins/classic/managesieve_mail.css
index 87a11cc92..1ade4f790 100644
--- a/plugins/managesieve/skins/classic/managesieve_mail.css
+++ b/plugins/managesieve/skins/classic/managesieve_mail.css
@@ -1,6 +1,6 @@
#messagemenu li a.filterlink {
background-image: url(images/filter.png);
- background-position: 7px 0;
+ background-position: 7px 1px;
}
#sievefilterform {
diff --git a/plugins/managesieve/skins/classic/templates/filteredit.html b/plugins/managesieve/skins/classic/templates/filteredit.html
index 6ecb03cae..8cef81682 100644
--- a/plugins/managesieve/skins/classic/templates/filteredit.html
+++ b/plugins/managesieve/skins/classic/templates/filteredit.html
@@ -3,7 +3,6 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
</head>
<body class="iframe<roundcube:exp expression="env:task != 'mail' ? '' : ' mail'" />">
diff --git a/plugins/managesieve/skins/classic/templates/managesieve.html b/plugins/managesieve/skins/classic/templates/managesieve.html
index 3d84466d8..5ed099419 100644
--- a/plugins/managesieve/skins/classic/templates/managesieve.html
+++ b/plugins/managesieve/skins/classic/templates/managesieve.html
@@ -3,7 +3,6 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<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>
diff --git a/plugins/managesieve/skins/classic/templates/setedit.html b/plugins/managesieve/skins/classic/templates/setedit.html
index 26f7fece6..c1010cae6 100644
--- a/plugins/managesieve/skins/classic/templates/setedit.html
+++ b/plugins/managesieve/skins/classic/templates/setedit.html
@@ -3,7 +3,6 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
</head>
<body class="iframe">
diff --git a/plugins/managesieve/skins/classic/templates/vacation.html b/plugins/managesieve/skins/classic/templates/vacation.html
new file mode 100644
index 000000000..bf94edb20
--- /dev/null
+++ b/plugins/managesieve/skins/classic/templates/vacation.html
@@ -0,0 +1,31 @@
+<!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" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body>
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+ <div class="box" style="height: 100%; overflow: auto">
+ <div id="prefs-title" class="boxtitle"><roundcube:label name="managesieve.vacation" /></div>
+ <roundcube:object name="vacationform" id="vacationform" style="margin: 10px 10px 0 10px" />
+ <div id="formfooter" style="padding: 0 10px">
+ <div class="footerleft">
+ <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+ </div>
+ </div>
+ </div>
+</div>
+
+<script type="text/javascript">
+rcube_init_mail_ui();
+</script>
+
+</body>
+</html>
diff --git a/plugins/managesieve/skins/larry/images/vacation_icons.png b/plugins/managesieve/skins/larry/images/vacation_icons.png
new file mode 100644
index 000000000..f8933d487
--- /dev/null
+++ b/plugins/managesieve/skins/larry/images/vacation_icons.png
Binary files differ
diff --git a/plugins/managesieve/skins/larry/managesieve.css b/plugins/managesieve/skins/larry/managesieve.css
index 2144fe13f..1f954caf2 100644
--- a/plugins/managesieve/skins/larry/managesieve.css
+++ b/plugins/managesieve/skins/larry/managesieve.css
@@ -89,7 +89,7 @@ body.iframe
padding: 20px 10px 10px 10px;
}
-legend, label
+#filter-form legend, #filter-form label
{
color: #666666;
}
@@ -124,7 +124,7 @@ div.rulerow table, div.actionrow table
min-width: 600px;
}
-td
+#filter-form td
{
vertical-align: top;
}
@@ -414,3 +414,41 @@ body.iframe.mail #filter-form
{
padding: 10px 5px 5px 5px;
}
+
+
+/* vacation form */
+#settings-sections span.vacation a {
+ background: url(images/vacation_icons.png) no-repeat 7px 1px;
+}
+
+#settings-sections span.vacation.selected a {
+ background-position: 7px -23px;
+}
+
+#managesieve-vacation {
+ position: absolute;
+ top: 0;
+ left: 212px;
+ right: 0;
+ bottom: 0;
+ overflow: auto;
+}
+
+#vacationform .listarea {
+ max-height: 91px;
+}
+
+#vacationform .listelement,
+#vacationform .listelement .reset {
+ height: 22px;
+}
+
+#vacationform .listelement .reset {
+ background-position: -1px 3px;
+}
+
+#vacationform .listelement input {
+ vertical-align: top;
+ border: 0;
+ box-shadow: none;
+}
diff --git a/plugins/managesieve/skins/larry/managesieve_mail.css b/plugins/managesieve/skins/larry/managesieve_mail.css
index ea417bdb7..855aa8e7d 100644
--- a/plugins/managesieve/skins/larry/managesieve_mail.css
+++ b/plugins/managesieve/skins/larry/managesieve_mail.css
@@ -1,5 +1,5 @@
ul.toolbarmenu li span.filterlink {
- background-position: 0 -1924px;
+ background-position: 0 -2174px;
}
#sievefilterform {
diff --git a/plugins/managesieve/skins/larry/templates/filteredit.html b/plugins/managesieve/skins/larry/templates/filteredit.html
index 602816af7..1933b58ae 100644
--- a/plugins/managesieve/skins/larry/templates/filteredit.html
+++ b/plugins/managesieve/skins/larry/templates/filteredit.html
@@ -3,7 +3,6 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
</head>
<body class="iframe<roundcube:exp expression="env:task != 'mail' ? ' floatingbuttons' : ' mail'" />">
diff --git a/plugins/managesieve/skins/larry/templates/managesieve.html b/plugins/managesieve/skins/larry/templates/managesieve.html
index 6ef3b2d91..471bbf4d2 100644
--- a/plugins/managesieve/skins/larry/templates/managesieve.html
+++ b/plugins/managesieve/skins/larry/templates/managesieve.html
@@ -3,7 +3,6 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
</head>
<body class="noscroll">
diff --git a/plugins/managesieve/skins/larry/templates/setedit.html b/plugins/managesieve/skins/larry/templates/setedit.html
index 9fc115dc7..3b8f98b36 100644
--- a/plugins/managesieve/skins/larry/templates/setedit.html
+++ b/plugins/managesieve/skins/larry/templates/setedit.html
@@ -3,7 +3,6 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
-<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
</head>
<body class="iframe floatingbuttons">
diff --git a/plugins/managesieve/skins/larry/templates/vacation.html b/plugins/managesieve/skins/larry/templates/vacation.html
new file mode 100644
index 000000000..c91eb87c8
--- /dev/null
+++ b/plugins/managesieve/skins/larry/templates/vacation.html
@@ -0,0 +1,30 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="noscroll">
+
+<roundcube:include file="/includes/header.html" />
+
+<div id="mainscreen" class="offset">
+
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="managesieve-vacation" class="uibox contentbox">
+ <div>
+ <h2 class="boxtitle"><roundcube:label name="managesieve.vacation" /></h2>
+ <roundcube:object name="vacationform" id="vacationform" class="propform boxcontent tabbed" />
+ </div>
+ <div class="footerleft formbuttons">
+ <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
+ </div>
+</div>
+
+</div>
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>