From b86a301d616a36a7a917b83d1ab8447f103b0ad8 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 3 Apr 2014 19:19:14 +0200 Subject: [PATCH] Add support for valarm ACTION:AUDIO --- plugins/libcalendaring/libvcalendar.php | 11 +++++++++++ plugins/libcalendaring/tests/libvcalendar.php | 3 ++- plugins/libkolab/lib/kolab_format_xcal.php | 12 +++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php index 138d2327..b4ba2ab8 100644 --- a/plugins/libcalendaring/libvcalendar.php +++ b/plugins/libcalendaring/libvcalendar.php @@ -615,6 +615,14 @@ class libvcalendar implements Iterator case 'ATTENDEE': $alarm['attendees'][] = preg_replace('/^mailto:/i', '', $prop->value); break; + + case 'ATTACH': + $params = self::parameters_array($prop); + if (strlen($prop->value) && (preg_match('/^[a-z]+:/', $prop->value) || strtoupper($params['VALUE']) == 'URI')) { + // we only support URI-type of attachments here + $alarm['uri'] = $prop->value; + } + break; } } @@ -1006,6 +1014,9 @@ class libvcalendar implements Iterator $va->add('DURATION', $alarm['duration']); $va->add('REPEAT', intval($alarm['repeat'])); } + if ($alarm['uri']) { + $va->add('ATTACH', $alarm['uri'], array('VALUE' => 'URI')); + } $ve->add($va); } } diff --git a/plugins/libcalendaring/tests/libvcalendar.php b/plugins/libcalendaring/tests/libvcalendar.php index a25455c4..a20844e2 100644 --- a/plugins/libcalendaring/tests/libvcalendar.php +++ b/plugins/libcalendaring/tests/libvcalendar.php @@ -246,8 +246,9 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase $this->assertEquals('-M', $alarm[1], "Alarm unit"); $this->assertEquals(1, count($event['valarms']), "Ignore invalid alarm blocks"); - $this->assertEquals('AUDIO', $event['valarms'][0]['action'], "Full alarm item (action)"); + $this->assertEquals('AUDIO', $event['valarms'][0]['action'], "Full alarm item (action)"); $this->assertEquals('-PT45M', $event['valarms'][0]['trigger'], "Full alarm item (trigger)"); + $this->assertEquals('Basso', $event['valarms'][0]['uri'], "Full alarm item (attachment)"); } /** diff --git a/plugins/libkolab/lib/kolab_format_xcal.php b/plugins/libkolab/lib/kolab_format_xcal.php index a14fa8a4..8dbff5d2 100644 --- a/plugins/libkolab/lib/kolab_format_xcal.php +++ b/plugins/libkolab/lib/kolab_format_xcal.php @@ -222,7 +222,7 @@ abstract class kolab_format_xcal extends kolab_format $alarm = $valarms->get($i); $type = $alarm_types[$alarm->type()]; - if ($type == 'DISPLAY' || $type == 'EMAIL') { // only DISPLAY and EMAIL alarms are supported + if ($type == 'DISPLAY' || $type == 'EMAIL' || $type == 'AUDIO') { // only some alarms are supported $valarm = array( 'action' => $type, 'summary' => $alarm->summary(), @@ -237,6 +237,10 @@ abstract class kolab_format_xcal extends kolab_format $valarm['attendees'][] = $cr->email(); } } + else if ($type == 'AUDIO') { + $attach = $alarm->audioFile(); + $valarm['uri'] = $attach->uri(); + } if ($start = self::php_datetime($alarm->start())) { $object['alarms'] = '@' . $start->format('U'); @@ -451,7 +455,13 @@ abstract class kolab_format_xcal extends kolab_format $recipients ); } + else if ($valarm['action'] == 'AUDIO') { + $attach = new Attachment; + $attach->setUri($valarm['uri'] ?: 'null', 'unknown'); + $alarm = new Alarm($attach); + } else { + // action == DISPLAY $alarm = new Alarm(strval($valarm['summary'] ?: $object['title'])); }