lib/kolab_sync_data_calendar.php
Aleksander Machniak
machniak at kolabsys.com
Fri Mar 27 12:45:37 CET 2015
lib/kolab_sync_data_calendar.php | 50 +++++++++++++++++++++++++++------------
1 file changed, 35 insertions(+), 15 deletions(-)
New commits:
commit f2751bb877f87a1b921095383d4671b5438bf34f
Author: Aleksander Machniak <machniak at kolabsys.com>
Date: Fri Mar 27 07:44:50 2015 -0400
Fix event alarms/reminders synchronization from Kolab to activesync device (#4889)
diff --git a/lib/kolab_sync_data_calendar.php b/lib/kolab_sync_data_calendar.php
index 359821b..785c9d0 100644
--- a/lib/kolab_sync_data_calendar.php
+++ b/lib/kolab_sync_data_calendar.php
@@ -254,7 +254,7 @@ class kolab_sync_data_calendar extends kolab_sync_data implements Syncroton_Data
}
// Event reminder time
- if ($config['ALARMS'] && ($minutes = $this->from_kolab_alarm($event['alarms']))) {
+ if ($config['ALARMS'] && ($minutes = $this->from_kolab_alarm($event))) {
$result['reminder'] = $minutes;
}
@@ -426,7 +426,7 @@ class kolab_sync_data_calendar extends kolab_sync_data implements Syncroton_Data
// Reminder
// @TODO: should alarms be used when importing event from phone?
if ($config['ALARMS']) {
- $event['alarms'] = $this->to_kolab_alarm($data->reminder, $event);
+ $event['valarms'] = $this->to_kolab_alarm($data->reminder, $event);
}
$event['attendees'] = array();
@@ -530,13 +530,20 @@ class kolab_sync_data_calendar extends kolab_sync_data implements Syncroton_Data
}
/**
- * Converts libkolab alarms string into number of minutes
+ * Converts libkolab alarms spec. into a number of minutes
*/
- protected function from_kolab_alarm($value)
+ protected function from_kolab_alarm($event)
{
- // e.g. '-15M:DISPLAY'
- // Ignore EMAIL alarms
- if (preg_match('/^-([0-9]+)([WDHMS]):(DISPLAY|AUDIO)$/', $value, $matches)) {
+ if (isset($event['valarms'])) {
+ foreach ($event['valarms'] as $alarm) {
+ if (in_array($alarm['action'], array('DISPLAY', 'AUDIO'))) {
+ $value = $alarm['trigger'];
+ break;
+ }
+ }
+ }
+
+ if ($value && preg_match('/^-[PT]*([0-9]+)([WDHMS])$/', $value, $matches)) {
$value = intval($matches[1]);
switch ($matches[2]) {
@@ -551,24 +558,37 @@ class kolab_sync_data_calendar extends kolab_sync_data implements Syncroton_Data
}
/**
- * Converts ActiveSync libkolab alarms string into number of minutes
+ * Converts ActiveSync reminder into libkolab alarms spec.
*/
protected function to_kolab_alarm($value, $event)
{
- // Get alarm type from old event object if exists
- if (!empty($event['alarms']) && preg_match('/:(.*)$/', $event['alarms'], $matches)) {
- $type = $matches[1];
+ $valarms = array();
+ $unsupported = array();
+
+ if (!empty($event['valarms'])) {
+ foreach ($event['valarms'] as $alarm) {
+ if (!$current && in_array($alarm['action'], array('DISPLAY', 'AUDIO'))) {
+ $current = $alarm;
+ }
+ else {
+ $unsupported[] = $alarm;
+ }
+ }
}
if ($value) {
- return sprintf('-%dM:%s', $value, $type ? $type : 'DISPLAY');
+ $valarms[] = array(
+ 'action' => $current['action'] ?: 'DISPLAY',
+ 'description' => $current['description'] ?: '',
+ 'trigger' => sprintf('-PT%dM', $value),
+ );
}
- if ($type == 'DISPLAY' || $type == 'AUDIO') {
- return null;
+ if (!empty($unsupported)) {
+ $valarms = array_merge($valarms, $unsupported);
}
- return $event['alarms'];
+ return $valarms;
}
}
More information about the commits
mailing list