4 commits - plugins/calendar plugins/libcalendaring

Thomas Brüderli bruederli at kolabsys.com
Wed Sep 4 09:19:39 CEST 2013


 plugins/calendar/drivers/database/SQL/mysql.initial.sql  |   10 ++++----
 plugins/calendar/drivers/kolab/SQL/mysql.initial.sql     |    2 -
 plugins/libcalendaring/libvcalendar.php                  |   18 ++++-----------
 plugins/libcalendaring/tests/libvcalendar.php            |   15 ++++++++++++
 plugins/libcalendaring/tests/resources/invalid-dates.ics |   15 ++++++++++++
 5 files changed, 41 insertions(+), 19 deletions(-)

New commits:
commit d924ab06d8c1561a188dc9c4edfa171e6ac70500
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Sep 4 09:19:26 2013 +0200

    Avoid duplicated code; add tests for invalid date parsing/catching

diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php
index 5776af5..6de8feb 100644
--- a/plugins/libcalendaring/libvcalendar.php
+++ b/plugins/libcalendaring/libvcalendar.php
@@ -213,20 +213,12 @@ class libvcalendar
 
         // Catch possible exceptions when date is invalid (Bug #2144)
         // We can skip these fields, they aren't critical
-        if ($ve->CREATED) {
+        foreach (array('CREATED' => 'created', 'LAST-MODIFIED' => 'changed', 'DTSTAMP' => 'changed') as $attr => $field) {
             try {
-                $event['created'] = $ve->CREATED->getDateTime();
-            } catch (Exception $e) {};
-        }
-        if ($ve->{'LAST-MODIFIED'}) {
-            try {
-                $event['changed'] = $ve->{'LAST-MODIFIED'}->getDateTime();
-            } catch (Exception $e) {};
-        }
-        if (!$event['changed'] && $ve->DTSTAMP) {
-            try {
-                $event['changed'] = $ve->DTSTAMP->getDateTime();
-            } catch (Exception $e) {};
+                if (!$event[$field] && $ve->{$attr}) {
+                    $event[$field] = $ve->{$attr}->getDateTime();
+                }
+            } catch (Exception $e) {}
         }
 
         // map other attributes to internal fields
diff --git a/plugins/libcalendaring/tests/libvcalendar.php b/plugins/libcalendaring/tests/libvcalendar.php
index a204338..9567759 100644
--- a/plugins/libcalendaring/tests/libvcalendar.php
+++ b/plugins/libcalendaring/tests/libvcalendar.php
@@ -41,6 +41,10 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase
         $this->assertEquals(1, count($events));
         $event = $events[0];
 
+        $this->assertInstanceOf('DateTime', $event['created'], "'created' property is DateTime object");
+        $this->assertInstanceOf('DateTime', $event['changed'], "'changed' property is DateTime object");
+        $this->assertEquals('UTC', $event['created']->getTimezone()->getName(), "'created' date is in UTC");
+
         $this->assertInstanceOf('DateTime', $event['start'], "'start' property is DateTime object");
         $this->assertInstanceOf('DateTime', $event['end'], "'end' property is DateTime object");
         $this->assertEquals('08-01', $event['start']->format('m-d'), "Start date is August 1st");
@@ -70,6 +74,17 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase
         $this->assertEmpty($events);
     }
 
+    function test_invalid_dates()
+    {
+        $ical = new libvcalendar();
+        $events = $ical->import_from_file(__DIR__ . '/resources/invalid-dates.ics', 'UTF-8');
+        $event = $events[0];
+
+        $this->assertEquals(1, count($events), "Import event data");
+        $this->assertFalse(array_key_exists('created', $event), "No created date field");
+        $this->assertFalse(array_key_exists('changed', $event), "No changed date field");
+    }
+
     /**
      * Test some extended ical properties such as attendees, recurrence rules, alarms and attachments
      *
diff --git a/plugins/libcalendaring/tests/resources/invalid-dates.ics b/plugins/libcalendaring/tests/resources/invalid-dates.ics
new file mode 100644
index 0000000..e376bc5
--- /dev/null
+++ b/plugins/libcalendaring/tests/resources/invalid-dates.ics
@@ -0,0 +1,15 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 5.0.3//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:00001231T000000Z
+LAST-MODIFIED:20130755
+UID:C968B885-08FB-40E5-B89E-6DA05F26AAFF
+TRANSP:TRANSPARENT
+SUMMARY:Swiss National Day
+DTSTART;VALUE=DATE:20130801
+DTEND;VALUE=DATE:20130802
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR


commit 164fae83877ea6ab307665d9747a67298cca200b
Merge: 59c35a7 ea949c7
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Sep 4 09:03:31 2013 +0200

    Merge branch 'master' of ssh://git.kolab.org/git/roundcubemail-plugins-kolab



commit 59c35a746f81e4cf42d546a615ecba5b9e05449c
Merge: 497451e a3e3e3f
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Aug 29 12:17:06 2013 +0200

    Merge branch 'master' of ssh://git.kolab.org/git/roundcubemail-plugins-kolab



commit 497451ea24665e6e1b63817afb73d708fc52e03d
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Sun Aug 25 12:40:44 2013 +0200

    Use CREATE TABLE IF NOT EXISTS in database init scripts

diff --git a/plugins/calendar/drivers/database/SQL/mysql.initial.sql b/plugins/calendar/drivers/database/SQL/mysql.initial.sql
index 60cc076..945d429 100644
--- a/plugins/calendar/drivers/database/SQL/mysql.initial.sql
+++ b/plugins/calendar/drivers/database/SQL/mysql.initial.sql
@@ -12,7 +12,7 @@
  *
  **/
 
-CREATE TABLE `calendars` (
+CREATE TABLE IF NOT EXISTS `calendars` (
   `calendar_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
   `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
   `name` varchar(255) NOT NULL,
@@ -24,7 +24,7 @@ CREATE TABLE `calendars` (
     REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
 ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
 
-CREATE TABLE `events` (
+CREATE TABLE IF NOT EXISTS `events` (
   `event_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
   `calendar_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
   `recurrence_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
@@ -55,7 +55,7 @@ CREATE TABLE `events` (
     REFERENCES `calendars`(`calendar_id`) ON DELETE CASCADE ON UPDATE CASCADE
 ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
 
-CREATE TABLE `attachments` (
+CREATE TABLE IF NOT EXISTS `attachments` (
   `attachment_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
   `event_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
   `filename` varchar(255) NOT NULL DEFAULT '',
@@ -67,7 +67,7 @@ CREATE TABLE `attachments` (
     REFERENCES `events`(`event_id`) ON DELETE CASCADE ON UPDATE CASCADE
 ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
 
-CREATE TABLE `itipinvitations` (
+CREATE TABLE IF NOT EXISTS `itipinvitations` (
   `token` VARCHAR(64) NOT NULL,
   `event_uid` VARCHAR(255) NOT NULL,
   `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
@@ -80,4 +80,4 @@ CREATE TABLE `itipinvitations` (
     REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
 ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
 
-INSERT INTO system (name, value) VALUES ('calendar-database-version', '2013051600');
+REPLACE INTO system (name, value) VALUES ('calendar-database-version', '2013051600');
diff --git a/plugins/calendar/drivers/kolab/SQL/mysql.initial.sql b/plugins/calendar/drivers/kolab/SQL/mysql.initial.sql
index 00032ba..f10d902 100644
--- a/plugins/calendar/drivers/kolab/SQL/mysql.initial.sql
+++ b/plugins/calendar/drivers/kolab/SQL/mysql.initial.sql
@@ -29,4 +29,4 @@ CREATE TABLE IF NOT EXISTS `itipinvitations` (
     REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
 ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
 
-INSERT INTO system (name, value) VALUES ('calendar-kolab-version', '2013011000');
+REPLACE INTO system (name, value) VALUES ('calendar-kolab-version', '2013011000');




More information about the commits mailing list