From bc59bd9fb809db119f6315fe8d38e8e3cd8e393d Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 18 Nov 2008 06:11:12 +0000 Subject: [PATCH] fixed missing .ics extension in Location header after PUT --- calendar/inc/class.calendar_groupdav.inc.php | 26 ++++++++++++++++++-- infolog/inc/class.infolog_groupdav.inc.php | 26 ++++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/calendar/inc/class.calendar_groupdav.inc.php b/calendar/inc/class.calendar_groupdav.inc.php index 2acbb33057..d30dad8b88 100644 --- a/calendar/inc/class.calendar_groupdav.inc.php +++ b/calendar/inc/class.calendar_groupdav.inc.php @@ -50,6 +50,28 @@ class calendar_groupdav extends groupdav_handler $this->bo =& new calendar_boupdate(); } + const PATH_ATTRIBUTE = 'id'; + + /** + * Create the path for an event + * + * @param array|int $event + * @return string + */ + static function get_path($event) + { + if (is_numeric($event) && self::PATH_ATTRIBUTE == 'id') + { + $name = $event; + } + else + { + if (!is_array($event)) $event = $this->bo->read($event); + $name = $event[self::PATH_ATTRIBUTE]; + } + return '/calendar/'.$name.'.ics'; + } + /** * Handle propfind in the calendar folder * @@ -116,7 +138,7 @@ class calendar_groupdav extends groupdav_handler $props[] = HTTP_WebDAV_Server::mkprop('getcontentlength', ''); // expensive to calculate and no CalDAV client uses it } $files['files'][] = array( - 'path' => '/calendar/'.$event['id'].'.ics', + 'path' => self::get_path($event), 'props' => $props, ); } @@ -284,7 +306,7 @@ class calendar_groupdav extends groupdav_handler if (is_null($event) || !$return_no_access) // let lightning think the event is added { if ($this->debug) error_log(__METHOD__."(,$id,$user) cal_id=$cal_id, is_null(\$event)=".(int)is_null($event)); - header('Location: '.$this->base_uri.'/calendar/'.$cal_id); + header('Location: '.$this->base_uri.self::get_path($cal_id)); return '201 Created'; } return true; diff --git a/infolog/inc/class.infolog_groupdav.inc.php b/infolog/inc/class.infolog_groupdav.inc.php index 9857db6c2d..df48095e76 100644 --- a/infolog/inc/class.infolog_groupdav.inc.php +++ b/infolog/inc/class.infolog_groupdav.inc.php @@ -37,6 +37,28 @@ class infolog_groupdav extends groupdav_handler $this->bo =& new infolog_bo(); } + const PATH_ATTRIBUTE = 'info_id'; + + /** + * Create the path for an event + * + * @param array|int $info + * @return string + */ + static function get_path($info) + { + if (is_numeric($info) && self::PATH_ATTRIBUTE == 'info_id') + { + $name = $info; + } + else + { + if (!is_array($info)) $info = $this->bo->read($info); + $name = $info[self::PATH_ATTRIBUTE]; + } + return '/calendar/'.$name.'.ics'; + } + /** * Handle propfind in the infolog folder * @@ -66,7 +88,7 @@ class infolog_groupdav extends groupdav_handler foreach($tasks as $task) { $files['files'][] = array( - 'path' => '/infolog/'.$task['info_id'].'.ics', + 'path' => self::get_path($task), 'props' => array( HTTP_WebDAV_Server::mkprop('getetag',$this->get_etag($task)), HTTP_WebDAV_Server::mkprop('getcontenttype',$this->agent != 'kde' ? @@ -126,7 +148,7 @@ class infolog_groupdav extends groupdav_handler header('ETag: '.$this->get_etag($info_id)); if (is_null($ok) || $id != $info_id) { - header('Location: '.$this->base_uri.'/infolog/'.$info_id); + header('Location: '.$this->base_uri.self::get_path($info_id)); return '201 Created'; } return true;