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());