diff options
-rwxr-xr-x | apps/calendar/ajax/events.php | 1 | ||||
-rwxr-xr-x | apps/calendar/lib/app.php | 19 |
2 files changed, 18 insertions, 2 deletions
diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php index 2499c5163a2..b84f5b4c608 100755 --- a/apps/calendar/ajax/events.php +++ b/apps/calendar/ajax/events.php @@ -22,4 +22,3 @@ foreach($events as $event){ $output[] = OC_Calendar_App::generateEventOutput($event, $start, $end); } OCP\JSON::encodedPrint($output); -?> diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php index e8fdbe8c78a..e457aac2c78 100755 --- a/apps/calendar/lib/app.php +++ b/apps/calendar/lib/app.php @@ -381,7 +381,17 @@ class OC_Calendar_App{ $start_dt->setTimezone(new DateTimeZone(self::$tz)); $end_dt->setTimezone(new DateTimeZone(self::$tz)); } - + + // Handle exceptions to recurring events + $exceptionDateObjects = $vevent->select('EXDATE'); + $exceptionDateMap = Array(); + foreach ($exceptionDateObjects as $exceptionObject) { + foreach($exceptionObject->getDateTimes() as $datetime) { + $ts = $datetime->getTimestamp(); + $exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)] = true; + } + } + if($event['repeating'] == 1){ $duration = (double) $end_dt->format('U') - (double) $start_dt->format('U'); $r = new When(); @@ -398,6 +408,13 @@ class OC_Calendar_App{ if($result > $end){ break; } + // Check for exceptions to recurring events + $ts = $result->getTimestamp(); + if (isset($exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)])) { + continue; + } + unset($ts); + if($output['allDay'] == true){ $output['start'] = $result->format('Y-m-d'); $output['end'] = date('Y-m-d', $result->format('U') + --$duration); |