2 commits - plugins/libcalendaring

Thomas Brüderli bruederli at kolabsys.com
Thu Mar 5 14:33:32 CET 2015


 plugins/libcalendaring/libcalendaring.php     |   10 +++++++---
 plugins/libcalendaring/libvcalendar.php       |   11 +++++++----
 plugins/libcalendaring/tests/libvcalendar.php |   25 +++++++++++++++++++++++--
 3 files changed, 37 insertions(+), 9 deletions(-)

New commits:
commit 7280d8e6be38f8b1286262b8e26333249eae5c12
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Mar 5 14:33:00 2015 +0100

    Add test case for #4797; fix test for recurrence-id which now correctly contains timezone information

diff --git a/plugins/libcalendaring/tests/libvcalendar.php b/plugins/libcalendaring/tests/libvcalendar.php
index f8b0d85..9180e91 100644
--- a/plugins/libcalendaring/tests/libvcalendar.php
+++ b/plugins/libcalendaring/tests/libvcalendar.php
@@ -441,11 +441,32 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase
         $this->assertEquals($num, substr_count($ics, 'UID:'.$event['uid']), "Recurrence Exceptions with same UID");
         $this->assertEquals($num, substr_count($ics, 'END:VEVENT'),         "VEVENT encapsulation END");
 
-        $this->assertContains('RECURRENCE-ID;VALUE=DATE-TIME:20130814', $ics, "Recurrence-ID (1) being the exception date");
-        $this->assertContains('RECURRENCE-ID;VALUE=DATE-TIME:20131113', $ics, "Recurrence-ID (2) being the exception date");
+        $this->assertContains('RECURRENCE-ID;VALUE=DATE-TIME;TZID=Europe/Zurich:20130814', $ics, "Recurrence-ID (1) being the exception date");
+        $this->assertContains('RECURRENCE-ID;VALUE=DATE-TIME;TZID=Europe/Zurich:20131113', $ics, "Recurrence-ID (2) being the exception date");
         $this->assertContains('SUMMARY:'.$exception2['title'], $ics, "Exception title");
     }
 
+    function test_export_valid_rrules()
+    {
+        $event = array(
+            'uid' => '1234567890',
+            'start' => new DateTime('now'),
+            'end' => new DateTime('now + 30min'),
+            'title' => 'test_export_valid_rrules',
+            'recurrence' => array(
+                'FREQ' => 'DAILY',
+                'COUNT' => 5,
+                'EXDATE' => array(),
+                'RDATE' => array(),
+            ),
+        );
+        $ical = new libvcalendar();
+        $ics = $ical->export(array($event), null, false, null, false);
+
+        $this->assertNotContains('EXDATE=', $ics);
+        $this->assertNotContains('RDATE=', $ics);
+    }
+
     /**
      *
      */


commit 874b950f73aa1a94201c882255f59c9f0d7a00cb
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Mar 5 14:31:38 2015 +0100

    Strip empty parameters from RRULE properties (#4797)

diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index 94ff7f2..698fb68 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -1520,14 +1520,18 @@ class libcalendaring extends rcube_plugin
                 break;
             case 'RDATE':
             case 'EXDATE':
-                foreach ((array)$val as $i => $ex)
-                    $val[$i] = $ex->format('Ymd\THis');
+                foreach ((array)$val as $i => $ex) {
+                    if (is_a($ex, 'DateTime'))
+                        $val[$i] = $ex->format('Ymd\THis');
+                }
                 $val = join(',', (array)$val);
                 break;
             case 'EXCEPTIONS':
                 continue 2;
             }
-            $rrule .= $k . '=' . $val . ';';
+
+            if (strlen($val))
+                $rrule .= $k . '=' . $val . ';';
         }
 
         return rtrim($rrule, ';');
diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php
index 826e8d8..37f6224 100644
--- a/plugins/libcalendaring/libvcalendar.php
+++ b/plugins/libcalendaring/libvcalendar.php
@@ -969,10 +969,13 @@ class libvcalendar implements Iterator
             $ve->add('SEQUENCE', $event['sequence']);
 
         if ($event['recurrence'] && !$recurrence_id) {
-            if ($exdates = $event['recurrence']['EXDATE']) {
+            $exdates = $rdates = null;
+            if (isset($event['recurrence']['EXDATE'])) {
+                $exdates = $event['recurrence']['EXDATE'];
                 unset($event['recurrence']['EXDATE']);  // don't serialize EXDATEs into RRULE value
             }
-            if ($rdates = $event['recurrence']['RDATE']) {
+            if (isset($event['recurrence']['RDATE'])) {
+                $rdates = $event['recurrence']['RDATE'];
                 unset($event['recurrence']['RDATE']);  // don't serialize RDATEs into RRULE value
             }
 
@@ -981,7 +984,7 @@ class libvcalendar implements Iterator
             }
 
             // add EXDATEs each one per line (for Thunderbird Lightning)
-            if ($exdates) {
+            if (is_array($exdates)) {
                 foreach ($exdates as $ex) {
                     if ($ex instanceof \DateTime) {
                         $exd = clone $event['start'];
@@ -992,7 +995,7 @@ class libvcalendar implements Iterator
                 }
             }
             // add RDATEs
-            if (!empty($rdates)) {
+            if (is_array($rdates) && !empty($rdates)) {
                 $sample = $this->datetime_prop('RDATE', $rdates[0]);
                 $rdprop = new VObject\Property\MultiDateTime('RDATE', null);
                 $rdprop->setDateTimes($rdates, $sample->getDateType());




More information about the commits mailing list