From a8963948e2e7cee00d50ff05ff2d34b17ee7778a Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Fri, 31 Mar 2017 15:08:04 +0200 Subject: [PATCH] * Calendar/CalDAV: fix changes on clients creating multiple alarms on server fix changing alarm offset on Mac was additional keeping alarm with old offset also ignoring now X-LIC-ERROR from libical --- calendar/inc/class.calendar_ical.inc.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/calendar/inc/class.calendar_ical.inc.php b/calendar/inc/class.calendar_ical.inc.php index 07a8300341..1d7f6c5552 100644 --- a/calendar/inc/class.calendar_ical.inc.php +++ b/calendar/inc/class.calendar_ical.inc.php @@ -1829,6 +1829,7 @@ class calendar_ical extends calendar_boupdate foreach($event['alarm'] as &$alarm) { // check if alarm is already stored or from other users + $found = false; foreach($old_alarms as $id => $old_alarm) { // not current users alarm --> ignore @@ -1840,12 +1841,19 @@ class calendar_ical extends calendar_boupdate // alarm found --> stop if (empty($alarm['uid']) && $alarm['offset'] == $old_alarm['offset'] || $alarm['uid'] && $alarm['uid'] == $old_alarm['uid']) { + $found = true; unset($old_alarms[$id]); break; } } + if ($this->debug) error_log(__METHOD__."($event[title] (#$event[id]), ..., $user) processing ".($found?'existing':'new')." alarm ".array2string($alarm)); + if (!empty($alarm['attrs']['X-LIC-ERROR'])) + { + if ($this->debug) error_log(__METHOD__."($event[title] (#$event[id]), ..., $user) ignored X-LIC-ERROR=".array2string($alarm['X-LIC-ERROR'])); + unset($alarm['attrs']['X-LIC-ERROR']); + } // alarm not found --> add it - if ($alarm['offset'] != $old_alarm['offset'] || $old_alarm['owner'] != $user && !$alarm['all']) + if (!$found) { $alarm['owner'] = $user; if (!isset($alarm['time'])) $alarm['time'] = $event['start'] - $alarm['offset']; @@ -1855,7 +1863,7 @@ class calendar_ical extends calendar_boupdate ++$modified; } // existing alarm --> update it - elseif ($alarm['offset'] == $old_alarm['offset'] && ($old_alarm['owner'] == $user || $old_alarm['all'])) + else { if (!isset($alarm['time'])) $alarm['time'] = $event['start'] - $alarm['offset']; if ($alarm['time'] < time()) calendar_so::shift_alarm($event, $alarm);