Branch 'roundcubemail-plugins-kolab-format2-horde5' - plugins/calendar
Thomas Brüderli
bruederli at kolabsys.com
Tue Jun 4 15:56:19 CEST 2013
plugins/calendar/drivers/kolab/kolab_driver.php | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
New commits:
commit 6cc081b164968e725c6b14f0f7b20f44a2498802
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Tue Jun 4 15:56:05 2013 +0200
Fix recurring events when last instance is turned into an exception (#1897)
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 139a181..d81383c 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -591,13 +591,28 @@ class kolab_driver extends calendar_driver
$recurring = reset($storage->_get_recurring_events($event, $event['start'], $limit, $event['id'].'-1'));
$master['start'] = $recurring['start'];
$master['end'] = $recurring['end'];
- if ($master['recurrence']['COUNT'])
- $master['recurrence']['COUNT']--;
+
+ // adjust recurrence count
+ if ($master['recurrence']['COUNT']) {
+ if (empty($master['recurrence']['EXDATE'])) {
+ $master['recurrence']['COUNT']--;
+ }
+ else { // compute remaining repetitions considering exdates
+ $limit->add(new DateInterval('P10Y'));
+ $repeats = $storage->_get_recurring_events($event, $event['start'], $limit);
+ $master['recurrence']['COUNT'] = count($repeats);
+ }
+ }
+
+ // changed last recurring instance: delete master
+ if (empty($master['start']) || (isset($master['recurrence']['COUNT']) && $master['recurrence']['COUNT'] <= 0)) {
+ $storage->delete_event($master, true);
+ }
}
else { // add exception to master event
$master['recurrence']['EXDATE'][] = $old['start'];
- }
-
+ }
+
$storage->update_event($master);
// insert new event for this occurence
More information about the commits
mailing list