summaryrefslogtreecommitdiffstats
path: root/apps/calendar
diff options
context:
space:
mode:
authorBart Visscher <bartv@thisnet.nl>2012-02-17 21:39:54 +0100
committerBart Visscher <bartv@thisnet.nl>2012-02-17 22:09:31 +0100
commit539fd7240c463d71ea885ca1c2a1eb292a7cceac (patch)
treeaf4cd96f1de0254bbe82408998172e4d0a7850a5 /apps/calendar
parenta33b757b192384e612f278feeb30d998b3816a4d (diff)
downloadnextcloud-server-539fd7240c463d71ea885ca1c2a1eb292a7cceac.tar.gz
nextcloud-server-539fd7240c463d71ea885ca1c2a1eb292a7cceac.zip
Calendar: optimize sending calendar events, also enabled caching of result
Diffstat (limited to 'apps/calendar')
-rwxr-xr-xapps/calendar/ajax/events.php30
-rw-r--r--apps/calendar/lib/calendar.php1
2 files changed, 20 insertions, 11 deletions
diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php
index dd593ddec99..7734129bd95 100755
--- a/apps/calendar/ajax/events.php
+++ b/apps/calendar/ajax/events.php
@@ -9,7 +9,8 @@
require_once ('../../../lib/base.php');
require_once('../../../3rdparty/when/When.php');
-function addoutput($event, $vevent, $return_event){
+function create_return_event($event, $vevent){
+ $return_event = array();
$return_event['id'] = (int)$event['id'];
$return_event['title'] = htmlspecialchars($event['summary']);
$return_event['description'] = isset($vevent->DESCRIPTION)?htmlspecialchars($vevent->DESCRIPTION->value):'';
@@ -29,15 +30,21 @@ OC_JSON::checkAppEnabled('calendar');
$start = DateTime::createFromFormat('U', $_GET['start']);
$end = DateTime::createFromFormat('U', $_GET['end']);
+$calendar = OC_Calendar_App::getCalendar($_GET['calendar_id']);
+OC_Response::enableCaching(0);
+OC_Response::setETagHeader($calendar['ctag']);
+
$events = OC_Calendar_Object::allInPeriod($_GET['calendar_id'], $start, $end);
$user_timezone = OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
$return = array();
foreach($events as $event){
$object = OC_VObject::parse($event['calendardata']);
$vevent = $object->VEVENT;
+
+ $return_event = create_return_event($event, $vevent);
+
$dtstart = $vevent->DTSTART;
$dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
- $return_event = array();
$start_dt = $dtstart->getDateTime();
$end_dt = $dtend->getDateTime();
if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
@@ -47,13 +54,17 @@ foreach($events as $event){
$start_dt->setTimezone(new DateTimeZone($user_timezone));
$end_dt->setTimezone(new DateTimeZone($user_timezone));
}
+
//Repeating Events
if($event['repeating'] == 1){
$duration = (double) $end_dt->format('U') - (double) $start_dt->format('U');
$r = new When();
- $r->recur((string) $start_dt->format('Ymd\THis'))->rrule((string) $vevent->RRULE);
+ $r->recur($start_dt)->rrule((string) $vevent->RRULE);
while($result = $r->next()){
- if($result->format('U') > $_GET['end']){
+ if($result < $start){
+ continue;
+ }
+ if($result > $end){
break;
}
if($return_event['allDay'] == true){
@@ -63,22 +74,19 @@ foreach($events as $event){
$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);
}
- $return[] = addoutput($event, $vevent, $return_event);
+ $return[] = $return_event;
}
}else{
- $return_event = array();
- if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
- $return_event['allDay'] = true;
+ if($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;
}
- $return[] = addoutput($event, $vevent, $return_event);
+ $return[] = $return_event;
}
}
OC_JSON::encodedPrint($return);
-?> \ No newline at end of file
+?>
diff --git a/apps/calendar/lib/calendar.php b/apps/calendar/lib/calendar.php
index 5e272991f20..679649582d8 100644
--- a/apps/calendar/lib/calendar.php
+++ b/apps/calendar/lib/calendar.php
@@ -246,6 +246,7 @@ class OC_Calendar_Calendar{
'backgroundColor' => '#'.$calendar['calendarcolor'],
'borderColor' => '#888',
'textColor' => 'black',
+ 'cache' => true,
);
}
}