Merge branch 'master' of github.com:roundcube/roundcubemail

pull/198/head
Thomas Bruederli 11 years ago
commit bde467d8da

@ -55,11 +55,23 @@ class rcube_sieve_vacation extends rcube_sieve_engine
// find (first) vacation rule // find (first) vacation rule
foreach ($this->script as $idx => $rule) { foreach ($this->script as $idx => $rule) {
if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') { if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
foreach ($rule['actions'] as $act) {
if ($act['type'] == 'discard' || $act['type'] == 'keep') {
$action = $act['type'];
}
else if ($act['type'] == 'redirect') {
$action = $act['copy'] ? 'copy' : 'redirect';
$target = $act['target'];
}
}
$this->vacation = array_merge($rule['actions'][0], array( $this->vacation = array_merge($rule['actions'][0], array(
'idx' => $idx, 'idx' => $idx,
'disabled' => $rule['disabled'], 'disabled' => $rule['disabled'],
'name' => $rule['name'], 'name' => $rule['name'],
'tests' => $rule['tests'], 'tests' => $rule['tests'],
'action' => $action ?: 'keep',
'target' => $target,
)); ));
} }
else { else {
@ -85,6 +97,9 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$date_from = rcube_utils::get_input_value('vacation_datefrom', 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); $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); $after = rcube_utils::get_input_value('vacation_after', rcube_utils::INPUT_POST);
$action = rcube_utils::get_input_value('vacation_action', rcube_utils::INPUT_POST);
$target = rcube_utils::get_input_value('action_target', rcube_utils::INPUT_POST, true);
$target_domain = rcube_utils::get_input_value('action_domain', rcube_utils::INPUT_POST);
$interval_type = $interval_type == 'seconds' ? 'seconds' : 'days'; $interval_type = $interval_type == 'seconds' ? 'seconds' : 'days';
$vacation_action['type'] = 'vacation'; $vacation_action['type'] = 'vacation';
@ -137,6 +152,16 @@ class rcube_sieve_vacation extends rcube_sieve_engine
} }
} }
if ($action == 'redirect' || $action == 'copy') {
if ($target_domain) {
$target .= '@' . $target_domain;
}
if (empty($target) || !rcube_utils::check_email($target)) {
$error = 'noemailwarning';
}
}
if (empty($vacation_tests)) { if (empty($vacation_tests)) {
$vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true'))); $vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
} }
@ -148,9 +173,17 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$rule['type'] = 'if'; $rule['type'] = 'if';
$rule['name'] = $rule['name'] ?: $this->plugin->gettext('vacation'); $rule['name'] = $rule['name'] ?: $this->plugin->gettext('vacation');
$rule['disabled'] = $status == 'off'; $rule['disabled'] = $status == 'off';
$rule['actions'][0] = $vacation_action;
$rule['tests'] = $vacation_tests; $rule['tests'] = $vacation_tests;
$rule['join'] = count($vacation_tests) > 1; $rule['join'] = count($vacation_tests) > 1;
$rule['actions'] = array($vacation_action);
if ($action && $action != 'keep') {
$rule['actions'][] = array(
'type' => $action == 'discard' ? 'discard' : 'redirect',
'copy' => $action == 'copy',
'target' => $action != 'discard' ? $target : '',
);
}
// reset original vacation rule // reset original vacation rule
if (isset($this->vacation['idx'])) { if (isset($this->vacation['idx'])) {
@ -222,10 +255,18 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$addresses = '<textarea name="vacation_addresses" id="vacation_addresses" data-type="list" data-size="30" style="display: none">' $addresses = '<textarea name="vacation_addresses" id="vacation_addresses" data-type="list" data-size="30" style="display: none">'
. rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) . '</textarea>'; . rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) . '</textarea>';
$status = new html_select(array('name' => 'vacation_status', 'id' => 'vacation_status')); $status = new html_select(array('name' => 'vacation_status', 'id' => 'vacation_status'));
$action = new html_select(array('name' => 'vacation_action', 'id' => 'vacation_action', 'onchange' => 'vacation_action_select()'));
$status->add($this->plugin->gettext('vacation.on'), 'on'); $status->add($this->plugin->gettext('vacation.on'), 'on');
$status->add($this->plugin->gettext('vacation.off'), 'off'); $status->add($this->plugin->gettext('vacation.off'), 'off');
$action->add($this->plugin->gettext('vacation.keep'), 'keep');
$action->add($this->plugin->gettext('vacation.discard'), 'discard');
$action->add($this->plugin->gettext('vacation.redirect'), 'redirect');
if (in_array('copy', $this->exts)) {
$action->add($this->plugin->gettext('vacation.copy'), 'copy');
}
if ($this->rc->config->get('managesieve_vacation') != 2 && count($this->vacation['list'])) { if ($this->rc->config->get('managesieve_vacation') != 2 && count($this->vacation['list'])) {
$after = new html_select(array('name' => 'vacation_after', 'id' => 'vacation_after')); $after = new html_select(array('name' => 'vacation_after', 'id' => 'vacation_after'));
@ -259,6 +300,33 @@ class rcube_sieve_vacation extends rcube_sieve_engine
} }
} }
// force domain selection in redirect email input
$domains = (array) $this->rc->config->get('managesieve_domains');
$redirect = $this->vacation['action'] == 'redirect' || $this->vacation['action'] == 'copy';
if (!empty($domains)) {
sort($domains);
$domain_select = new html_select(array('name' => 'action_domain', 'id' => 'action_domain'));
$domain_select->add(array_combine($domains, $domains));
if ($redirect && $this->vacation['target']) {
$parts = explode('@', $this->vacation['target']);
if (!empty($parts)) {
$this->vacation['domain'] = array_pop($parts);
$this->vacation['target'] = implode('@', $parts);
}
}
}
// redirect target
$action_target = ' <span id="action_target_span" style="display:' . ($redirect ? 'inline' : 'none') . '">'
. '<input type="text" name="action_target" id="action_target"'
. ' value="' .($redirect ? rcube::Q($this->vacation['target'], 'strict', false) : '') . '"'
. (!empty($domains) ? ' size="20"' : ' size="35"') . '/>'
. (!empty($domains) ? ' @ ' . $domain_select->show($this->vacation['domain']) : '')
. '</span>';
// Message tab // Message tab
$table = new html_table(array('cols' => 2)); $table = new html_table(array('cols' => 2));
@ -287,11 +355,15 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$table->add(null, $addresses); $table->add(null, $addresses);
$table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval'))); $table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval')));
$table->add(null, $interval_txt); $table->add(null, $interval_txt);
if ($after) { if ($after) {
$table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after'))); $table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after')));
$table->add(null, $after->show($this->vacation['idx'] - 1)); $table->add(null, $after->show($this->vacation['idx'] - 1));
} }
$table->add('title', html::label('vacation_action', $this->plugin->gettext('vacation.action')));
$table->add('vacation', $action->show($this->vacation['action']) . $action_target);
$out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.advanced')) . $table->show($attrib)); $out .= html::tag('fieldset', $class, html::tag('legend', null, $this->plugin->gettext('vacation.advanced')) . $table->show($attrib));
$out .= '</form>'; $out .= '</form>';

@ -177,6 +177,11 @@ $labels['vacation.addresses'] = 'My additional addresses';
$labels['vacation.interval'] = 'Reply interval'; $labels['vacation.interval'] = 'Reply interval';
$labels['vacation.after'] = 'Put vacation rule after'; $labels['vacation.after'] = 'Put vacation rule after';
$labels['vacation.saving'] = 'Saving data...'; $labels['vacation.saving'] = 'Saving data...';
$labels['vacation.action'] = 'Incoming message action';
$labels['vacation.keep'] = 'Keep';
$labels['vacation.discard'] = 'Discard';
$labels['vacation.redirect'] = 'Redirect to';
$labels['vacation.copy'] = 'Send copy to';
$labels['arialabelfiltersetactions'] = 'Filter set actions'; $labels['arialabelfiltersetactions'] = 'Filter set actions';
$labels['arialabelfilteractions'] = 'Filter actions'; $labels['arialabelfilteractions'] = 'Filter actions';
$labels['arialabelfilterform'] = 'Filter properties'; $labels['arialabelfilterform'] = 'Filter properties';

@ -737,6 +737,13 @@ function action_type_select(id)
} }
}; };
function vacation_action_select()
{
var selected = $('#vacation_action').val();
$('#action_target_span')[selected == 'discard' || selected == 'keep' ? 'hide' : 'show']();
};
// Inititalizes smart list input // Inititalizes smart list input
function smart_field_init(field) function smart_field_init(field)
{ {

@ -455,3 +455,7 @@ body.iframe.mail #filter-form
border: 0; border: 0;
box-shadow: none; box-shadow: none;
} }
#vacationform td.vacation {
white-space: nowrap;
}

Loading…
Cancel
Save