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