Ignore _datetime flags when 'allday' property is present; avoid saving them in cache (#2310)

This commit is contained in:
Thomas Bruederli 2013-10-03 10:54:05 +02:00
parent a361a30dcc
commit 3c56dcc275
2 changed files with 7 additions and 3 deletions

View file

@ -663,6 +663,9 @@ class kolab_driver extends calendar_driver
$event['end'] = $master['end']; $event['end'] = $master['end'];
} }
// unset _dateonly flags in (cached) date objects
unset($event['start']->_dateonly, $event['end']->_dateonly);
$success = $storage->update_event($event); $success = $storage->update_event($event);
break; break;
} }

View file

@ -577,8 +577,9 @@ class libvcalendar
public static function datetime_prop($name, $dt, $utc = false, $dateonly = null) public static function datetime_prop($name, $dt, $utc = false, $dateonly = null)
{ {
$is_utc = $utc || (($tz = $dt->getTimezone()) && in_array($tz->getName(), array('UTC','GMT','Z'))); $is_utc = $utc || (($tz = $dt->getTimezone()) && in_array($tz->getName(), array('UTC','GMT','Z')));
$is_dateonly = $dateonly === null ? (bool)$dt->_dateonly : (bool)$dateonly;
$vdt = new VObject\Property\DateTime($name); $vdt = new VObject\Property\DateTime($name);
$vdt->setDateTime($dt, $dt->_dateonly || $dateonly ? VObject\Property\DateTime::DATE : $vdt->setDateTime($dt, $is_dateonly ? VObject\Property\DateTime::DATE :
($is_utc ? VObject\Property\DateTime::UTC : VObject\Property\DateTime::LOCALTZ)); ($is_utc ? VObject\Property\DateTime::UTC : VObject\Property\DateTime::LOCALTZ));
return $vdt; return $vdt;
} }
@ -682,9 +683,9 @@ class libvcalendar
if (!empty($event['changed'])) if (!empty($event['changed']))
$ve->add(self::datetime_prop('LAST-MODIFIED', $event['changed'], true)); $ve->add(self::datetime_prop('LAST-MODIFIED', $event['changed'], true));
if (!empty($event['start'])) if (!empty($event['start']))
$ve->add(self::datetime_prop('DTSTART', $event['start'], false, $event['allday'])); $ve->add(self::datetime_prop('DTSTART', $event['start'], false, (bool)$event['allday']));
if (!empty($event['end'])) if (!empty($event['end']))
$ve->add(self::datetime_prop('DTEND', $event['end'], false, $event['allday'])); $ve->add(self::datetime_prop('DTEND', $event['end'], false, (bool)$event['allday']));
if (!empty($event['due'])) if (!empty($event['due']))
$ve->add(self::datetime_prop('DUE', $event['due'], false)); $ve->add(self::datetime_prop('DUE', $event['due'], false));