diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index d95de4e6..e09e49a8 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -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']); diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 4d7cf5f8..7d4f180d 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -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); diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php index 7c8575e5..360688b5 100644 --- a/plugins/libkolab/lib/kolab_storage_cache.php +++ b/plugins/libkolab/lib/kolab_storage_cache.php @@ -533,7 +533,7 @@ class kolab_storage_cache } $this->check_error(); - return $this->objects[$msguid]; + return $this->objects[$msguid] ?? null; } /**