From 874b950f73aa1a94201c882255f59c9f0d7a00cb Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 5 Mar 2015 14:31:38 +0100 Subject: [PATCH] Strip empty parameters from RRULE properties (#4797) --- plugins/libcalendaring/libcalendaring.php | 10 +++++++--- plugins/libcalendaring/libvcalendar.php | 11 +++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php index 94ff7f26..698fb689 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 826e8d84..37f62241 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());