diff options
Diffstat (limited to 'plugins/managesieve')
37 files changed, 1157 insertions, 221 deletions
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index 825bef6fd..29b359d7f 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -1,9 +1,21 @@ +- Added optional separate interface for out-of-office management (#1488266) +- Fix disabled "create filter" action +- Fix enotify/notify extension handling + +* 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..14123c110 100644 --- a/plugins/managesieve/config.inc.php.dist +++ b/plugins/managesieve/config.inc.php.dist @@ -68,4 +68,11 @@ $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; + +// Supported methods of notify extension. Default: 'mailto' +$config['managesieve_notify_methods'] = array('mailto'); diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php index 4a375d353..9900f16b5 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) @@ -52,8 +52,18 @@ class rcube_sieve_engine // Undocumented "x-beenthere", ); + protected $notify_methods = array( + 'mailto', + // 'sms', + // 'tel', + ); + protected $notify_importance_options = array( + 3 => 'notifyimportancelow', + 2 => 'notifyimportancenormal', + 1 => 'notifyimportancehigh' + ); - const VERSION = '7.1'; + const VERSION = '8.0'; const PROGNAME = 'Roundcube (Managesieve)'; const PORT = 4190; @@ -70,7 +80,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 +147,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]; @@ -349,14 +362,13 @@ class rcube_sieve_engine header("Content-Type: application/octet-stream"); header("Content-Length: ".strlen($script)); - if ($browser->ie) + if ($browser->ie) { header("Content-Type: application/force-download"); - if ($browser->ie && $browser->ver < 7) - $filename = rawurlencode(abbreviate_string($script_name, 55)); - else if ($browser->ie) $filename = rawurlencode($script_name); - else + } + else { $filename = addcslashes($script_name, '\\"'); + } header("Content-Disposition: attachment; filename=\"$filename.txt\""); echo $script; @@ -556,9 +568,10 @@ class rcube_sieve_engine $varnames = rcube_utils::get_input_value('_action_varname', rcube_utils::INPUT_POST); $varvalues = rcube_utils::get_input_value('_action_varvalue', rcube_utils::INPUT_POST); $varmods = rcube_utils::get_input_value('_action_varmods', rcube_utils::INPUT_POST); - $notifyaddrs = rcube_utils::get_input_value('_action_notifyaddress', rcube_utils::INPUT_POST); - $notifybodies = rcube_utils::get_input_value('_action_notifybody', rcube_utils::INPUT_POST); - $notifymessages = rcube_utils::get_input_value('_action_notifymessage', rcube_utils::INPUT_POST); + $notifymethods = rcube_utils::get_input_value('_action_notifymethod', rcube_utils::INPUT_POST); + $notifytargets = rcube_utils::get_input_value('_action_notifytarget', rcube_utils::INPUT_POST, true); + $notifyoptions = rcube_utils::get_input_value('_action_notifyoption', rcube_utils::INPUT_POST, true); + $notifymessages = rcube_utils::get_input_value('_action_notifymessage', rcube_utils::INPUT_POST, true); $notifyfrom = rcube_utils::get_input_value('_action_notifyfrom', rcube_utils::INPUT_POST); $notifyimp = rcube_utils::get_input_value('_action_notifyimportance', rcube_utils::INPUT_POST); @@ -958,19 +971,27 @@ class rcube_sieve_engine break; case 'notify': - if (empty($notifyaddrs[$idx])) { - $this->errors['actions'][$i]['address'] = $this->plugin->gettext('cannotbeempty'); + if (empty($notifymethods[$idx])) { + $this->errors['actions'][$i]['method'] = $this->plugin->gettext('cannotbeempty'); } - else if (!rcube_utils::check_email($notifyaddrs[$idx])) { - $this->errors['actions'][$i]['address'] = $this->plugin->gettext('noemailwarning'); + if (empty($notifytargets[$idx])) { + $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty'); } if (!empty($notifyfrom[$idx]) && !rcube_utils::check_email($notifyfrom[$idx])) { $this->errors['actions'][$i]['from'] = $this->plugin->gettext('noemailwarning'); } - $this->form['actions'][$i]['address'] = $notifyaddrs[$idx]; - $this->form['actions'][$i]['body'] = $notifybodies[$idx]; - $this->form['actions'][$i]['message'] = $notifymessages[$idx]; - $this->form['actions'][$i]['from'] = $notifyfrom[$idx]; + + // skip empty options + foreach ((array)$notifyoptions[$idx] as $opt_idx => $opt) { + if (!strlen(trim($opt))) { + unset($notifyoptions[$idx][$opt_idx]); + } + } + + $this->form['actions'][$i]['method'] = $notifymethods[$idx] . ':' . $notifytargets[$idx]; + $this->form['actions'][$i]['options'] = $notifyoptions[$idx]; + $this->form['actions'][$i]['message'] = $notifymessages[$idx]; + $this->form['actions'][$i]['from'] = $notifyfrom[$idx]; $this->form['actions'][$i]['importance'] = $notifyimp[$idx]; break; } @@ -980,12 +1001,14 @@ 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; - } else + } + else { $fid = $this->sieve->script->update_rule($fid, $this->form); + } if ($fid !== false) $save = $this->save_script(); @@ -1016,7 +1039,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 +1049,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 +1666,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); + } } } @@ -1743,38 +1768,61 @@ class rcube_sieve_engine $out .= '</div>'; // notify - // skip :options tag - not used by the mailto method - $out .= '<div id="action_notify' .$id.'" style="display:' .($action['type']=='notify' ? 'inline' : 'none') .'">'; - $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('notifyaddress')) . '</span><br />' - .'<input type="text" name="_action_notifyaddress['.$id.']" id="action_notifyaddress'.$id.'" ' - .'value="' . rcube::Q($action['address']) . '" size="35" ' - . $this->error_class($id, 'action', 'address', 'action_notifyaddress') .' />'; - $out .= '<br /><span class="label">'. rcube::Q($this->plugin->gettext('notifybody')) .'</span><br />' - .'<textarea name="_action_notifybody['.$id.']" id="action_notifybody' .$id. '" ' - .'rows="3" cols="35" '. $this->error_class($id, 'action', 'method', 'action_notifybody') . '>' - . rcube::Q($action['body'], 'strict', false) . "</textarea>\n"; - $out .= '<br /><span class="label">' .rcube::Q($this->plugin->gettext('notifysubject')) . '</span><br />' - .'<input type="text" name="_action_notifymessage['.$id.']" id="action_notifymessage'.$id.'" ' - .'value="' . rcube::Q($action['message']) . '" size="35" ' - . $this->error_class($id, 'action', 'message', 'action_notifymessage') .' />'; - $out .= '<br /><span class="label">' .rcube::Q($this->plugin->gettext('notifyfrom')) . '</span><br />' - .'<input type="text" name="_action_notifyfrom['.$id.']" id="action_notifyfrom'.$id.'" ' - .'value="' . rcube::Q($action['from']) . '" size="35" ' - . $this->error_class($id, 'action', 'from', 'action_notifyfrom') .' />'; - $importance_options = array( - 3 => 'notifyimportancelow', - 2 => 'notifyimportancenormal', - 1 => 'notifyimportancehigh' - ); + $notify_methods = (array) $this->rc->config->get('managesieve_notify_methods'); + $importance_options = $this->notify_importance_options; + + if (empty($notify_methods)) { + $notify_methods = $this->notify_methods; + } + + list($method, $target) = explode(':', $action['method'], 2); + $method = strtolower($method); + + if ($method && !in_array($method, $notify_methods)) { + $notify_methods[] = $method; + } + + $select_method = new html_select(array( + 'name' => "_action_notifymethod[$id]", + 'id' => "_action_notifymethod$id", + 'class' => $this->error_class($id, 'action', 'method', 'action_notifymethod'), + )); + foreach ($notify_methods as $m_n) { + $select_method->add(rcube::Q($this->rc->text_exists('managesieve.notifymethod'.$m_n) ? $this->plugin->gettext('managesieve.notifymethod'.$m_n) : $m_n), $m_n); + } + $select_importance = new html_select(array( - 'name' => '_action_notifyimportance[' . $id . ']', - 'id' => '_action_notifyimportance' . $id, - 'class' => $this->error_class($id, 'action', 'importance', 'action_notifyimportance'))); + 'name' => "_action_notifyimportance[$id]", + 'id' => "_action_notifyimportance$id", + 'class' => $this->error_class($id, 'action', 'importance', 'action_notifyimportance') + )); foreach ($importance_options as $io_v => $io_n) { $select_importance->add(rcube::Q($this->plugin->gettext($io_n)), $io_v); } + + // @TODO: nice UI for mailto: (other methods too) URI parameters + $out .= '<div id="action_notify' .$id.'" style="display:' .($action['type'] == 'notify' ? 'inline' : 'none') .'">'; + $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('notifytarget')) . '</span><br />' + . $select_method->show($method) + .'<input type="text" name="_action_notifytarget['.$id.']" id="action_notifytarget'.$id.'" ' + .'value="' . rcube::Q($target) . '" size="25" ' + . $this->error_class($id, 'action', 'target', 'action_notifytarget') .' />'; + $out .= '<br /><span class="label">'. rcube::Q($this->plugin->gettext('notifymessage')) .'</span><br />' + .'<textarea name="_action_notifymessage['.$id.']" id="action_notifymessage' .$id. '" ' + .'rows="3" cols="35" '. $this->error_class($id, 'action', 'message', 'action_notifymessage') . '>' + . rcube::Q($action['message'], 'strict', false) . "</textarea>\n"; + if (in_array('enotify', $this->exts)) { + $out .= '<br /><span class="label">' .rcube::Q($this->plugin->gettext('notifyfrom')) . '</span><br />' + .'<input type="text" name="_action_notifyfrom['.$id.']" id="action_notifyfrom'.$id.'" ' + .'value="' . rcube::Q($action['from']) . '" size="35" ' + . $this->error_class($id, 'action', 'from', 'action_notifyfrom') .' />'; + } $out .= '<br /><span class="label">' . rcube::Q($this->plugin->gettext('notifyimportance')) . '</span><br />'; - $out .= $select_importance->show($action['importance'] ? $action['importance'] : 2); + $out .= $select_importance->show($action['importance'] ? (int) $action['importance'] : 2); + $out .= '<div id="action_notifyoption_div' . $id . '">' + .'<span class="label">' . rcube::Q($this->plugin->gettext('notifyoptions')) . '</span><br />' + .$this->list_input($id, 'action_notifyoption', (array)$action['options'], true, + $this->error_class($id, 'action', 'options', 'action_notifyoption'), 30) . '</div>'; $out .= '</div>'; // mailbox select @@ -1788,7 +1836,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 +1856,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 +1882,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 +1895,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 +1903,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 +1912,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 +1928,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 +1973,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 +2265,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..bc62d2ff4 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php @@ -38,7 +38,7 @@ class rcube_sieve_script 'imap4flags', // RFC5232 'include', // draft-ietf-sieve-include-12 'index', // RFC5260 - 'notify', // draft-ietf-sieve-notify-00 + 'notify', // draft-martin-sieve-notify-01, 'regex', // draft-ietf-sieve-regex-01 'reject', // RFC5429 'relational', // RFC3431 @@ -411,38 +411,38 @@ class rcube_sieve_script array_push($exts, $notify); $action_script .= 'notify'; - // Here we support only 00 version of notify draft, there - // were a couple regressions in 00 to 04 changelog, we use - // the version used by Cyrus + $method = $action['method']; + unset($action['method']); + $action['options'] = (array) $action['options']; + + // Here we support draft-martin-sieve-notify-01 used by Cyrus if ($notify == 'notify') { switch ($action['importance']) { case 1: $action_script .= " :high"; break; - case 2: $action_script .= " :normal"; break; + //case 2: $action_script .= " :normal"; break; case 3: $action_script .= " :low"; break; + } + // Old-draft way: :method "mailto" :options "email@address" + if (!empty($method)) { + $parts = explode(':', $method, 2); + $action['method'] = $parts[0]; + array_unshift($action['options'], $parts[1]); } + unset($action['importance']); + unset($action['from']); + unset($method); } - foreach (array('from', 'importance', 'options', 'message') as $n_tag) { + foreach (array('id', 'importance', 'method', 'options', 'from', 'message') as $n_tag) { if (!empty($action[$n_tag])) { $action_script .= " :$n_tag " . self::escape_string($action[$n_tag]); } } - if (!empty($action['address'])) { - $method = 'mailto:' . $action['address']; - if (!empty($action['body'])) { - $method .= '?body=' . rawurlencode($action['body']); - } - } - else { - $method = $action['method']; - } - - // method is optional in notify extension if (!empty($method)) { - $action_script .= ($notify == 'notify' ? " :method " : " ") . self::escape_string($method); + $action_script .= ' ' . self::escape_string($method); } break; @@ -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); @@ -848,13 +849,11 @@ class rcube_sieve_script case 'notify': $action = array('type' => 'notify'); $priorities = array('high' => 1, 'normal' => 2, 'low' => 3); - $vargs = array('from', 'importance', 'options', 'message', 'method'); + $vargs = array('from', 'id', 'importance', 'options', 'message', 'method'); $args = array_keys($priorities); $action += $this->action_arguments($tokens, $args, $vargs); - // Here we support only 00 version of notify draft, there - // were a couple regressions in 00 to 04 changelog, we use - // the version used by Cyrus + // Here we'll convert draft-martin-sieve-notify-01 into RFC 5435 if (!isset($action['importance'])) { foreach ($priorities as $key => $val) { if (isset($action[$key])) { @@ -864,29 +863,19 @@ class rcube_sieve_script } } + $action['options'] = (array) $action['options']; + + // Old-draft way: :method "mailto" :options "email@address" + if (!empty($action['method']) && !empty($action['options'])) { + $action['method'] .= ':' . array_shift($action['options']); + } // unnamed parameter is a :method in enotify extension - if (!isset($action['method'])) { + else if (!isset($action['method'])) { $action['method'] = array_pop($tokens); } - $method_components = parse_url($action['method']); - if ($method_components['scheme'] == 'mailto') { - $action['address'] = $method_components['path']; - $method_params = array(); - if (array_key_exists('query', $method_components)) { - parse_str($method_components['query'], $method_params); - } - $method_params = array_change_key_case($method_params, CASE_LOWER); - // magic_quotes_gpc and magic_quotes_sybase affect the output of parse_str - if (ini_get('magic_quotes_gpc') || ini_get('magic_quotes_sybase')) { - array_map('stripslashes', $method_params); - } - $action['body'] = (array_key_exists('body', $method_params)) ? $method_params['body'] : ''; - } - $result[] = $action; break; - } if ($separator == $end) 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 .= ' ' . $interval_select->show(isset($this->vacation['seconds']) ? 'seconds' : 'days'); + } + else { + $interval_txt .= ' ' . $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..1ea7d969e 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'; @@ -110,14 +110,17 @@ $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['notifytarget'] = 'Notification target:'; +$labels['notifymessage'] = 'Notification message (optional):'; +$labels['notifyoptions'] = 'Notification options (optional):'; +$labels['notifyfrom'] = 'Notification sender (optional):'; $labels['notifyimportance'] = 'Importance:'; $labels['notifyimportancelow'] = 'low'; $labels['notifyimportancenormal'] = 'normal'; $labels['notifyimportancehigh'] = 'high'; +$labels['notifymethodmailto'] = 'Email'; +$labels['notifymethodtel'] = 'Phone'; +$labels['notifymethodsms'] = 'SMS'; $labels['filtercreate'] = 'Create filter'; $labels['usedata'] = 'Use following data in the filter:'; $labels['nextstep'] = 'Next Step'; @@ -159,6 +162,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 +211,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..27ab38a77 100644 --- a/plugins/managesieve/managesieve.js +++ b/plugins/managesieve/managesieve.js @@ -1,4 +1,19 @@ -/* (Manage)Sieve Filters */ +/** + * (Manage)Sieve Filters plugin + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2012-2014, The Roundcube Dev Team + * + * The JavaScript code in this page 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. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ if (window.rcmail) { rcmail.addEventListener('init', function(evt) { @@ -50,6 +65,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); @@ -60,22 +87,25 @@ if (window.rcmail) { if (rcmail.gui_objects.filterslist) { rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:true, keyboard:false}); - rcmail.filters_list.addEventListener('select', function(e) { p.managesieve_select(e); }); - rcmail.filters_list.addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); }); - rcmail.filters_list.addEventListener('dragend', function(e) { p.managesieve_dragend(e); }); - rcmail.filters_list.row_init = function (row) { - row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; - row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; - }; - rcmail.filters_list.init(); - rcmail.filters_list.focus(); + + rcmail.filters_list + .addEventListener('select', function(e) { p.managesieve_select(e); }) + .addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); }) + .addEventListener('dragend', function(e) { p.managesieve_dragend(e); }) + .addEventListener('initrow', function(row) { + row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; + row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; + }) + .init().focus(); } if (rcmail.gui_objects.filtersetslist) { - rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, {multiselect:false, draggable:false, keyboard:false}); - rcmail.filtersets_list.addEventListener('select', function(e) { p.managesieve_setselect(e); }); - rcmail.filtersets_list.init(); - rcmail.filtersets_list.focus(); + rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, + {multiselect:false, draggable:false, keyboard:false}); + + rcmail.filtersets_list + .addEventListener('select', function(e) { p.managesieve_setselect(e); }) + .init().focus(); if (set != null) { set = rcmail.managesieve_setid(set); @@ -226,7 +256,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 +271,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 +473,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 +544,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 +837,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 +860,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); @@ -847,8 +902,8 @@ rcube_webmail.prototype.managesieve_create = function() // show dialog window dialog.dialog({ modal: false, - resizable: !bw.ie6, - closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons + resizable: true, + closeOnEscape: !bw.ie7, // disable for performance reasons title: this.gettext('managesieve.newfilter'), close: function() { rcmail.managesieve_dialog_close(); }, buttons: buttons, diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php index 7a7faee4c..6adba4e2d 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 ($this->rc->task == 'mail' || 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/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..6489d23b4 100644 --- a/plugins/managesieve/skins/classic/templates/managesieve.html +++ b/plugins/managesieve/skins/classic/templates/managesieve.html @@ -3,19 +3,14 @@ <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> <style type="text/css"> #filterslistbox { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter-5 : 210" />px; } -#filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px; -<roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220).')+\\'px\\');') : ''" /> -} +#filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px; } #filtersetslistbox { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2-5 : 175" />px; } -#filtersscreen { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2+5 : 185" />px; -<roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2+5 : 185).')+\\'px\\');') : ''" /> -} +#filtersscreen { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter2) ? cookie:sieveviewsplitter2+5 : 185" />px; } </style> </head> 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 Binary files differnew file mode 100644 index 000000000..f8933d487 --- /dev/null +++ b/plugins/managesieve/skins/larry/images/vacation_icons.png 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> diff --git a/plugins/managesieve/tests/src/parser_notify_a b/plugins/managesieve/tests/src/parser_notify_a index f1a57540e..e51e2aa8d 100644 --- a/plugins/managesieve/tests/src/parser_notify_a +++ b/plugins/managesieve/tests/src/parser_notify_a @@ -14,5 +14,5 @@ if header :matches "Subject" "*" if header :matches "From" "*" { set "from" "${1}"; - notify :high :message "${from}: ${subject}" :method "mailto:test@example.org"; + notify :high :method "mailto" :options "test@example.org" :message "${from}: ${subject}"; } diff --git a/plugins/managesieve/tests/src/parser_notify_b b/plugins/managesieve/tests/src/parser_notify_b index ab90ed48c..f942e155f 100644 --- a/plugins/managesieve/tests/src/parser_notify_b +++ b/plugins/managesieve/tests/src/parser_notify_b @@ -13,5 +13,5 @@ if header :matches "Subject" "*" if address :matches "from" "*" { set "from_addr" "${1}"; - notify :message "${from_addr}${env_from}: ${subject}" :method "sms:1234567890"; + notify :method "sms" :options "1234567890" :message "${from_addr}${env_from}: ${subject}"; } |