Add support for a exceptionoriginaldate field.
authorMichael J. Rubinsky <mrubinsk@horde.org>
Sun, 4 Apr 2010 03:43:52 +0000 (23:43 -0400)
committerMichael J. Rubinsky <mrubinsk@horde.org>
Sun, 4 Apr 2010 03:43:52 +0000 (23:43 -0400)
This field tracks the start date of the instance of the recurring event that
an exception is for.  This is needed for sync clients to be able to know
if a specific recurring event instance has been deleted. Since if the exception
starts on a different date (and not just a different time), it's impossible to
match up the events representing exceptions with the list of exceptions in the
Kronolith_Event object.

Now that we have this information, we can get the list of events that represent
exceptions (i.e. event_baseid == the uid of the original recurring event) and
match them up with the list of exceptions in the $event->exceptions. Any left
over dates in $event->exceptions represent instances of the recurring event
that have been deleted.

12 files changed:
kronolith/edit.php
kronolith/lib/Driver/Sql.php
kronolith/lib/Event/Sql.php
kronolith/scripts/sql/kronolith.mssql.sql
kronolith/scripts/sql/kronolith.mysql.sql
kronolith/scripts/sql/kronolith.oci8.sql
kronolith/scripts/sql/kronolith.pgsql.sql
kronolith/scripts/sql/kronolith.sql
kronolith/scripts/sql/kronolith.xml
kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.oci8.sql [new file with mode: 0644]
kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.pgsql.sql [new file with mode: 0644]
kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.sql [new file with mode: 0644]

index ec6e192..bb4b1ab 100644 (file)
@@ -95,6 +95,7 @@ if ($exception = Horde_Util::getFormData('del_exception')) {
                 $event->readForm();
                 $event->recurrence->setRecurType(Horde_Date_Recurrence::RECUR_NONE);
                 $event->baseid = $uid;
+                $event->exceptionoriginaldate = $exception;
 
                 break;
 
index 6ad387f..9e18896 100644 (file)
@@ -330,8 +330,8 @@ class Kronolith_Driver_Sql extends Kronolith_Driver
             ' event_recurtype, event_recurenddate, event_recurinterval,' .
             ' event_recurdays, event_start, event_end, event_allday,' .
             ' event_alarm, event_alarm_methods, event_modified,' .
-            ' event_exceptions, event_creator_id, event_resources, event_baseid' .
-            ' FROM ' . $this->_params['table'] .
+            ' event_exceptions, event_creator_id, event_resources, event_baseid,' .
+            ' event_exceptionoriginaldate FROM ' . $this->_params['table'] .
             ' WHERE calendar_id = ?';
         $values = array($this->calendar);
 
@@ -445,8 +445,8 @@ class Kronolith_Driver_Sql extends Kronolith_Driver
             ' event_recurdays, event_start, event_end, event_allday,' .
             ' event_alarm, event_alarm_methods, event_modified,' .
             ' event_exceptions, event_creator_id, event_resources,' .
-            ' event_baseid FROM ' . $this->_params['table'] .
-            ' WHERE event_id = ? AND calendar_id = ?';
+            ' event_baseid, event_exceptionoriginaldate FROM ' .
+            $this->_params['table'] . ' WHERE event_id = ? AND calendar_id = ?';
         $values = array($eventId, $this->calendar);
 
         /* Log the query at a DEBUG log level. */
@@ -484,8 +484,9 @@ class Kronolith_Driver_Sql extends Kronolith_Driver
             ' event_recurtype, event_recurenddate, event_recurinterval,' .
             ' event_recurdays, event_start, event_end, event_allday,' .
             ' event_alarm, event_alarm_methods, event_modified,' .
-            ' event_exceptions, event_creator_id, event_resources' .
-            ' FROM ' . $this->_params['table'] . ' WHERE event_uid = ?';
+            ' event_exceptions, event_creator_id, event_resources, event_baseid,' .
+            ' event_exceptionoriginaldate FROM ' . $this->_params['table'] .
+            ' WHERE event_uid = ?';
         $values = array($uid);
 
         /* Optionally filter by calendar */
index c8b339b..57c8988 100644 (file)
@@ -140,6 +140,9 @@ class Kronolith_Event_Sql extends Kronolith_Event
         if (isset($SQLEvent['event_baseid'])) {
             $this->baseid = $SQLEvent['event_baseid'];
         }
+        if (isset($SQLEvent['event_exceptionoriginaldate'])) {
+            $this->exceptionoriginaldate = new Horde_Date($SQLEvent['event_exceptionoriginaldate']);
+        }
 
         $this->initialized = true;
         $this->stored = true;
@@ -215,9 +218,12 @@ class Kronolith_Event_Sql extends Kronolith_Event
             $this->_properties['event_exceptions'] = implode(',', $this->recurrence->getExceptions());
         }
 
+        /* Exception information */
         if (!empty($this->baseid)) {
             $this->_properties['event_baseid'] = $this->baseid;
+            $this->_properties['event_exceptionoriginaldate'] = $this->exceptionoriginaldate;
         }
+
     }
 
     public function getProperties()
index 06b59bd..5b77ea0 100644 (file)
@@ -24,6 +24,7 @@ CREATE TABLE kronolith_events (
     event_modified INT NOT NULL,
     event_private INT DEFAULT 0 NOT NULL,
     event_baseid VARCHAR(255) DEFAULT '',
+    event_exceptionoriginaldate DATETIME,
 
     PRIMARY KEY (event_id)
 );
index 70ca897..5c38587 100644 (file)
@@ -24,6 +24,7 @@ CREATE TABLE kronolith_events (
     event_modified INT NOT NULL,
     event_private TINYINT DEFAULT 0 NOT NULL,
     event_baseid VARCHAR(255) DEFAULT '',
+    event_exceptionoriginaldate DATETIME,
 
     PRIMARY KEY (event_id)
 );
index c904ba9..5848094 100644 (file)
@@ -24,6 +24,7 @@ CREATE TABLE kronolith_events (
     event_modified NUMBER(16) NOT NULL,
     event_private NUMBER(1) DEFAULT 0 NOT NULL,
     event_baseid VARCHAR2(255) DEFAULT '',
+    event_exceptionoriginaldate DATE,
 
 --
     PRIMARY KEY (event_id)
index 2daa72a..c9edefb 100644 (file)
@@ -24,6 +24,7 @@ CREATE TABLE kronolith_events (
     event_modified INT NOT NULL,
     event_private INT DEFAULT 0 NOT NULL,
     event_baseid VARCHAR(255) DEFAULT '',
+    event_exceptionoriginaldate TIMESTAMP,
 
     PRIMARY KEY (event_id)
 );
index d76c10f..15f6345 100644 (file)
@@ -24,6 +24,7 @@ CREATE TABLE kronolith_events (
     event_modified INT NOT NULL,
     event_private INT DEFAULT 0 NOT NULL,
     event_baseid VARCHAR(255) DEFAULT '',
+    event_exceptionoriginaldate DATETIME,
 
     PRIMARY KEY (event_id)
 );
index f402a9f..1680f58 100644 (file)
     <length>255</length>
    </field>
 
+   <field>
+    <name>event_exceptionoriginaldate</name>
+    <type>timestamp</type>
+    <default></default>
+   </field>
+
    <index>
     <name>kronolith_primary</name>
     <primary>true</primary>
diff --git a/kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.oci8.sql b/kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.oci8.sql
new file mode 100644 (file)
index 0000000..9f22344
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE kronolith_events ADD event_exceptionoriginaldate DATE;
diff --git a/kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.pgsql.sql b/kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.pgsql.sql
new file mode 100644 (file)
index 0000000..99a27b2
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE kronolith_events ADD event_exceptionoriginaldate TIMESTAMP;
diff --git a/kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.sql b/kronolith/scripts/upgrades/2010-04-03_add_exceptionoriginaldate.sql
new file mode 100644 (file)
index 0000000..e0658b0
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE kronolith_events ADD event_exceptionoriginaldate DATETIME;