mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-08-28 17:57:38 +00:00
feat(mail): enable autoreply on specific days or at a specific time
Fixes #5328
This commit is contained in:
@@ -44,11 +44,18 @@
|
||||
"Add default email addresses" = "Add default email addresses";
|
||||
"Days between responses" = "Days between responses";
|
||||
"Do not send responses to mailing lists" = "Do not send responses to mailing lists";
|
||||
"Activation Constraints" = "Activation Constraints";
|
||||
"Enable auto reply on" = "Enable auto reply on";
|
||||
"First day of vacation" = "First day of vacation";
|
||||
"Disable auto reply on" = "Disable auto reply on";
|
||||
"Last day of vacation" = "Last day of vacation";
|
||||
"Enter date" = "Enter date";
|
||||
/* Enable auto reply at this time of the day */
|
||||
"Enable auto reply at" = "Enable auto reply at";
|
||||
"Enter time" = "Enter time";
|
||||
/* Disable auto reply at this time of the day */
|
||||
"Disable auto reply at" = "Disable auto reply at";
|
||||
"Enable auto reply on these days" = "Enable auto reply on these days";
|
||||
"Always send vacation message response" = "Always send vacation message response";
|
||||
"The vacation message is sent prior to apply your filters." = "The vacation message is sent prior to apply your filters.";
|
||||
"Discard incoming mails during vacation" = "Discard incoming mails during vacation";
|
||||
|
||||
@@ -506,6 +506,15 @@ static NSArray *reminderValues = nil;
|
||||
return iCalWeekDayString[i];
|
||||
}
|
||||
|
||||
- (int) numberForWeekDay
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
i = [[self shortWeekDaysList] indexOfObject: item];
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
//
|
||||
// Used by wox template
|
||||
//
|
||||
|
||||
@@ -636,6 +636,16 @@
|
||||
</md-checkbox>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.SOGoMailMarkAsReadDelay"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
label:aria-label="Automatically mark messages as read">
|
||||
<var:string label:value="Automatically mark messages as read"/>
|
||||
</md-checkbox>
|
||||
</div>
|
||||
|
||||
<div class="hide-xs" layout="row" layout-align="start center" flex="50">
|
||||
<md-checkbox
|
||||
class="md-align-top-left"
|
||||
@@ -1031,17 +1041,17 @@
|
||||
</div>
|
||||
|
||||
<div layout="row">
|
||||
<md-input-container class="md-block" flex="50" flex-xs="100">
|
||||
<label><var:string label:value="Days between responses"/></label>
|
||||
<md-select label:aria-label="Days between responses"
|
||||
ng-model="app.preferences.defaults.Vacation.daysBetweenResponse">
|
||||
<var:foreach list="daysBetweenResponsesList" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="item"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block" flex="50" flex-xs="100">
|
||||
<label><var:string label:value="Days between responses"/></label>
|
||||
<md-select label:aria-label="Days between responses"
|
||||
ng-model="app.preferences.defaults.Vacation.daysBetweenResponse">
|
||||
<var:foreach list="daysBetweenResponsesList" item="item">
|
||||
<md-option var:value="item">
|
||||
<var:string value="item"/>
|
||||
</md-option>
|
||||
</var:foreach>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -1053,50 +1063,6 @@
|
||||
</md-checkbox>
|
||||
</div>
|
||||
|
||||
<var:if condition="isVacationPeriodEnabled">
|
||||
<div>
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.startDateEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
ng-change="app.toggleVacationStartDate()">
|
||||
<var:string label:value="Enable auto reply on" />
|
||||
</md-checkbox>
|
||||
<md-input-container>
|
||||
<label class="md-no-truncate"><var:string label:value="First day of vacation"/></label>
|
||||
<md-datepicker
|
||||
name="vacationStartDate"
|
||||
label:md-placeholder="Enter date"
|
||||
ng-disabled="!app.preferences.defaults.Vacation.startDateEnabled"
|
||||
ng-required="app.preferences.defaults.Vacation.startDateEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.startDate"
|
||||
md-date-filter="app.validateVacationStartDate"
|
||||
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
|
||||
</md-input-container>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.endDateEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
ng-change="app.toggleVacationEndDate()">
|
||||
<var:string label:value="Disable auto reply on" />
|
||||
</md-checkbox>
|
||||
<md-input-container>
|
||||
<label class="md-no-truncate"><var:string label:value="Last day of vacation"/></label>
|
||||
<md-datepicker
|
||||
name="vacationEndDate"
|
||||
label:md-placeholder="Enter date"
|
||||
ng-disabled="!app.preferences.defaults.Vacation.endDateEnabled"
|
||||
ng-required="app.preferences.defaults.Vacation.endDateEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.endDate"
|
||||
md-date-filter="app.validateVacationEndDate"
|
||||
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</var:if>
|
||||
|
||||
<div>
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.alwaysSend"
|
||||
@@ -1117,6 +1083,113 @@
|
||||
</md-checkbox>
|
||||
</div>
|
||||
|
||||
<var:if condition="isVacationPeriodEnabled">
|
||||
<h4 class="md-title"><var:string label:value="Activation Constraints"/></h4>
|
||||
|
||||
<div layout="row" layout-wrap="layout-wrap">
|
||||
<div class="md-block" flex="50" flex-xs="100">
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.startDateEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
ng-change="app.toggleVacationStartDate()">
|
||||
<var:string label:value="Enable auto reply on" />
|
||||
</md-checkbox>
|
||||
<md-input-container>
|
||||
<label class="md-no-truncate"><var:string label:value="First day of vacation"/></label>
|
||||
<md-datepicker
|
||||
name="vacationStartDate"
|
||||
label:md-placeholder="Enter date"
|
||||
ng-disabled="!app.preferences.defaults.Vacation.startDateEnabled"
|
||||
ng-required="app.preferences.defaults.Vacation.startDateEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.startDate"
|
||||
md-date-filter="app.validateVacationStartDate"
|
||||
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
|
||||
</md-input-container>
|
||||
</div>
|
||||
|
||||
<div class="md-block" flex="50" flex-xs="100">
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.endDateEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
ng-change="app.toggleVacationEndDate()">
|
||||
<var:string label:value="Disable auto reply on" />
|
||||
</md-checkbox>
|
||||
<md-input-container>
|
||||
<label class="md-no-truncate"><var:string label:value="Last day of vacation"/></label>
|
||||
<md-datepicker
|
||||
name="vacationEndDate"
|
||||
label:md-placeholder="Enter date"
|
||||
ng-disabled="!app.preferences.defaults.Vacation.endDateEnabled"
|
||||
ng-required="app.preferences.defaults.Vacation.endDateEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.endDate"
|
||||
md-date-filter="app.validateVacationEndDate"
|
||||
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div layout="row" layout-wrap="layout-wrap">
|
||||
<div class="md-block" flex="50" flex-xs="100">
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.startTimeEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
ng-change="app.toggleVacationStartTime()">
|
||||
<var:string label:value="Enable auto reply at" />
|
||||
</md-checkbox>
|
||||
<md-input-container>
|
||||
<sg-timepicker
|
||||
name="vacationStartTime"
|
||||
label:md-placeholder="Enter time"
|
||||
ng-disabled="!app.preferences.defaults.Vacation.startTimeEnabled"
|
||||
ng-required="app.preferences.defaults.Vacation.startTimeEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.startTime"><!-- timepicker --></sg-timepicker>
|
||||
</md-input-container>
|
||||
</div>
|
||||
|
||||
<div class="md-block" flex="50" flex-xs="100">
|
||||
<md-checkbox
|
||||
ng-disabled="!app.preferences.defaults.Vacation.startTimeEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.endTimeEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
ng-change="app.toggleVacationEndTime()">
|
||||
<var:string label:value="Disable auto reply at" />
|
||||
</md-checkbox>
|
||||
<md-input-container>
|
||||
<sg-timepicker
|
||||
name="vacationEndTime"
|
||||
label:md-placeholder="Enter time"
|
||||
ng-disabled="!app.preferences.defaults.Vacation.endTimeEnabled"
|
||||
ng-required="app.preferences.defaults.Vacation.endTimeEnabled"
|
||||
ng-model="app.preferences.defaults.Vacation.endTime"><!-- timepicker --></sg-timepicker>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sg-padded--bottom" layout="row" layout-align="start end">
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.Vacation.weekdaysEnabled"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0">
|
||||
</md-checkbox>
|
||||
<div class="pseudo-input-container layout-padding" flex="50" flex-sm="80" flex-xs="100">
|
||||
<label class="pseudo-input-label"><var:string label:value="Enable auto reply on these days"/></label>
|
||||
<md-grid-list md-cols="7" md-row-height="2em" md-gutter="0.5em"
|
||||
ng-model="app.preferences.defaults.Vacation.days"
|
||||
ng-disabled="app.preferences.defaults.Vacation.weekdaysEnabled"
|
||||
sg-toggle-grid="sg-toggle-grid">
|
||||
<var:foreach list="shortWeekDaysList" item="item">
|
||||
<md-grid-tile var:value="numberForWeekDay"><var:string value="item"/></md-grid-tile>
|
||||
</var:foreach>
|
||||
</md-grid-list>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</var:if>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</md-tab>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* @constructor
|
||||
*/
|
||||
function Preferences() {
|
||||
var _this = this, defaultsElement, settingsElement, data;
|
||||
var _this = this, defaultsElement, settingsElement, data, time;
|
||||
|
||||
this.nextAlarm = null;
|
||||
this.nextInboxPoll = null;
|
||||
@@ -90,6 +90,28 @@
|
||||
data.Vacation.endDate = new Date(data.Vacation.startDate.getTime());
|
||||
data.Vacation.endDate.addDays(1);
|
||||
}
|
||||
if (data.Vacation.startTime) {
|
||||
time = data.Vacation.startTime.split(':');
|
||||
data.Vacation.startTime = new Date();
|
||||
data.Vacation.startTime.setHours(parseInt(time[0]), parseInt(time[1]));
|
||||
}
|
||||
else {
|
||||
data.Vacation.startTimeEnabled = 0;
|
||||
data.Vacation.startTime = new Date();
|
||||
data.Vacation.startTime.setHours(parseInt(data.SOGoDayEndTime));
|
||||
data.Vacation.startTime.setMinutes(0);
|
||||
}
|
||||
if (data.Vacation.endTime) {
|
||||
time = data.Vacation.endTime.split(':');
|
||||
data.Vacation.endTime = new Date();
|
||||
data.Vacation.endTime.setHours(parseInt(time[0]), parseInt(time[1]));
|
||||
}
|
||||
else {
|
||||
data.Vacation.endTimeEnabled = 0;
|
||||
data.Vacation.endTime = new Date();
|
||||
data.Vacation.endTime.setHours(parseInt(data.SOGoDayStartTime));
|
||||
data.Vacation.endTime.setMinutes(0);
|
||||
}
|
||||
if (data.Vacation.autoReplyEmailAddresses &&
|
||||
angular.isString(data.Vacation.autoReplyEmailAddresses) &&
|
||||
data.Vacation.autoReplyEmailAddresses.length)
|
||||
@@ -97,6 +119,9 @@
|
||||
} else
|
||||
data.Vacation = {};
|
||||
|
||||
if (angular.isUndefined(data.Vacation.days))
|
||||
data.Vacation.days = [];
|
||||
|
||||
if ((angular.isUndefined(data.Vacation.autoReplyEmailAddresses) ||
|
||||
data.Vacation.autoReplyEmailAddresses.length == 0) &&
|
||||
angular.isDefined(window.defaultEmailAddresses))
|
||||
@@ -413,7 +438,19 @@
|
||||
if (this.inboxSyncToken)
|
||||
params.syncToken = this.inboxSyncToken;
|
||||
|
||||
Preferences.$$resource.post('Mail', '0/folderINBOX/changes', params).then(function(data) {
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
toastController.$inject = ['scope', '$mdToast', 'title', 'body'];
|
||||
function toastController (scope, $mdToast, title, body) {
|
||||
scope.title = title;
|
||||
scope.body = body;
|
||||
scope.close = function() {
|
||||
$mdToast.hide('ok');
|
||||
};
|
||||
}
|
||||
|
||||
return Preferences.$$resource.post('Mail', '0/folderINBOX/changes', params).then(function(data) {
|
||||
if (data.syncToken) {
|
||||
_this.inboxSyncToken = data.syncToken;
|
||||
Preferences.$log.debug("New syncToken is " + _this.inboxSyncToken);
|
||||
@@ -489,18 +526,6 @@
|
||||
if (refreshViewCheck && refreshViewCheck != 'manually')
|
||||
_this.nextInboxPoll = Preferences.$timeout(angular.bind(_this, _this.pollInbox), refreshViewCheck.timeInterval()*1000);
|
||||
});
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
toastController.$inject = ['scope', '$mdToast', 'title', 'body'];
|
||||
function toastController (scope, $mdToast, title, body) {
|
||||
scope.title = title;
|
||||
scope.body = body;
|
||||
scope.close = function() {
|
||||
$mdToast.hide('ok');
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -734,8 +759,9 @@
|
||||
delete preferences.defaults.SOGoMailComposeFontSizeEnabled;
|
||||
|
||||
if (preferences.defaults.Vacation) {
|
||||
if (preferences.defaults.Vacation.startDateEnabled)
|
||||
if (preferences.defaults.Vacation.startDateEnabled) {
|
||||
preferences.defaults.Vacation.startDate = preferences.defaults.Vacation.startDate.getTime()/1000;
|
||||
}
|
||||
else {
|
||||
delete preferences.defaults.Vacation.startDateEnabled;
|
||||
preferences.defaults.Vacation.startDate = 0;
|
||||
@@ -747,6 +773,23 @@
|
||||
preferences.defaults.Vacation.endDate = 0;
|
||||
}
|
||||
|
||||
if (preferences.defaults.Vacation.startTimeEnabled) {
|
||||
preferences.defaults.Vacation.startTime = preferences.defaults.Vacation.startTime.format(this.$mdDateLocaleProvider, '%H:%M');
|
||||
// Set an end time only if a start time is defined
|
||||
if (preferences.defaults.Vacation.endTimeEnabled)
|
||||
preferences.defaults.Vacation.endTime = preferences.defaults.Vacation.endTime.format(this.$mdDateLocaleProvider, '%H:%M');
|
||||
else {
|
||||
delete preferences.defaults.Vacation.endTimeEnabled;
|
||||
preferences.defaults.Vacation.endTime = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
delete preferences.defaults.Vacation.startTimeEnabled;
|
||||
preferences.defaults.Vacation.startTime = 0;
|
||||
delete preferences.defaults.Vacation.endTimeEnabled;
|
||||
preferences.defaults.Vacation.endTime = 0;
|
||||
}
|
||||
|
||||
if (preferences.defaults.Vacation.autoReplyEmailAddresses)
|
||||
preferences.defaults.Vacation.autoReplyEmailAddresses = _.compact(preferences.defaults.Vacation.autoReplyEmailAddresses);
|
||||
else
|
||||
|
||||
@@ -587,6 +587,32 @@
|
||||
|
||||
return r;
|
||||
};
|
||||
|
||||
this.toggleVacationStartTime = function() {
|
||||
var v;
|
||||
|
||||
v = this.preferences.defaults.Vacation;
|
||||
|
||||
if (v.startTimeEnabled) {
|
||||
// Enabling the start date
|
||||
if (!v.startTime) {
|
||||
v.startTime = new Date();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.toggleVacationEndTime = function() {
|
||||
var v;
|
||||
|
||||
v = this.preferences.defaults.Vacation;
|
||||
|
||||
if (v.endTimeEnabled) {
|
||||
// Enabling the end date
|
||||
if (!v.endTime) {
|
||||
v.endTime = new Date();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
angular
|
||||
|
||||
Reference in New Issue
Block a user