Merge branch '2015.11' into 2015.11-develop
authorPhilipp Schüle <p.schuele@metaways.de>
Wed, 4 Jan 2017 17:21:42 +0000 (18:21 +0100)
committerPhilipp Schüle <p.schuele@metaways.de>
Wed, 4 Jan 2017 17:21:42 +0000 (18:21 +0100)
Change-Id: I7519e497011921a0de670af3c86952a9db25981b

1  2 
tests/tine20/Calendar/JsonTests.php
tine20/Calendar/Controller/Event.php
tine20/Calendar/Setup/Update/Release9.php
tine20/Calendar/Setup/setup.xml
tine20/composer.json
tine20/composer.lock

Simple merge
Simple merge
@@@ -62,62 -62,79 +62,140 @@@ class Calendar_Setup_Update_Release9 ex
      }
  
      /**
 -     * fix displaycontainer in organizers attendee records
++<<<<<<< HEAD
 +     * update to 9.5
 +     *
 +     * add rrule_constraints
       */
      public function update_4()
      {
 -                        $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') .
 +        if (!$this->_backend->columnExists('rrule_constraints', 'cal_events')) {
 +            $seqCol = '<field>
 +                <name>rrule_constraints</name>
 +                <type>text</type>
 +                <notnull>false</notnull>
 +            </field>';
 +
 +            $declaration = new Setup_Backend_Schema_Field_Xml($seqCol);
 +            $this->_backend->addCol('cal_events', $declaration);
 +        }
 +
 +
 +        $this->setTableVersion('cal_events', '12');
 +        $this->setApplicationVersion('Calendar', '9.5');
 +    }
 +
 +    /**
 +     * update to 9.6
 +     *
 +     * add resource busy_type
 +     */
 +    public function update_5()
 +    {
 +        if (!$this->_backend->columnExists('busy_type', 'cal_resources')) {
 +            $col = '<field>
 +                <name>busy_type</name>
 +                <type>text</type>
 +                <length>32</length>
 +                <default>BUSY</default>
 +                <notnull>true</notnull>
 +            </field>';
 +
 +            $declaration = new Setup_Backend_Schema_Field_Xml($col);
 +            $this->_backend->addCol('cal_resources', $declaration);
 +        }
 +
 +        $this->setTableVersion('cal_resources', '4');
 +        $this->setApplicationVersion('Calendar', '9.6');
 +    }
 +
 +    /**
 +     * update to 9.7
 +     *
 +     * add rrule_constraints background job
 +     */
 +    public function update_6()
 +    {
 +        $scheduler = Tinebase_Core::getScheduler();
 +        Calendar_Scheduler_Task::addUpdateConstraintsExdatesTask($scheduler);
 +
 +        $this->setApplicationVersion('Calendar', '9.7');
 +    }
++
++    /**
++     * fix displaycontainer in organizers attendee records
++     */
++    public function update_7()
++    {
+         $allBroken = $this->_db->query(
+             "SELECT " . $this->_db->quoteIdentifier('events.id') . " AS " . $this->_db->quoteIdentifier('event_id') . "," .
 -                $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.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('container.owner_id') . " = ". $this->_db->quoteIdentifier('owner.id') .
++            $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('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('container.owner_id') . " = " . $this->_db->quoteIdentifier('owner.id') .
+             " INNER JOIN " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "cal_attendee") . " AS " . $this->_db->quoteIdentifier('attendee') . " ON " .
 -        foreach($allBroken as $broken) {
++            $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);
 -            if (! $broken['event_is_deleted']) {
++        foreach ($allBroken as $broken) {
+             $time = Tinebase_DateTime::now()->toString();
+             $this->_db->query("START TRANSACTION");
+             $this->_db->query(
+                 "UPDATE " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "cal_attendee") .
+                 " SET " . $this->_db->quoteIdentifier("displaycontainer_id") . " = " . $this->_db->quote($broken['container_id']) .
+                 " WHERE " . $this->_db->quoteIdentifier("id") . " = " . $this->_db->quote($broken['attendee_id'])
+             );
+             // care for consistent history for client updates
 -                              $this->_db->quoteIdentifier("last_modified_time") . " = " . $this->_db->quote($time) .
++            if (!$broken['event_is_deleted']) {
+                 $this->_db->query(
+                     "UPDATE " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "cal_events") .
+                     " SET " . $this->_db->quoteIdentifier("seq") . " = (" . $this->_db->quoteIdentifier('seq') . " +1)," .
 -                        $this->_db->quoteIdentifier("id") . "," .
 -                        $this->_db->quoteIdentifier("container_id") . "," .
 -                        $this->_db->quoteIdentifier("record_id") . "," .
 -                        $this->_db->quoteIdentifier("action") . "," .
 -                        $this->_db->quoteIdentifier("content_seq") . "," .
 -                        $this->_db->quoteIdentifier("time") .
++                    $this->_db->quoteIdentifier("last_modified_time") . " = " . $this->_db->quote($time) .
+                     " WHERE " . $this->_db->quoteIdentifier("id") . " = " . $this->_db->quote($broken['event_id'])
+                 );
+                 $this->_db->query(
+                     "UPDATE " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "container") .
+                     " SET " . $this->_db->quoteIdentifier("content_seq") . " = (" . $this->_db->quoteIdentifier('content_seq') . " +1)" .
+                     " 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)));
+                 $this->_db->query(
+                     "INSERT INTO" . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "container_content") .
+                     " (" .
 -                        $this->_db->quote(Tinebase_Record_Abstract::generateUID()) . "," .
 -                        $this->_db->quote($broken['container_id']) . "," .
 -                        $this->_db->quote($broken['event_id']) . "," .
 -                        $this->_db->quote('update') . "," .
 -                        $this->_db->quote($content_seq) . "," .
 -                        $this->_db->quote($time) .
++                    $this->_db->quoteIdentifier("id") . "," .
++                    $this->_db->quoteIdentifier("container_id") . "," .
++                    $this->_db->quoteIdentifier("record_id") . "," .
++                    $this->_db->quoteIdentifier("action") . "," .
++                    $this->_db->quoteIdentifier("content_seq") . "," .
++                    $this->_db->quoteIdentifier("time") .
+                     ") VALUES (" .
 -        $this->setApplicationVersion('Calendar', '9.5');
++                    $this->_db->quote(Tinebase_Record_Abstract::generateUID()) . "," .
++                    $this->_db->quote($broken['container_id']) . "," .
++                    $this->_db->quote($broken['event_id']) . "," .
++                    $this->_db->quote('update') . "," .
++                    $this->_db->quote($content_seq) . "," .
++                    $this->_db->quote($time) .
+                     ")"
+                 );
+             }
+             $this->_db->query("COMMIT");
+         }
++        $this->setApplicationVersion('Calendar', '9.8');
+     }
  }
@@@ -2,7 -2,7 +2,7 @@@
  <application>
      <name>Calendar</name>
      <!-- gettext('Calendar') -->   
-     <version>9.7</version>
 -    <version>9.5</version>
++    <version>9.8</version>
      <order>15</order>
      <status>enabled</status>
      <tables>
@@@ -33,9 -29,8 +33,9 @@@
          "sabre/dav": "1.8.*",
          "sabre/vobject": "3.1.3 as 2.1.313",
          "metaways/opendocument": "1.1",
-         "metaways/timezoneconvert": "0.2",
+         "metaways/timezoneconvert": "1.*",
          "zendframework/zend-http": "2.2.8-p3 as 2.2.8",
 +        "doctrine/orm": "2.5.*",
          "twig/twig": "~1.0"
      },
      "require-dev": {
Simple merge