From 344f7f68368c27a13aecac90f6a6aca08517cf9d Mon Sep 17 00:00:00 2001 From: libasys Date: Sun, 13 Sep 2015 23:48:19 +0200 Subject: [PATCH] fixes for vobject categories --- controller/calendarsettingscontroller.php | 1 + controller/eventcontroller.php | 5 ++-- controller/exportcontroller.php | 6 ++-- lib/connector/calendarconnector.php | 35 ++++++++++++++++++++++- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/controller/calendarsettingscontroller.php b/controller/calendarsettingscontroller.php index 21d617c..32f1d90 100755 --- a/controller/calendarsettingscontroller.php +++ b/controller/calendarsettingscontroller.php @@ -188,6 +188,7 @@ public function getUserSettingsCalendar() { $myCalendars[$calendar['id']]=[ 'id'=> $calendar['id'], 'name'=>$calendar['displayname'], + 'uri' => $calendar['uri'], 'issubscribe' => (int) $calendar['issubscribe'], 'permissions' => (int) $calendar['permissions'], ]; diff --git a/controller/eventcontroller.php b/controller/eventcontroller.php index e70f0c8..6f54afc 100755 --- a/controller/eventcontroller.php +++ b/controller/eventcontroller.php @@ -290,9 +290,9 @@ public function addCategorieToEvent() { if(!array_key_exists($category, $aCatNew)){ $sCatNew.= ','.$category; } - $vevent->setString('CATEGORIES', $sCatNew); + $vevent->CATEGORIES = $sCatNew; }else{ - $vevent->setString('CATEGORIES', $category); + $vevent->CATEGORIES = $category; } $vevent->setDateTime('LAST-MODIFIED', 'now'); @@ -1694,6 +1694,7 @@ public function generateEventOutput(array $event, $start, $end, $list = false) { $isEventShared = $event['shared']; } + $lastmodified = ($last_modified) ? $last_modified -> getDateTime() -> format('U') : 0; $staticoutput = array( 'id' => (int)$event['id'], diff --git a/controller/exportcontroller.php b/controller/exportcontroller.php index 7f8ee58..8b696b7 100755 --- a/controller/exportcontroller.php +++ b/controller/exportcontroller.php @@ -49,6 +49,8 @@ public function __construct($appName, IRequest $request, $userId, $l10n, IConfig $this->configInfo = $settings; } + + /** *@PublicPage * @NoCSRFRequired @@ -62,7 +64,7 @@ public function exportEvents(){ if (isset($token)) { $linkItem = \OCP\Share::getShareByToken($token, false); - if (is_array($linkItem) && isset($linkItem['uid_owner'])) { + if (is_array($linkItem) && isset($linkItem['uid_owner']) && !isset($linkItem['share_with'])) { $rootLinkItem = \OCP\Share::resolveReShare($linkItem); if (isset($rootLinkItem['uid_owner'])) { @@ -113,7 +115,7 @@ public function exportEvents(){ $calendarEvents = Export::export($calid, Export::CALENDAR); $response = new DataDownloadResponse($calendarEvents, $name, 'text/calendar'); - + $response->addHeader('last-modified',$calendar['lastmodifieddate']); return $response; } diff --git a/lib/connector/calendarconnector.php b/lib/connector/calendarconnector.php index abea6fb..6a9dc64 100644 --- a/lib/connector/calendarconnector.php +++ b/lib/connector/calendarconnector.php @@ -91,7 +91,23 @@ public function addObject($calendarId, $objectUri, $calendarData, $bLogActivity $object = $objectParser -> parse($calendarData); list($type, $startdate, $enddate, $summary, $repeating, $uid, $isAlarm, $relatedTo) = $objectParser -> extractData($object); - + + //Thunderbird fix multiple categories + $vevent = $object->VEVENT; + if(isset($vevent->CATEGORIES) && count($vevent->CATEGORIES) > 1){ + $sCat =''; + foreach($vevent->CATEGORIES as $key => $val){ + if($sCat === ''){ + $sCat .= $val; + }else{ + $sCat .= ','.$val; + } + } + unset($vevent->CATEGORIES); + $vevent->CATEGORIES = $sCat; + $calendarData = $object->serialize(); + } + $eventDB = new EventDAO($this -> db, $this -> userId, null); $object_id = $eventDB -> add($calendarId, $type, $startdate, $enddate, $repeating, $summary, $calendarData, $objectUri, time(), $isAlarm, $uid, $relatedTo, 0, $this -> userId); @@ -151,6 +167,23 @@ public function updateObject($cid, $uri, $data, $bLogActivity = true) { } $object = $objectParser -> parse($data); list($type, $startdate, $enddate, $summary, $repeating, $uid, $isAlarm, $relatedTo) = $objectParser -> extractData($object); + + //Thunderbird fix + $vevent = $object->VEVENT; + if(isset($vevent->CATEGORIES) && count($vevent->CATEGORIES) > 1){ + $sCat =''; + foreach($vevent->CATEGORIES as $key => $val){ + if($sCat === ''){ + $sCat .= $val; + }else{ + $sCat .= ','.$val; + } + } + unset($vevent->CATEGORIES); + $vevent->CATEGORIES = $sCat; + $data = $object->serialize(); + } + $eventDB = new EventDAO($this -> db, $this -> userId, null); $eventDB -> update($type, $startdate, $enddate, $repeating, $summary, $data, time(), $isAlarm, $uid, $relatedTo, $oldobject['id']);