prevent duplicate updates of exdates during MSEventFacade updates
authorPhilipp Schüle <p.schuele@metaways.de>
Thu, 7 May 2015 10:58:49 +0000 (12:58 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Thu, 21 May 2015 10:47:06 +0000 (12:47 +0200)
* this should not be necessary as the main problem is that the getMigration fn
 returns duplicates in 'toUpdate'

Change-Id: Ibcd02a9fe86f9dd14f01fadb3d6d12613ea7fbf4
Reviewed-on: http://gerrit.tine20.com/customers/1914
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Calendar/Controller/MSEventFacade.php

index 0b8e489..446a88c 100644 (file)
@@ -373,8 +373,16 @@ class Calendar_Controller_MSEventFacade implements Tinebase_Controller_Record_In
             $this->_prepareException($updatedBaseEvent, $exception);
             $this->_eventController->createRecurException($exception, !!$exception->is_deleted);
         }
-        
+
+        $updatedExceptions = array();
         foreach ($migration['toUpdate'] as $exception) {
+
+            if (in_array($exception->getId(),$updatedExceptions )) {
+                if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' '
+                    . ' Exdate ' . $exception->getId() . ' already updated');
+                continue;
+            }
+
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' '
                 . ' Update exdate ' . $exception->getId() . ' at ' . $exception->dtstart->toString());
             
@@ -389,6 +397,7 @@ class Calendar_Controller_MSEventFacade implements Tinebase_Controller_Record_In
             if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ 
                 . ' Updating exception: ' . print_r($exception->toArray(), TRUE));
             $this->_eventController->update($exception, $_checkBusyConflicts);
+            $updatedExceptions[] = $exception->getId();
         }
         
         // NOTE: we need to refetch here, otherwise eTag fail's as exception updates change baseEvents seq