Strip empty parameters from RRULE properties (#4797)

This commit is contained in:
Thomas Bruederli 2015-03-05 14:31:38 +01:00
parent bf64805882
commit 874b950f73
2 changed files with 14 additions and 7 deletions

View file

@ -1520,14 +1520,18 @@ class libcalendaring extends rcube_plugin
break; break;
case 'RDATE': case 'RDATE':
case 'EXDATE': case 'EXDATE':
foreach ((array)$val as $i => $ex) foreach ((array)$val as $i => $ex) {
$val[$i] = $ex->format('Ymd\THis'); if (is_a($ex, 'DateTime'))
$val[$i] = $ex->format('Ymd\THis');
}
$val = join(',', (array)$val); $val = join(',', (array)$val);
break; break;
case 'EXCEPTIONS': case 'EXCEPTIONS':
continue 2; continue 2;
} }
$rrule .= $k . '=' . $val . ';';
if (strlen($val))
$rrule .= $k . '=' . $val . ';';
} }
return rtrim($rrule, ';'); return rtrim($rrule, ';');

View file

@ -969,10 +969,13 @@ class libvcalendar implements Iterator
$ve->add('SEQUENCE', $event['sequence']); $ve->add('SEQUENCE', $event['sequence']);
if ($event['recurrence'] && !$recurrence_id) { 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 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 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) // add EXDATEs each one per line (for Thunderbird Lightning)
if ($exdates) { if (is_array($exdates)) {
foreach ($exdates as $ex) { foreach ($exdates as $ex) {
if ($ex instanceof \DateTime) { if ($ex instanceof \DateTime) {
$exd = clone $event['start']; $exd = clone $event['start'];
@ -992,7 +995,7 @@ class libvcalendar implements Iterator
} }
} }
// add RDATEs // add RDATEs
if (!empty($rdates)) { if (is_array($rdates) && !empty($rdates)) {
$sample = $this->datetime_prop('RDATE', $rdates[0]); $sample = $this->datetime_prop('RDATE', $rdates[0]);
$rdprop = new VObject\Property\MultiDateTime('RDATE', null); $rdprop = new VObject\Property\MultiDateTime('RDATE', null);
$rdprop->setDateTimes($rdates, $sample->getDateType()); $rdprop->setDateTimes($rdates, $sample->getDateType());