diff --git a/api/src/Mail/Script.php b/api/src/Mail/Script.php index 94c8c3dbc1..1c4fda45ac 100644 --- a/api/src/Mail/Script.php +++ b/api/src/Mail/Script.php @@ -77,6 +77,7 @@ class Script { $this->extensions = [ 'vacation' => $connection->hasExtension('vacation'), + 'vacation-seconds' => $connection->hasExtension('vacation-seconds'), 'regex' => $connection->hasExtension('regex'), 'enotify' => $connection->hasExtension('enotify'), 'body' => $connection->hasExtension('body'), @@ -434,7 +435,7 @@ class Script if ($this->vacation) { $vacation = $this->vacation; - if (!$vacation['days']) $vacation['days'] = $default->vacation_days ?: ''; + if ((string)$vacation['days'] === '' || $vacation['days'] < 0) $vacation['days'] = $default->vacation_days ?: 3; if (!$vacation['text']) $vacation['text'] = $default->vacation_text ?: ''; if (!$vacation['status']) $vacation['status'] = 'on'; @@ -489,7 +490,14 @@ class Script } if (!isset($vacation['modus']) || $vacation['modus'] !== 'store') { - $vac_rule .= "vacation :days " . $vacation['days']; + if ($vacation['days']) + { + $vac_rule .= "vacation :days " . $vacation['days']; + } + else + { + $vac_rule .= "vacation :seconds 1"; + } $first = 1; if (!empty($vacation['addresses'][0])) { @@ -589,7 +597,7 @@ class Script if ($this->extensions['regex'] && $regexused) $newscripthead .= ",\"regex\""; if ($rejectused) $newscripthead .= ",\"reject\""; if ($this->vacation && $vacation_active) { - $newscripthead .= ",\"vacation\""; + $newscripthead .= (string)$this->vacation['days'] === '0' ? ',"vacation-seconds"' : ',"vacation"'; } if ($this->extensions['body']) $newscripthead .= ",\"body\""; if ($this->extensions['date']) $newscripthead .= ",\"date\""; @@ -604,7 +612,7 @@ class Script $closeRequired = false; if ($this->vacation) { - $newscripthead .= "require [\"vacation\""; + $newscripthead .= (string)$this->vacation['days'] === '0' ? ',"vacation-seconds"' : ',"vacation"'; if ($this->extensions['variables']) $newscripthead .= ',"variables"'; if ($this->extensions['regex'] && $regexused) $newscripthead .= ",\"regex\""; if ($this->extensions['date']) $newscripthead .= ",\"date\""; diff --git a/mail/inc/class.mail_sieve.inc.php b/mail/inc/class.mail_sieve.inc.php index a50b9efadd..7bfdeb6cf1 100644 --- a/mail/inc/class.mail_sieve.inc.php +++ b/mail/inc/class.mail_sieve.inc.php @@ -590,7 +590,8 @@ class mail_sieve Framework::refresh_opener($msg, 'mail'); } //Set default value for days new entry - if (empty($content['days'])) + if ((string)$content['days'] === '' || $content['days'] < 0 || + !$content['days'] && !in_array('VACATION-SECONDS', $icServer->getExtensions())) { $content['days'] = '3'; } @@ -709,6 +710,14 @@ class mail_sieve ), 'addresses' => array_combine($vacRules['aliases'],$vacRules['aliases']), ); + if (in_array('VACATION-SECONDS', $icServer->getExtensions())) + { + $sel_options['days']['0'] = lang('Always respond / auto-responder'); + } + for($d=1; $d <= 31; ++$d) + { + $sel_options['days'][(string)$d] = $d === 1 ? lang('Once per day') : lang('Every %1. day', $d); + } if (!isset($account_id)) { $readonlys['acc_id'] = true; @@ -849,7 +858,7 @@ class mail_sieve $this->errorStack['text'] = lang('Please supply the message to send with auto-responses').'! '; } - if (!$_vacation['days']) + if ((string)$_vacation['days'] === '' || $_vacation['days'] < 0) { $this->errorStack['days'] = lang('Please select the number of days to wait between responses').'!'; } diff --git a/mail/lang/egw_de.lang b/mail/lang/egw_de.lang index 80ef5010ce..b9a480f59e 100644 --- a/mail/lang/egw_de.lang +++ b/mail/lang/egw_de.lang @@ -50,6 +50,7 @@ allow users to create further identities mail de Anwender dürfen weitere Identi allways a new window mail de immer in einem neuen Fenster always mail de Immer always allow external sources from %1 mail de Erlaube externe Bildquellen von %1 +always respond / auto-responder mail de Immer antworten / Auto-Responder always show html emails mail de HTML-E-Mails immer anzeigen always show notifiction mail de Benachrichtigungen immer anzeigen an error happend while trying to remove acl rights from the account %1! mail de Ein Fehler trat auf beim Versuch die Zugriffskontrollrechte vom Konto %1 zu entfernen! @@ -218,6 +219,7 @@ error: could not send message. mail de FEHLER: Die Nachricht konnte nicht versen error: message could not be displayed. mail de FEHLER: Die Nachricht kann nicht angezeigt werden. esync will fail without a working email configuration! mail de eSync steht Ihnen nicht zur Verfügung, weil kein gültiges Mailkonto eingestellt wurde! event details follow mail de Details zum Termin folgen +every %1. day mail de Jeden %1. Tag everyone mail de Alle Anwender examine namespace to retrieve folders in others and shared mail de Den Namensraum untersuchen, um Ordner in anderen und gemeinsam genutzten Ordnern abzurufen extended mail de Erweitert @@ -408,6 +410,7 @@ notify when new mails arrive in these folders mail de Benachrichtigung, sobald n on mail de am on behalf of mail de Im Namen von on vacation mail de Abwesenheit +once per day mail de Einmal pro Tag one address is not valid mail de Eine Adresse ist ungültig only email mail de Nur E-Mail only if currently in an other app mail de Nur anzeigen wenn aktuell in einer anderen Anwendung diff --git a/mail/lang/egw_en.lang b/mail/lang/egw_en.lang index 9dcac561d0..c6ccc95d15 100644 --- a/mail/lang/egw_en.lang +++ b/mail/lang/egw_en.lang @@ -50,6 +50,7 @@ allow users to create further identities mail en Allow users to create further i allways a new window mail en Allways a new window always mail en Always always allow external sources from %1 mail en Always allow external sources from %1 +always respond / auto-responder mail en Always respond / auto-responder always show html emails mail en Always show HTML emails always show notifiction mail en Always show notification an error happend while trying to remove acl rights from the account %1! mail en An error happend while trying to remove ACL rights from the account %1! @@ -218,6 +219,7 @@ error: could not send message. mail en Error: Could not send Message. error: message could not be displayed. mail en ERROR: Message could not be displayed. esync will fail without a working email configuration! mail en eSync will FAIL without a working email configuration! event details follow mail en Event Details follow +every %1. day mail en Every %1. day everyone mail en Everyone examine namespace to retrieve folders in others and shared mail en Examine namespace to retrieve folders in others and shared extended mail en Extended @@ -408,6 +410,7 @@ notify when new mails arrive in these folders mail en notify when new emails arr on mail en on on behalf of mail en On behalf of on vacation mail en On vacation +once per day mail en Once per day one address is not valid mail en One address is not valid only email mail en Only email only if currently in an other app mail en Only if currently in an other app diff --git a/mail/templates/default/sieve.vacation.xet b/mail/templates/default/sieve.vacation.xet index b580838708..46e6d05a58 100644 --- a/mail/templates/default/sieve.vacation.xet +++ b/mail/templates/default/sieve.vacation.xet @@ -50,7 +50,7 @@ - +