mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-06-25 03:44:17 +00:00
Handle attendee conflicts in the Web interface
See @d7b010
This commit is contained in:
@@ -162,8 +162,7 @@
|
||||
component.setDelta(coordinates.duration * 15);
|
||||
newComponent(null, component).finally(function() {
|
||||
$timeout(function() {
|
||||
Component.$ghost.pointerHandler = null;
|
||||
Component.$ghost.component = null;
|
||||
Component.$resetGhost();
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -186,8 +185,11 @@
|
||||
// Immediately perform the adjustments
|
||||
component.$adjust(params).then(function() {
|
||||
$rootScope.$emit('calendars:list');
|
||||
}, function(response) {
|
||||
onComponentAdjustError(response, component, params);
|
||||
}).finally(function() {
|
||||
$timeout(function() {
|
||||
Component.$ghost = {};
|
||||
Component.$resetGhost();
|
||||
});
|
||||
});
|
||||
else if (component.occurrenceId) {
|
||||
@@ -199,7 +201,7 @@
|
||||
params: params
|
||||
},
|
||||
template: [
|
||||
'<md-dialog flex="50" md-flex="80" sm-flex="90">',
|
||||
'<md-dialog flex="50" sm-flex="80" xs-flex="90">',
|
||||
' <md-dialog-content class="md-dialog-content">',
|
||||
' <p>' + l('editRepeatingItem') + '</p>',
|
||||
' </md-dialog-content>',
|
||||
@@ -214,7 +216,7 @@
|
||||
$rootScope.$emit('calendars:list');
|
||||
}).finally(function() {
|
||||
$timeout(function() {
|
||||
Component.$ghost = {};
|
||||
Component.$resetGhost();
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -226,13 +228,58 @@
|
||||
RecurrentComponentDialogController.$inject = ['$scope', '$mdDialog', 'component', 'params'];
|
||||
function RecurrentComponentDialogController($scope, $mdDialog, component, params) {
|
||||
$scope.updateThisOccurrence = function() {
|
||||
component.$adjust(params).then($mdDialog.hide, $mdDialog.cancel);
|
||||
component.$adjust(params).then($mdDialog.hide, function(response) {
|
||||
$mdDialog.cancel().then(function() {
|
||||
onComponentAdjustError(response, component, params);
|
||||
});
|
||||
});
|
||||
};
|
||||
$scope.updateAllOccurrences = function() {
|
||||
delete component.occurrenceId;
|
||||
component.$adjust(params).then($mdDialog.hide, $mdDialog.cancel);
|
||||
component.$adjust(params).then($mdDialog.hide, function(response) {
|
||||
$mdDialog.cancel().then(function() {
|
||||
onComponentAdjustError(response, component, params);
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function onComponentAdjustError(response, component, params) {
|
||||
if (response.status == 403 &&
|
||||
response.data && response.data.message && angular.isObject(response.data.message)) {
|
||||
$mdDialog.show({
|
||||
parent: angular.element(document.body),
|
||||
clickOutsideToClose: false,
|
||||
escapeToClose: false,
|
||||
templateUrl: 'UIxAttendeeConflictDialog',
|
||||
controller: AttendeeConflictDialogController,
|
||||
controllerAs: '$AttendeeConflictDialogController',
|
||||
locals: {
|
||||
component: component,
|
||||
params: params,
|
||||
conflictError: response.data.message
|
||||
}
|
||||
}).then(function() {
|
||||
$rootScope.$emit('calendars:list');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
AttendeeConflictDialogController.$inject = ['$scope', '$mdDialog', 'component', 'params', 'conflictError'];
|
||||
function AttendeeConflictDialogController($scope, $mdDialog, component, params, conflictError) {
|
||||
var vm = this;
|
||||
|
||||
vm.conflictError = conflictError;
|
||||
vm.cancel = $mdDialog.cancel;
|
||||
vm.save = save;
|
||||
|
||||
function save() {
|
||||
component.$adjust(angular.extend({ ignoreConflicts: true }, params)).then($mdDialog.hide);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function filter(filterpopup) {
|
||||
|
||||
@@ -414,6 +414,15 @@
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $resetGhost
|
||||
* @desc Prepare the ghost object for the next drag by resetting appropriate attributes
|
||||
*/
|
||||
Component.$resetGhost = function() {
|
||||
this.$ghost.pointerHandler = null;
|
||||
this.$ghost.component = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $parseDate
|
||||
* @desc Parse a date string with format YYYY-MM-DDTHH:MM
|
||||
@@ -1035,8 +1044,9 @@
|
||||
* @function $save
|
||||
* @memberof Component.prototype
|
||||
* @desc Save the component to the server.
|
||||
* @param {object} extraAttributes - additional attributes to send to the server
|
||||
*/
|
||||
Component.prototype.$save = function() {
|
||||
Component.prototype.$save = function(extraAttributes) {
|
||||
var _this = this, options, path, component, date, dlp;
|
||||
|
||||
component = this.$omit();
|
||||
@@ -1106,6 +1116,8 @@
|
||||
if (this.occurrenceId)
|
||||
path.push(this.occurrenceId);
|
||||
|
||||
angular.extend(component, extraAttributes);
|
||||
|
||||
return Component.$$resource.save(path.join('/'), component, options)
|
||||
.then(function(data) {
|
||||
// Make a copy of the data for an eventual reset
|
||||
|
||||
@@ -162,6 +162,7 @@
|
||||
vm.addAttachUrl = addAttachUrl;
|
||||
vm.cancel = cancel;
|
||||
vm.save = save;
|
||||
vm.attendeeConflictError = false;
|
||||
vm.attendeesEditor = {
|
||||
days: getDays(),
|
||||
hours: getHours()
|
||||
@@ -217,15 +218,18 @@
|
||||
}
|
||||
}
|
||||
|
||||
function save(form) {
|
||||
function save(form, options) {
|
||||
if (form.$valid) {
|
||||
vm.component.$save()
|
||||
vm.component.$save(options)
|
||||
.then(function(data) {
|
||||
$rootScope.$emit('calendars:list');
|
||||
$mdDialog.hide();
|
||||
Alarm.getAlarms();
|
||||
}, function(data, status) {
|
||||
$log.debug('failed');
|
||||
}, function(response) {
|
||||
if (response.status == 403 &&
|
||||
response.data && response.data.message && angular.isObject(response.data.message)) {
|
||||
vm.attendeeConflictError = response.data.message;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user