Fix VALARM parsing: ignore ACTION:NONE blocks; convert to ACTION:DISPLAY for the web client (#2415)

This commit is contained in:
Thomas Bruederli 2013-10-29 14:55:02 +01:00
parent 4cb0d62776
commit 310e25d0d1
4 changed files with 75 additions and 3 deletions

View file

@ -579,6 +579,10 @@ class kolab_calendar
if (is_array($record['categories']))
$record['categories'] = $record['categories'][0];
// The web client only supports DISPLAY type of alarms
if (!empty($record['alarms']))
$record['alarms'] = preg_replace('/:[A-Z]+$/', 'DISPLAY', $record['alarms']);
// remove empty recurrence array
if (empty($record['recurrence']))
unset($record['recurrence']);

View file

@ -549,15 +549,15 @@ class libvcalendar implements Iterator
}
// find alarms
if ($valarms = $ve->select('VALARM')) {
foreach ($ve->select('VALARM') as $valarm) {
$action = 'DISPLAY';
$trigger = null;
$valarm = reset($valarms);
foreach ($valarm->children as $prop) {
switch ($prop->name) {
case 'TRIGGER':
foreach ($prop->parameters as $param) {
console(strval($param->name), strval($param->value));
if ($param->name == 'VALUE' && $param->value == 'DATE-TIME') {
$trigger = '@' . $prop->getDateTime()->format('U');
}
@ -573,8 +573,10 @@ class libvcalendar implements Iterator
}
}
if ($trigger)
if ($trigger && strtoupper($action) != 'NONE') {
$event['alarms'] = $trigger . ':' . $action;
break;
}
}
// assign current timezone to event start/end

View file

@ -186,6 +186,22 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase
$this->assertEquals('500px-Opensource.svg.png', $event['attachments'][0]['name']);
}
/**
* @depends test_import
*/
function test_apple_alarms()
{
$ical = new libvcalendar();
$events = $ical->import_from_file(__DIR__ . '/resources/apple-alarms.ics', 'UTF-8');
$event = $events[0];
// alarms
$this->assertEquals('-45M:AUDIO', $event['alarms'], "Relative alarm string");
$alarm = libcalendaring::parse_alaram_value($event['alarms']);
$this->assertEquals('45', $alarm[0], "Alarm value");
$this->assertEquals('-M', $alarm[1], "Alarm unit");
}
/**
* @depends test_import
*/

View file

@ -0,0 +1,50 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.9//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/Zurich
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
DTSTART:19810329T020000
TZNAME:MESZ
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
DTSTART:19961027T030000
TZNAME:MEZ
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
TRANSP:OPAQUE
DTEND;TZID=Europe/Zurich:20131106T100000
UID:EF185A2A-55FA-4FF3-9B02-56B0914FC79A
DTSTAMP:20131029T123927Z
LOCATION:
DESCRIPTION:With alarm
STATUS:CONFIRMED
SEQUENCE:4
X-APPLE-TRAVEL-DURATION:PT30M
SUMMARY:Testing Bug 2415
LAST-MODIFIED:20131029T123819Z
DTSTART;TZID=Europe/Zurich:20131106T090000
CREATED:20131029T123819Z
BEGIN:VALARM
X-WR-ALARMUID:C4A26F1A-A433-4102-82D5-A3347FC126D4
UID:C4A26F1A-A433-4102-82D5-A3347FC126D4
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACTION:NONE
END:VALARM
BEGIN:VALARM
X-WR-ALARMUID:DEF5F23D-98FC-4510-BC99-F877CD9A9F8B
UID:DEF5F23D-98FC-4510-BC99-F877CD9A9F8B
TRIGGER;X-APPLE-RELATED-TRAVEL=-PT15M:-PT45M
ATTACH;VALUE=URI:Basso
ACTION:AUDIO
END:VALARM
END:VEVENT
END:VCALENDAR