plugins/calendar plugins/libcalendaring
Thomas Brüderli
bruederli at kolabsys.com
Tue Oct 29 14:59:09 CET 2013
plugins/calendar/drivers/kolab/kolab_calendar.php | 4 +
plugins/libcalendaring/libvcalendar.php | 8 +-
plugins/libcalendaring/tests/libvcalendar.php | 16 +++++
plugins/libcalendaring/tests/resources/apple-alarms.ics | 50 ++++++++++++++++
4 files changed, 75 insertions(+), 3 deletions(-)
New commits:
commit 310e25d0d10fc503f82a32fffcd41d5f870a3d28
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Tue Oct 29 14:55:02 2013 +0100
Fix VALARM parsing: ignore ACTION:NONE blocks; convert to ACTION:DISPLAY for the web client (#2415)
diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php
index 7caf0d0..bd42f56 100644
--- a/plugins/calendar/drivers/kolab/kolab_calendar.php
+++ b/plugins/calendar/drivers/kolab/kolab_calendar.php
@@ -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']);
diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php
index 49f197e..f4a32db 100644
--- a/plugins/libcalendaring/libvcalendar.php
+++ b/plugins/libcalendaring/libvcalendar.php
@@ -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
diff --git a/plugins/libcalendaring/tests/libvcalendar.php b/plugins/libcalendaring/tests/libvcalendar.php
index a40ee00..0726c98 100644
--- a/plugins/libcalendaring/tests/libvcalendar.php
+++ b/plugins/libcalendaring/tests/libvcalendar.php
@@ -189,6 +189,22 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase
/**
* @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
+ */
function test_freebusy()
{
$ical = new libvcalendar();
diff --git a/plugins/libcalendaring/tests/resources/apple-alarms.ics b/plugins/libcalendaring/tests/resources/apple-alarms.ics
new file mode 100644
index 0000000..435d821
--- /dev/null
+++ b/plugins/libcalendaring/tests/resources/apple-alarms.ics
@@ -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
\ No newline at end of file
More information about the commits
mailing list