Calendar: Fix restoring an event (or event occurrence) in the Kolab driver (T854626)

This commit is contained in:
Aleksander Machniak 2023-08-03 14:12:27 +02:00
parent 57ed29ef68
commit 99717b0877
3 changed files with 9 additions and 4 deletions

View file

@ -529,6 +529,11 @@ class kolab_calendar extends kolab_storage_folder_api
return false;
}
// When updating an event (e.g. when restoring an event occurrence)
// the message UID might be outdated. Use the updated UID from database.
// See kolab_driver::restore_event().
$event['_msguid'] = $old['_msguid'];
// email links are stored separately
$links = !empty($event['links']) ? $event['links'] : [];
unset($event['links']);

View file

@ -880,7 +880,7 @@ class kolab_driver extends calendar_driver
switch ($savemode) {
case 'current':
$_SESSION['calendar_restore_event_data'] = $master;
$_SESSION['calendar_restore_event_data'] = serialize(array_diff_key($master, ['_formatobj' => 1]));
// remove the matching RDATE entry
if (!empty($master['recurrence']['RDATE'])) {
@ -901,7 +901,7 @@ class kolab_driver extends calendar_driver
case 'future':
$master['_instance'] = libcalendaring::recurrence_instance_identifier($master);
if ($master['_instance'] != $event['_instance']) {
$_SESSION['calendar_restore_event_data'] = $master;
$_SESSION['calendar_restore_event_data'] = serialize(array_diff_key($master, ['_formatobj' => 1]));
// set until-date on master event
$master['recurrence']['UNTIL'] = clone $event['start'];
@ -984,7 +984,7 @@ class kolab_driver extends calendar_driver
{
if ($storage = $this->get_calendar($event['calendar'])) {
if (!empty($_SESSION['calendar_restore_event_data'])) {
$success = $storage->update_event($event = $_SESSION['calendar_restore_event_data']);
$success = $storage->update_event($event = unserialize($_SESSION['calendar_restore_event_data']));
}
else {
$success = $storage->restore_event($event);

View file

@ -533,7 +533,7 @@ class kolab_storage_cache
}
$this->check_error();
return $this->objects[$msguid];
return $this->objects[$msguid] ?? null;
}
/**