0012482: fix diverged displaycontainer of container owner
authorCornelius Weiß <c.weiss@metaways.de>
Thu, 5 Jan 2017 14:37:45 +0000 (15:37 +0100)
committerPhilipp Schüle <p.schuele@metaways.de>
Thu, 5 Jan 2017 15:23:16 +0000 (16:23 +0100)
* don't update content_seq for deleted events
* cope with content_seq IS NULL

Change-Id: Ib4d7094950748367f66f75e2b426be35a586e057
Reviewed-on: http://gerrit.tine20.com/customers/4049
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Calendar/Setup/Update/Release9.php

index a8df20e..061fd91 100644 (file)
@@ -68,21 +68,21 @@ class Calendar_Setup_Update_Release9 extends Setup_Update_Abstract
     {
         $allBroken = $this->_db->query(
             "SELECT " . $this->_db->quoteIdentifier('events.id') . " AS " . $this->_db->quoteIdentifier('event_id') . "," .
-                        $this->_db->quoteIdentifier('events.is_deleted') . " AS " . $this->_db->quoteIdentifier('event_is_deleted') . "," .
-                        $this->_db->quoteIdentifier('events.container_id') . "," .
-                        $this->_db->quoteIdentifier('events.seq') . "," .
-                        $this->_db->quoteIdentifier('attendee.id') . " AS " . $this->_db->quoteIdentifier('attendee_id') .
+            $this->_db->quoteIdentifier('events.is_deleted') . " AS " . $this->_db->quoteIdentifier('event_is_deleted') . "," .
+            $this->_db->quoteIdentifier('events.container_id') . "," .
+            $this->_db->quoteIdentifier('events.seq') . "," .
+            $this->_db->quoteIdentifier('attendee.id') . " AS " . $this->_db->quoteIdentifier('attendee_id') .
             " FROM " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "cal_events") . " AS " . $this->_db->quoteIdentifier('events') .
             " INNER JOIN " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "container") . " AS " . $this->_db->quoteIdentifier('container') . " ON " .
-                $this->_db->quoteIdentifier('events.container_id') . " = ". $this->_db->quoteIdentifier('container.id') . " AND " .
-                $this->_db->quoteIdentifier('container.type') . " = ". $this->_db->quote('personal') .
+            $this->_db->quoteIdentifier('events.container_id') . " = ". $this->_db->quoteIdentifier('container.id') . " AND " .
+            $this->_db->quoteIdentifier('container.type') . " = ". $this->_db->quote('personal') .
             " INNER JOIN " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "accounts") . " AS " . $this->_db->quoteIdentifier('owner') . " ON " .
-                $this->_db->quoteIdentifier('container.owner_id') . " = ". $this->_db->quoteIdentifier('owner.id') .
+            $this->_db->quoteIdentifier('container.owner_id') . " = ". $this->_db->quoteIdentifier('owner.id') .
             " INNER JOIN " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "cal_attendee") . " AS " . $this->_db->quoteIdentifier('attendee') . " ON " .
-                $this->_db->quoteIdentifier('attendee.cal_event_id') . " = ". $this->_db->quoteIdentifier('events.id') . " AND " .
-                $this->_db->quoteIdentifier('attendee.user_id') . " = ". $this->_db->quoteIdentifier('owner.contact_id') . " AND " .
-                $this->_db->quoteIdentifier('attendee.user_type') . " IN (". $this->_db->quote(array('user', 'groupmember')) . ") AND " .
-                $this->_db->quoteIdentifier('attendee.displaycontainer_id') . " != ". $this->_db->quoteIdentifier('events.container_id')
+            $this->_db->quoteIdentifier('attendee.cal_event_id') . " = ". $this->_db->quoteIdentifier('events.id') . " AND " .
+            $this->_db->quoteIdentifier('attendee.user_id') . " = ". $this->_db->quoteIdentifier('owner.contact_id') . " AND " .
+            $this->_db->quoteIdentifier('attendee.user_type') . " IN (". $this->_db->quote(array('user', 'groupmember')) . ") AND " .
+            $this->_db->quoteIdentifier('attendee.displaycontainer_id') . " != ". $this->_db->quoteIdentifier('events.container_id')
         )->fetchAll(Zend_Db::FETCH_ASSOC);
 
         foreach($allBroken as $broken) {
@@ -103,16 +103,17 @@ class Calendar_Setup_Update_Release9 extends Setup_Update_Abstract
                               $this->_db->quoteIdentifier("last_modified_time") . " = " . $this->_db->quote($time) .
                     " WHERE " . $this->_db->quoteIdentifier("id") . " = " . $this->_db->quote($broken['event_id'])
                 );
+                $quotedIdentifier = $this->_db->quoteIdentifier("content_seq");
                 $this->_db->query(
                     "UPDATE " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "container") .
-                    " SET " . $this->_db->quoteIdentifier("content_seq") . " = (" . $this->_db->quoteIdentifier('content_seq') . " +1)" .
+                    " SET " . $quotedIdentifier . " = " .  new Zend_Db_Expr('(CASE WHEN ' . $quotedIdentifier . ' >= 1 THEN ' . $quotedIdentifier . ' + 1 ELSE 1 END)') .
                     " WHERE " . $this->_db->quoteIdentifier("id") . " = " . $this->_db->quote($broken['container_id'])
                 );
                 $content_seq = Tinebase_Helper::array_value('content_seq', Tinebase_Helper::array_value(0, $this->_db->query(
                     "SELECT " . $this->_db->quoteIdentifier('content_seq') .
                     " FROM " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "container") .
                     " WHERE " . $this->_db->quoteIdentifier('id') . " = " . $this->_db->quote($broken['container_id'])
-                )->fetchAll(Zend_Db::FETCH_ASSOC)));
+                )->fetchAll(Zend_Db::FETCH_ASSOC))) ?: 1;
                 $this->_db->query(
                     "INSERT INTO" . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "container_content") .
                     " (" .
@@ -135,6 +136,9 @@ class Calendar_Setup_Update_Release9 extends Setup_Update_Abstract
             $this->_db->query("COMMIT");
         }
 
-        $this->setApplicationVersion('Calendar', '9.5');
+        // if called out of normal update process
+        if ($this->getApplicationVersion == '9.4') {
+            $this->setApplicationVersion('Calendar', '9.5');
+        }
     }
 }