* Calendar/CalDAV: ignore Outlook CalDAV Synchronizer setting participant status back to unknown/needs-action (other status will be updated)

This commit is contained in:
Ralf Becker 2022-02-09 14:19:38 +02:00
parent de14e34abb
commit 3ef0b5a6de
2 changed files with 4 additions and 5 deletions

View File

@ -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 no edit-rights (aka no organizer), update only attendee stuff: status and alarms
if (!$this->check_access(Acl::EDIT, $oldEvent) || 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 // we ignored Lightings If-None-Match: "*" --> do not overwrite event, just change status
!empty($workaround_lightning_if_none_match)) !empty($workaround_lightning_if_none_match))
{ {

View File

@ -1308,7 +1308,10 @@ class calendar_ical extends calendar_boupdate
// if the client does not return a status, we restore the original one // if the client does not return a status, we restore the original one
foreach ($event['participants'] as $uid => $status) 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])) if (isset($event_info['stored_event']['participants'][$uid]))
{ {