2011-10-17 21:58:56 +04:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Copyright (c) 2011 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();
|
2011-10-17 21:58:56 +04:00
|
|
|
OC_JSON::checkAppEnabled('calendar');
|
|
|
|
|
|
|
|
$start = DateTime::createFromFormat('U', $_GET['start']);
|
|
|
|
$end = DateTime::createFromFormat('U', $_GET['end']);
|
|
|
|
|
2012-02-20 14:35:19 +04:00
|
|
|
if($_GET['calendar_id'] == 'shared_rw' || $_GET['calendar_id'] == 'shared_r'){
|
|
|
|
$calendars = OC_Calendar_Share::allSharedwithuser(OC_USER::getUser(), OC_Calendar_Share::CALENDAR, 1, ($_GET['calendar_id'] == 'shared_rw')?'rw':'r');
|
2012-02-11 17:02:51 +04:00
|
|
|
$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);
|
2012-02-25 19:54:27 +04:00
|
|
|
OC_Response::enableCaching(0);
|
|
|
|
OC_Response::setETagHeader($calendar['ctag']);
|
2012-02-11 17:02:51 +04:00
|
|
|
}
|
|
|
|
|
2011-10-17 21:58:56 +04:00
|
|
|
$events = OC_Calendar_Object::allInPeriod($_GET['calendar_id'], $start, $end);
|
2011-12-01 00:08:42 +04:00
|
|
|
$user_timezone = OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
2011-10-17 21:58:56 +04:00
|
|
|
$return = array();
|
2011-11-13 01:02:04 +04:00
|
|
|
foreach($events as $event){
|
2011-09-20 16:41:17 +04:00
|
|
|
$object = OC_VObject::parse($event['calendardata']);
|
2011-10-17 21:58:56 +04:00
|
|
|
$vevent = $object->VEVENT;
|
2012-02-18 00:39:54 +04:00
|
|
|
|
2012-02-25 19:54:27 +04:00
|
|
|
$return_event = OC_Calendar_App::prepareForOutput($event, $vevent);
|
2012-02-18 00:39:54 +04:00
|
|
|
|
2011-10-17 21:58:56 +04:00
|
|
|
$dtstart = $vevent->DTSTART;
|
|
|
|
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
|
|
|
|
$start_dt = $dtstart->getDateTime();
|
|
|
|
$end_dt = $dtend->getDateTime();
|
2011-11-13 01:02:04 +04:00
|
|
|
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
|
2011-10-17 21:58:56 +04:00
|
|
|
$return_event['allDay'] = true;
|
2011-10-22 00:47:31 +04:00
|
|
|
}else{
|
|
|
|
$return_event['allDay'] = false;
|
2012-01-31 23:46:27 +04:00
|
|
|
$start_dt->setTimezone(new DateTimeZone($user_timezone));
|
|
|
|
$end_dt->setTimezone(new DateTimeZone($user_timezone));
|
2011-10-17 21:58:56 +04:00
|
|
|
}
|
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();
|
2012-02-18 00:39:54 +04:00
|
|
|
$r->recur($start_dt)->rrule((string) $vevent->RRULE);
|
2011-11-13 01:02:04 +04:00
|
|
|
while($result = $r->next()){
|
2012-02-18 00:39:54 +04:00
|
|
|
if($result < $start){
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if($result > $end){
|
2011-11-13 01:02:04 +04:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
if($return_event['allDay'] == true){
|
|
|
|
$return_event['start'] = $result->format('Y-m-d');
|
2011-12-25 18:07:53 +04:00
|
|
|
$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-18 00:39:54 +04:00
|
|
|
$return[] = $return_event;
|
2011-11-13 01:02:04 +04:00
|
|
|
}
|
2011-11-10 01:17:09 +04:00
|
|
|
}else{
|
2012-02-18 00:39:54 +04:00
|
|
|
if($return_event['allDay'] == true){
|
2011-11-13 01:02:04 +04:00
|
|
|
$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');
|
|
|
|
}
|
2012-02-18 00:39:54 +04:00
|
|
|
$return[] = $return_event;
|
2011-11-10 01:17:09 +04:00
|
|
|
}
|
2011-10-17 21:58:56 +04:00
|
|
|
}
|
|
|
|
OC_JSON::encodedPrint($return);
|
2012-02-20 14:35:19 +04:00
|
|
|
?>
|