diff --git a/calendar/inc/class.calendar_groupdav.inc.php b/calendar/inc/class.calendar_groupdav.inc.php index 49d188498a..7354ba1254 100644 --- a/calendar/inc/class.calendar_groupdav.inc.php +++ b/calendar/inc/class.calendar_groupdav.inc.php @@ -954,10 +954,6 @@ class calendar_groupdav extends Api\CalDAV\Handler } // if no edit-rights (aka no organizer), update only attendee stuff: status and alarms if (!$this->check_access(Acl::EDIT, $oldEvent) || - // Work around problems with Outlook CalDAV Synchroniser (https://caldavsynchronizer.org/) - // - always sends all participants back with status NEEDS-ACTION --> resets status of all participant, if user has edit rights - // --> allow full updates only for organizer - self::get_agent() == 'caldavsynchronizer' && $oldEvent['owner'] != $user || // we ignored Lightings If-None-Match: "*" --> do not overwrite event, just change status !empty($workaround_lightning_if_none_match)) { diff --git a/calendar/inc/class.calendar_ical.inc.php b/calendar/inc/class.calendar_ical.inc.php index e0dfec10cb..cdf64b182c 100644 --- a/calendar/inc/class.calendar_ical.inc.php +++ b/calendar/inc/class.calendar_ical.inc.php @@ -1308,7 +1308,10 @@ class calendar_ical extends calendar_boupdate // if the client does not return a status, we restore the original one foreach ($event['participants'] as $uid => $status) { - if ($status[0] == 'X') + // Work around problems with Outlook CalDAV Synchronizer (https://caldavsynchronizer.org/) + // - always sends all participants back with status NEEDS-ACTION --> resets status of all participant, if user has edit rights + // --> allow only updates with other status then NEEDS-ACTION and therefore allow accepting or denying meeting requests for the user himself + if ($status[0] === 'X' || calendar_groupdav::get_agent() === 'caldavsynchronizer' && $status[0] === 'U') { if (isset($event_info['stored_event']['participants'][$uid])) {