From d87235e20e22da1cf68d0708ffa1fd5ae204c6a3 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 31 May 2019 11:55:33 +0000 Subject: [PATCH] Calendar: Limit number of event occurrences when "checking an itip event in calendar" --- plugins/calendar/calendar.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index b1147c26..6f1cf586 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -1361,7 +1361,7 @@ class calendar extends rcube_plugin public function itip_events($msgref) { $path = explode('/', $msgref); - $msg = array_pop($path); + $msg = array_pop($path); $mbox = join('/', $path); list($uid, $mime_id) = explode('#', $msg); $events = array(); @@ -1377,23 +1377,27 @@ class calendar extends rcube_plugin } } */ - $event['id'] = $event['uid']; + $event['id'] = $event['uid']; $event['temporary'] = true; - $event['readonly'] = true; - $event['calendar'] = '--invitation--itip'; + $event['readonly'] = true; + $event['calendar'] = '--invitation--itip'; $event['className'] = 'fc-invitation-' . strtolower($partstat); - $event['_mbox'] = $mbox; - $event['_uid'] = $uid; - $event['_part'] = $mime_id; + $event['_mbox'] = $mbox; + $event['_uid'] = $uid; + $event['_part'] = $mime_id; $events[] = $this->_client_event($event, true); // add recurring instances if (!empty($event['recurrence'])) { - foreach ($this->driver->get_recurring_events($event, $event['start']) as $recurring) { + // Some installations can't handle all occurrences (aborting the request w/o an error in log) + $end = clone $event['start']; + $end->add(new DateInterval($event['recurrence']['FREQ'] == 'DAILY' ? 'P1Y' : 'P10Y')); + + foreach ($this->driver->get_recurring_events($event, $event['start'], $end) as $recurring) { $recurring['temporary'] = true; - $recurring['readonly'] = true; - $recurring['calendar'] = '--invitation--itip'; + $recurring['readonly'] = true; + $recurring['calendar'] = '--invitation--itip'; $events[] = $this->_client_event($recurring, true); } }