From 1ce6d461a6cf83aca46bd65de1f91fa430d0ecd8 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 3 Apr 2014 15:07:47 +0200 Subject: [PATCH] Save and restore iCal STATUS properties --- plugins/libcalendaring/libvcalendar.php | 4 ++++ plugins/libcalendaring/tests/libvcalendar.php | 1 + plugins/libkolab/lib/kolab_format_event.php | 2 ++ plugins/libkolab/lib/kolab_format_task.php | 7 +++++++ plugins/libkolab/lib/kolab_format_xcal.php | 4 ++++ 5 files changed, 18 insertions(+) diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php index db3e651f..d74db9f7 100644 --- a/plugins/libcalendaring/libvcalendar.php +++ b/plugins/libcalendaring/libvcalendar.php @@ -412,6 +412,8 @@ class libvcalendar implements Iterator $event['cancelled'] = true; else if ($prop->value == 'COMPLETED') $event['complete'] = 100; + else + $event['status'] = strval($prop->value); break; case 'PRIORITY': @@ -939,6 +941,8 @@ class libvcalendar implements Iterator $ve->add('STATUS', 'TENTATIVE'); else if ($event['complete'] == 100) $ve->add('STATUS', 'COMPLETED'); + else if (!empty($event['status'])) + $ve->add('STATUS', $event['status']); if (!empty($event['sensitivity'])) $ve->add('CLASS', strtoupper($event['sensitivity'])); diff --git a/plugins/libcalendaring/tests/libvcalendar.php b/plugins/libcalendaring/tests/libvcalendar.php index 32e3aa87..0de80e6b 100644 --- a/plugins/libcalendaring/tests/libvcalendar.php +++ b/plugins/libcalendaring/tests/libvcalendar.php @@ -287,6 +287,7 @@ class libvcalendar_test extends PHPUnit_Framework_TestCase $this->assertInstanceOf('DateTime', $task['start'], "'start' property is DateTime object"); $this->assertInstanceOf('DateTime', $task['due'], "'due' property is DateTime object"); $this->assertEquals('-1D:DISPLAY', $task['alarms'], "Taks alarm value"); + $this->assertEquals('IN-PROCESS', $task['status'], "Task status property"); $this->assertEquals(1, count($task['x-custom']), "Custom properties"); } diff --git a/plugins/libkolab/lib/kolab_format_event.php b/plugins/libkolab/lib/kolab_format_event.php index c0570764..b6745e75 100644 --- a/plugins/libkolab/lib/kolab_format_event.php +++ b/plugins/libkolab/lib/kolab_format_event.php @@ -87,6 +87,8 @@ class kolab_format_event extends kolab_format_xcal $status = kolabformat::StatusTentative; if ($object['cancelled']) $status = kolabformat::StatusCancelled; + else if ($object['status'] && array_key_exists($object['status'], $this->status_map)) + $status = $this->status_map[$object['status']]; $this->obj->setStatus($status); // save recurrence exceptions diff --git a/plugins/libkolab/lib/kolab_format_task.php b/plugins/libkolab/lib/kolab_format_task.php index a15cb0b8..b60145a6 100644 --- a/plugins/libkolab/lib/kolab_format_task.php +++ b/plugins/libkolab/lib/kolab_format_task.php @@ -43,6 +43,13 @@ class kolab_format_task extends kolab_format_xcal $this->obj->setPercentComplete(intval($object['complete'])); + $status = kolabformat::StatusUndefined; + if ($object['complete'] == 100) + $status = kolabformat::StatusCompleted; + else if ($object['status'] && array_key_exists($object['status'], $this->status_map)) + $status = $this->status_map[$object['status']]; + $this->obj->setStatus($status); + if (isset($object['start'])) $this->obj->setStart(self::get_datetime($object['start'], null, $object['start']->_dateonly)); diff --git a/plugins/libkolab/lib/kolab_format_xcal.php b/plugins/libkolab/lib/kolab_format_xcal.php index a2544f4b..0de170d9 100644 --- a/plugins/libkolab/lib/kolab_format_xcal.php +++ b/plugins/libkolab/lib/kolab_format_xcal.php @@ -81,6 +81,10 @@ abstract class kolab_format_xcal extends kolab_format 'IN-PROCESS' => kolabformat::StatusInProcess, 'COMPLETED' => kolabformat::StatusCompleted, 'CANCELLED' => kolabformat::StatusCancelled, + 'TENTATIVE' => kolabformat::StatusTentative, + 'CONFIRMED' => kolabformat::StatusConfirmed, + 'DRAFT' => kolabformat::StatusDraft, + 'FINAL' => kolabformat::StatusFinal, ); protected $part_status_map = array(