proper export for calendar app - doesn't work with apple ical yet - even though a ics validator says it's valid
This commit is contained in:
parent
ad6562d14f
commit
c2a51d1f48
|
@ -7,6 +7,7 @@ OC::$CLASSPATH['OC_Calendar_Hooks'] = 'apps/calendar/lib/hooks.php';
|
|||
OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/connector_sabre.php';
|
||||
OC::$CLASSPATH['OC_Calendar_Share'] = 'apps/calendar/lib/share.php';
|
||||
OC::$CLASSPATH['OC_Search_Provider_Calendar'] = 'apps/calendar/lib/search.php';
|
||||
OC::$CLASSPATH['OC_Calendar_Export'] = 'apps/calendar/lib/export.php';
|
||||
OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Calendar_Hooks', 'deleteUser');
|
||||
OCP\Util::addscript('calendar','loader');
|
||||
OCP\Util::addscript("3rdparty", "chosen/chosen.jquery.min");
|
||||
|
@ -18,4 +19,4 @@ OCP\App::addNavigationEntry( array(
|
|||
'icon' => OCP\Util::imagePath( 'calendar', 'icon.svg' ),
|
||||
'name' => $l->t('Calendar')));
|
||||
OCP\App::registerPersonal('calendar', 'settings');
|
||||
OC_Search::registerProvider('OC_Search_Provider_Calendar');
|
||||
OC_Search::registerProvider('OC_Search_Provider_Calendar');
|
|
@ -5,35 +5,26 @@
|
|||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
|
||||
OCP\User::checkLoggedIn();
|
||||
OCP\App::checkAppEnabled('calendar');
|
||||
$cal = isset($_GET['calid']) ? $_GET['calid'] : NULL;
|
||||
$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL;
|
||||
$nl = "\r\n";
|
||||
if(isset($cal)){
|
||||
$calendar = OC_Calendar_App::getCalendar($cal, true);
|
||||
if(!$calendar){
|
||||
header('HTTP/1.0 404 Not Found');
|
||||
exit;
|
||||
}
|
||||
$calobjects = OC_Calendar_Object::all($cal);
|
||||
header('Content-Type: text/Calendar');
|
||||
header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics');
|
||||
foreach($calobjects as $calobject){
|
||||
echo $calobject['calendardata'] . $nl;
|
||||
}
|
||||
echo OC_Calendar_Export::export($cal, OC_Calendar_Export::CALENDAR);
|
||||
}elseif(isset($event)){
|
||||
$data = OC_Calendar_App::getEventObject($_GET['eventid'], true);
|
||||
if(!$data){
|
||||
header('HTTP/1.0 404 Not Found');
|
||||
exit;
|
||||
}
|
||||
$calendarid = $data['calendarid'];
|
||||
$calendar = OC_Calendar_App::getCalendar($calendarid);
|
||||
header('Content-Type: text/Calendar');
|
||||
header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics');
|
||||
echo $data['calendardata'];
|
||||
}
|
||||
?>
|
||||
header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics');
|
||||
echo OC_Calendar_Export::export($event, OC_Calendar_Export::EVENT);
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
/*
|
||||
* This class does export
|
||||
*/
|
||||
class OC_Calendar_Export{
|
||||
const CALENDAR = 'calendar';
|
||||
const EVENT = 'event';
|
||||
|
||||
/*
|
||||
* @brief export a calendar or an event
|
||||
* @param (int) $id - id of calendar / event
|
||||
* @param (const) $type - use OC_Calendar_Export constants
|
||||
* @return (string)
|
||||
*/
|
||||
public static function export($id, $type){
|
||||
if($type == self::EVENT){
|
||||
$data = OC_Calendar_App::getEventObject($_GET['eventid'], false);
|
||||
$return = $data['calendardata'];
|
||||
}else{
|
||||
$return = self::calendar($id);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief export a calendar and convert all times to UTC
|
||||
* @param (int) $id - id of the calendar
|
||||
* @return (string)
|
||||
*/
|
||||
private static function calendar($id){
|
||||
$events = OC_Calendar_Object::all($id);
|
||||
$return = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar\n";
|
||||
foreach($events as $event){
|
||||
$object = OC_VObject::parse($event['calendardata']);
|
||||
$dtstart = $object->VEVENT->DTSTART;
|
||||
$start_dt = $dtstart->getDateTime();
|
||||
$dtend = OC_Calendar_Object::getDTEndFromVEvent($object->VEVENT);
|
||||
$end_dt = $dtend->getDateTime();
|
||||
if($dtstart->getDateType() !== Sabre_VObject_Element_DateTime::DATE){
|
||||
$start_dt->setTimezone(new DateTimeZone('UTC'));
|
||||
$end_dt->setTimezone(new DateTimeZone('UTC'));
|
||||
$object->VEVENT->setDateTime('DTSTART', $start_dt, Sabre_VObject_Property_DateTime::UTC);
|
||||
$object->VEVENT->setDateTime('DTEND', $end_dt, Sabre_VObject_Property_DateTime::UTC);
|
||||
}
|
||||
$return .= $object->VEVENT->serialize();
|
||||
}
|
||||
$return .= "END:VCALENDAR";
|
||||
return $return;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue