Skip to content

Commit

Permalink
linagora#611 move events between calendars
Browse files Browse the repository at this point in the history
  • Loading branch information
rezk2ll committed Nov 30, 2021
1 parent 51d6635 commit d7deaa3
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ function CalEventFormController(
_.find(calendars, 'selected');
}

// when editing an event exclude delegated calendars from the possible target calendars
// that can be used to move events into
$scope.calendars = calendars.filter(calendar => calendar.isOwner(session.user._id));

return _getCalendarByUniqueId($scope.editedEvent.calendarUniqueId);
})
.then(function(selectedCalendar) {
Expand Down Expand Up @@ -368,7 +372,7 @@ function CalEventFormController(

$scope.editedEvent.attendees = getUpdatedAttendees();

if (!calEventUtils.hasAnyChange($scope.editedEvent, $scope.event)) {
if (!calEventUtils.hasAnyChange($scope.editedEvent, $scope.event) && !_calendarHasChanged()) {
_hideModal();

return;
Expand Down Expand Up @@ -402,6 +406,7 @@ function CalEventFormController(
{ graceperiod: true, notifyFullcalendar: $state.is('calendar.main') }
);
})
.then(canPerformCalendarMove)
.then(onEventCreateUpdateResponse)
.finally(function() {
$scope.restActive = false;
Expand Down Expand Up @@ -668,4 +673,21 @@ function CalEventFormController(
placement: 'center'
});
}

function canPerformCalendarMove(success) {
if (!success) return $q.when(false);

return _calendarHasChanged() ? changeCalendar() : Promise.resolve();
}

function changeCalendar() {
const destinationPath = calPathBuilder.forEventId($scope.calendarHomeId, _getCalendarByUniqueId($scope.selectedCalendar.uniqueId).id, $scope.editedEvent.uid);
const sourcePath = $scope.event.path;

return calEventService.moveEvent(sourcePath, destinationPath);
}

function _calendarHasChanged() {
return _getCalendarByUniqueId($scope.selectedCalendar.uniqueId).id !== $scope.editedEvent.calendarId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ form.event-form(role="form", name="form", aria-hidden="true", ng-class="{ 'reado
i.mdi.mdi-calendar-multiple
.fg-line
md-input-container(ng-click="changeBackdropZIndex()")
md-select(ng-disabled="!isNew(editedEvent) || !canModifyEvent", ng-model="selectedCalendar.uniqueId", md-container-class="cal-select-dropdown" aria-label="calendar")
md-option(ng-value="calendar.getUniqueId()" ng-repeat="calendar in calendars | filter: (isNew(editedEvent) || canModifyEvent) ? { readOnly: false } : {}")
md-select(ng-disabled="!canModifyEvent", ng-model="selectedCalendar.uniqueId", md-container-class="cal-select-dropdown" aria-label="calendar")
md-option(ng-value="calendar.getUniqueId()" ng-repeat="calendar in calendars | filter: { readOnly: false }")
cal-select-calendar-item(calendar="calendar")
cal-event-date-edition(event="editedEvent", disabled='!canModifyEvent', use-24hour-format='use24hourFormat', on-date-change='onDateChange')
cal-entities-autocomplete-input.cal-user-autocomplete-input(
Expand Down
19 changes: 18 additions & 1 deletion src/esn.calendar.libs/app/services/calendar-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ require('./http-response-handler.js');
changeParticipation: changeParticipation,
modifyPublicRights: modifyPublicRights,
exportCalendar,
getSecretAddress
getSecretAddress,
moveEvent
};

////////////
Expand Down Expand Up @@ -331,5 +332,21 @@ require('./http-response-handler.js');
return $q.reject(error);
});
}

/**
* Move an event from one calendar to another
*
* @param {String} eventPath the path of the event.
* @param {String} destinationCalendarId the calendar id
* @returns {Object} the http response.
*/
function moveEvent(originalEventPath, destinationEventPath) {
const headers = {
Destination: destinationEventPath,
Overwrite: 'F'
};

return calDavRequest('move', originalEventPath, headers);
}
}
})(angular);
5 changes: 5 additions & 0 deletions src/esn.calendar.libs/app/services/event-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ function calEventService(
self.getEventByUID = getEventByUID;
self.getEventFromICSUrl = getEventFromICSUrl;
self.onEventCreatedOrUpdated = onEventCreatedOrUpdated;
self.moveEvent = moveEvent;

////////////

Expand Down Expand Up @@ -575,4 +576,8 @@ function calEventService(
return new CalendarShell(ICAL.Component.fromString(response.data));
});
}

function moveEvent(source, destination) {
return calendarAPI.moveEvent(source, destination);
}
}

0 comments on commit d7deaa3

Please sign in to comment.