diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index 390fd14a..2e1f75af 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -434,7 +434,7 @@ class kolab_calendar /** * Create instances of a recurring event */ - private function _get_recurring_events($event, $start, $end, $event_id = null) + public function _get_recurring_events($event, $start, $end, $event_id = null) { // use Horde classes to compute recurring instances require_once($this->cal->home . '/lib/Horde_Date_Recurrence.php'); diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 14b4e1de..341c2597 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -469,8 +469,10 @@ class kolab_driver extends calendar_driver public function remove_event($event, $force = true) { $success = false; + $_savemode = $event['_savemode']; if (($storage = $this->calendars[$event['calendar']]) && ($event = $storage->get_event($event['id']))) { + $event['_savemode'] = $_savemode; $savemode = 'all'; $master = $event; @@ -484,8 +486,17 @@ class kolab_driver extends calendar_driver switch ($savemode) { case 'current': - // add exception to master event - $master['recurrence']['EXDATE'][] = $event['start']; + // removing the first instance => just move to next occurence + if ($master['id'] == $event['id']) { + $recurring = reset($storage->_get_recurring_events($event, $event['start'], $event['end'] + 86400 * 370, $event['id'].'-1')); + $master['start'] = $recurring['start']; + $master['end'] = $recurring['end']; + if ($master['recurrence']['COUNT']) + $master['recurrence']['COUNT']--; + } + else { // add exception to master event + $master['recurrence']['EXDATE'][] = $event['start']; + } $success = $storage->update_event($master); break;