nextcloud/apps/calendar/ajax/events.php

83 lines
3.0 KiB
PHP
Raw Normal View History

<?php
/**
2012-02-11 17:02:51 +04:00
* Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
2011-11-13 01:02:04 +04:00
require_once ('../../../lib/base.php');
require_once('../../../3rdparty/when/When.php');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
$start = DateTime::createFromFormat('U', $_GET['start']);
$end = DateTime::createFromFormat('U', $_GET['end']);
2012-02-11 17:02:51 +04:00
if($_GET['calendar_id'] == 'shared'){
$calendars = OC_Calendar_Share::allSharedwithuser(OC_USER::getUser(), OC_Calendar_Share::CALENDAR, 1);
$events = array();
foreach($calendars as $calendar){
$calendarevents = OC_Calendar_Object::allInPeriod($calendar['calendarid'], $start, $end);
$events = array_merge($events, $calendarevents);
}
}else{
2012-02-12 13:40:57 +04:00
$calendar = OC_Calendar_Calendar::find($_GET['calendar_id']);
if($calendar['userid'] != OC_User::getUser()){
OC_JSON::error();
exit;
}
2012-02-11 17:02:51 +04:00
$events = OC_Calendar_Object::allInPeriod($_GET['calendar_id'], $start, $end);
}
$user_timezone = OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
2012-02-11 17:02:51 +04:00
$return = array();
2012-02-11 17:02:51 +04:00
2011-11-13 01:02:04 +04:00
foreach($events as $event){
$object = OC_VObject::parse($event['calendardata']);
$vevent = $object->VEVENT;
$dtstart = $vevent->DTSTART;
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
2011-11-13 01:02:04 +04:00
$return_event = array();
$start_dt = $dtstart->getDateTime();
$end_dt = $dtend->getDateTime();
2011-11-13 01:02:04 +04:00
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
$return_event['allDay'] = true;
2011-10-22 00:47:31 +04:00
}else{
$return_event['allDay'] = false;
$start_dt->setTimezone(new DateTimeZone($user_timezone));
$end_dt->setTimezone(new DateTimeZone($user_timezone));
}
2011-11-13 01:02:04 +04:00
if($event['repeating'] == 1){
$duration = (double) $end_dt->format('U') - (double) $start_dt->format('U');
$r = new When();
2011-11-13 01:30:09 +04:00
$r->recur((string) $start_dt->format('Ymd\THis'))->rrule((string) $vevent->RRULE);
2011-11-13 01:02:04 +04:00
while($result = $r->next()){
if($result->format('U') > $_GET['end']){
break;
}
if($return_event['allDay'] == true){
$return_event['start'] = $result->format('Y-m-d');
$return_event['end'] = date('Y-m-d', $result->format('U') + --$duration);
2011-11-13 01:02:04 +04:00
}else{
$return_event['start'] = $result->format('Y-m-d H:i:s');
$return_event['end'] = date('Y-m-d H:i:s', $result->format('U') + $duration);
}
2012-02-11 17:02:51 +04:00
$return[] = OC_Calendar_App::prepareForOutput($event, $vevent, $return_event);
2011-11-13 01:02:04 +04:00
}
}else{
2011-11-13 01:02:04 +04:00
$return_event = array();
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
$return_event['allDay'] = true;
$return_event['start'] = $start_dt->format('Y-m-d');
$end_dt->modify('-1 sec');
$return_event['end'] = $end_dt->format('Y-m-d');
}else{
$return_event['start'] = $start_dt->format('Y-m-d H:i:s');
$return_event['end'] = $end_dt->format('Y-m-d H:i:s');
$return_event['allDay'] = false;
}
2012-02-11 17:02:51 +04:00
$return[] = OC_Calendar_App::prepareForOutput($event, $vevent, $return_event);
}
}
OC_JSON::encodedPrint($return);
2011-11-13 01:02:04 +04:00
?>