parent
7ef245edc3
commit
58ee225e6b
|
@ -818,6 +818,7 @@
|
||||||
ng-model="app.preferences.defaults.Vacation.enabled"
|
ng-model="app.preferences.defaults.Vacation.enabled"
|
||||||
ng-true-value="1"
|
ng-true-value="1"
|
||||||
ng-false-value="0"
|
ng-false-value="0"
|
||||||
|
ng-change="app.updateVacationDates()"
|
||||||
label:aria-label="Enable vacation auto reply">
|
label:aria-label="Enable vacation auto reply">
|
||||||
<var:string label:value="Enable vacation auto reply"/>
|
<var:string label:value="Enable vacation auto reply"/>
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
|
@ -894,16 +895,16 @@
|
||||||
ng-model="app.preferences.defaults.Vacation.startDateEnabled"
|
ng-model="app.preferences.defaults.Vacation.startDateEnabled"
|
||||||
ng-true-value="1"
|
ng-true-value="1"
|
||||||
ng-false-value="0"
|
ng-false-value="0"
|
||||||
ng-change="app.updateVacationDates()">
|
ng-change="app.toggleVacationStartDate()">
|
||||||
<var:string label:value="Enable auto reply on" />
|
<var:string label:value="Enable auto reply on" />
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<md-input-container>
|
<md-input-container>
|
||||||
<md-datepicker
|
<md-datepicker
|
||||||
ng-disabled="app.preferences.defaults.Vacation.startDateEnabled == 0"
|
name="vacationStartDate"
|
||||||
ng-model="app.preferences.defaults.Vacation.startDate"
|
ng-disabled="!app.preferences.defaults.Vacation.startDateEnabled"
|
||||||
ng-change="app.updateVacationDates()"
|
ng-model="app.preferences.defaults.Vacation.startDate"
|
||||||
md-min-date="app.vacationStartDateMin"
|
md-date-filter="app.validateVacationStartDate"
|
||||||
md-max-date="app.vacationEndDate"><!-- datepicker --></md-datepicker>
|
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
|
||||||
</md-input-container>
|
</md-input-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -912,15 +913,16 @@
|
||||||
ng-model="app.preferences.defaults.Vacation.endDateEnabled"
|
ng-model="app.preferences.defaults.Vacation.endDateEnabled"
|
||||||
ng-true-value="1"
|
ng-true-value="1"
|
||||||
ng-false-value="0"
|
ng-false-value="0"
|
||||||
ng-change="app.updateVacationDates()">
|
ng-change="app.toggleVacationEndDate()">
|
||||||
<var:string label:value="Disable auto reply on" />
|
<var:string label:value="Disable auto reply on" />
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<md-input-container>
|
<md-input-container>
|
||||||
<md-datepicker
|
<md-datepicker
|
||||||
ng-disabled="app.preferences.defaults.Vacation.endDateEnabled == 0"
|
name="vacationEndDate"
|
||||||
ng-model="app.preferences.defaults.Vacation.endDate"
|
ng-disabled="!app.preferences.defaults.Vacation.endDateEnabled"
|
||||||
ng-change="app.updateVacationDates()"
|
ng-model="app.preferences.defaults.Vacation.endDate"
|
||||||
md-min-date="app.vacationStartDate"><!-- datepicker --></md-datepicker>
|
md-date-filter="app.validateVacationEndDate"
|
||||||
|
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
|
||||||
</md-input-container>
|
</md-input-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sgResetOnDisabled - A directive to reset any error of a datepicker when marked
|
||||||
|
* as disabled.
|
||||||
|
* @memberof SOGo.Common
|
||||||
|
* @ngInject
|
||||||
|
* @example:
|
||||||
|
|
||||||
|
<md-datepicker
|
||||||
|
ng-model="myDate"
|
||||||
|
ng-disabled="!myDateEnabled"
|
||||||
|
sg-reset-on-disabled>
|
||||||
|
*/
|
||||||
|
function sgResetOnDisabled() {
|
||||||
|
return {
|
||||||
|
link: postLink,
|
||||||
|
require: 'mdDatepicker',
|
||||||
|
restrict: 'A'
|
||||||
|
};
|
||||||
|
|
||||||
|
function postLink(scope, element, attrs, datepickerCtrl) {
|
||||||
|
function getInput() {
|
||||||
|
return element.find('input').eq(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to wait for the datepicker directive to be compiled
|
||||||
|
var listener = scope.$watch(getInput, function (input) {
|
||||||
|
var ngModel;
|
||||||
|
|
||||||
|
if (input.length) {
|
||||||
|
listener(); // self release
|
||||||
|
datepickerCtrl.$scope.$watch('ctrl.isDisabled', function(isDisabled) {
|
||||||
|
if (isDisabled)
|
||||||
|
if (datepickerCtrl.ngModelCtrl.$invalid)
|
||||||
|
// Trigger the event that will reset the errors and the model value
|
||||||
|
datepickerCtrl.$scope.$emit('md-calendar-change', datepickerCtrl.date);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
angular
|
||||||
|
.module('SOGo.Common')
|
||||||
|
.directive('sgResetOnDisabled', sgResetOnDisabled);
|
||||||
|
})();
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
PreferencesController.$inject = ['$q', '$window', '$state', '$mdMedia', '$mdSidenav', '$mdDialog', '$mdToast', 'sgFocus', 'Dialog', 'User', 'Account', 'statePreferences', 'Authentication'];
|
PreferencesController.$inject = ['$q', '$window', '$state', '$mdMedia', '$mdSidenav', '$mdDialog', '$mdToast', 'sgFocus', 'Dialog', 'User', 'Account', 'statePreferences', 'Authentication'];
|
||||||
function PreferencesController($q, $window, $state, $mdMedia, $mdSidenav, $mdDialog, $mdToast, focus, Dialog, User, Account, statePreferences, Authentication) {
|
function PreferencesController($q, $window, $state, $mdMedia, $mdSidenav, $mdDialog, $mdToast, focus, Dialog, User, Account, statePreferences, Authentication) {
|
||||||
var vm = this, account, mailboxes = [], today = new Date(), tomorrow = today.addDays(1);
|
var vm = this, account, mailboxes = [], today = new Date(), tomorrow = today.beginOfDay().addDays(1);
|
||||||
|
|
||||||
vm.preferences = statePreferences;
|
vm.preferences = statePreferences;
|
||||||
vm.passwords = { newPassword: null, newPasswordConfirmation: null };
|
vm.passwords = { newPassword: null, newPasswordConfirmation: null };
|
||||||
|
@ -39,6 +39,11 @@
|
||||||
vm.timeZonesSearchText = '';
|
vm.timeZonesSearchText = '';
|
||||||
vm.sieveVariablesCapability = ($window.sieveCapabilities.indexOf('variables') >= 0);
|
vm.sieveVariablesCapability = ($window.sieveCapabilities.indexOf('variables') >= 0);
|
||||||
vm.updateVacationDates = updateVacationDates;
|
vm.updateVacationDates = updateVacationDates;
|
||||||
|
vm.toggleVacationStartDate = toggleVacationStartDate;
|
||||||
|
vm.toggleVacationEndDate = toggleVacationEndDate;
|
||||||
|
vm.validateVacationStartDate = validateVacationStartDate;
|
||||||
|
vm.validateVacationEndDate = validateVacationEndDate;
|
||||||
|
|
||||||
|
|
||||||
// Fetch a flatten version of the mailboxes list of the main account (0)
|
// Fetch a flatten version of the mailboxes list of the main account (0)
|
||||||
// This list will be forwarded to the Sieve filter controller
|
// This list will be forwarded to the Sieve filter controller
|
||||||
|
@ -370,32 +375,78 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateVacationDates() {
|
function updateVacationDates() {
|
||||||
if (statePreferences.defaults &&
|
var d = vm.preferences.defaults;
|
||||||
statePreferences.defaults.Vacation &&
|
|
||||||
statePreferences.defaults.Vacation.enabled) {
|
|
||||||
|
|
||||||
// Determine minimum dates
|
if (d &&
|
||||||
vm.vacationStartDateMin = undefined;
|
d.Vacation &&
|
||||||
if (statePreferences.defaults.Vacation.startDateEnabled) {
|
d.Vacation.enabled) {
|
||||||
vm.vacationStartDateMin = tomorrow;
|
toggleVacationStartDate();
|
||||||
vm.vacationStartDate = statePreferences.defaults.Vacation.startDate;
|
toggleVacationEndDate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleVacationStartDate() {
|
||||||
|
var v;
|
||||||
|
|
||||||
|
v = vm.preferences.defaults.Vacation;
|
||||||
|
|
||||||
|
if (v.startDateEnabled) {
|
||||||
|
// Enabling the start date
|
||||||
|
if (v.endDateEnabled && v.startDate.getTime() > v.endDate.getTime()) {
|
||||||
|
v.startDate = new Date(v.endDate.getTime());
|
||||||
|
v.startDate.addDays(-1);
|
||||||
}
|
}
|
||||||
else if (statePreferences.defaults.Vacation.endDateEnabled)
|
if (v.startDate.getTime() < tomorrow.getTime()) {
|
||||||
vm.vacationStartDate = tomorrow;
|
v.startDate = new Date(tomorrow.getTime());
|
||||||
else
|
}
|
||||||
vm.vacationStartDate = undefined;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Determine maximum value of start date
|
function toggleVacationEndDate() {
|
||||||
if (statePreferences.defaults.Vacation.endDateEnabled)
|
var v;
|
||||||
vm.vacationEndDate = statePreferences.defaults.Vacation.endDate;
|
|
||||||
else
|
v = vm.preferences.defaults.Vacation;
|
||||||
vm.vacationEndDate = undefined;
|
|
||||||
|
if (v.endDateEnabled) {
|
||||||
|
// Enabling the end date
|
||||||
|
if (v.startDateEnabled && v.endDate.getTime() < v.startDate.getTime()) {
|
||||||
|
v.endDate = new Date(v.startDate.getTime());
|
||||||
|
v.endDate.addDays(1);
|
||||||
|
}
|
||||||
|
else if (v.endDate.getTime() < tomorrow.getTime()) {
|
||||||
|
v.endDate = new Date(tomorrow.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
vm.vacationStartDateMin = undefined;
|
|
||||||
vm.vacationStartDate = undefined;
|
function validateVacationStartDate(date) {
|
||||||
vm.vacationEndDate = undefined;
|
var d = vm.preferences.defaults, r = true;
|
||||||
|
if (d &&
|
||||||
|
d.Vacation &&
|
||||||
|
d.Vacation.enabled) {
|
||||||
|
if (d.Vacation.startDateEnabled) {
|
||||||
|
r = (!d.Vacation.endDateEnabled ||
|
||||||
|
date.getTime() < d.Vacation.endDate.getTime()) &&
|
||||||
|
date.getTime() >= tomorrow.getTime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateVacationEndDate(date) {
|
||||||
|
var d = vm.preferences.defaults, r = true;
|
||||||
|
if (d &&
|
||||||
|
d.Vacation &&
|
||||||
|
d.Vacation.enabled) {
|
||||||
|
if (d.Vacation.endDateEnabled) {
|
||||||
|
r = (!d.Vacation.startDateEnabled ||
|
||||||
|
date.getTime() > d.Vacation.startDate.getTime()) &&
|
||||||
|
date.getTime() >= tomorrow.getTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue