diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php index e3be8c8428..17c23f4ea3 100644 --- a/apps/calendar/lib/app.php +++ b/apps/calendar/lib/app.php @@ -400,10 +400,36 @@ class OC_Calendar_App{ }else{ $object->expand($start, $end); foreach($object->getComponents() as $vevent){ - if(!($vevent instanceof Sabre_VObject_Component_VEvent)){ + if(get_class($vevent) != 'Sabre_VObject_Component_VEvent'){ continue; } - $dynamicoutput = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), self::$tz); + $dynamicoutput = array(); + $dtstart = $vevent->DTSTART; + $start_dt = $dtstart->getDateTime(); + $dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent); + $end_dt = $dtend->getDateTime(); + + if($allday){ + $dynamicoutput['start'] = $start_dt->format('Y-m-d'); + $end_dt->modify('-1 sec'); + $dynamicoutput['end'] = $end_dt->format('Y-m-d'); + }else{ + $start_dt->setTimezone(new DateTimeZone(self::$tz)); + $end_dt->setTimezone(new DateTimeZone(self::$tz)); + $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s'); + $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s'); + } + + // 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; + } + }*/ + $return[] = array_merge($staticoutput, $dynamicoutput); } } diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php index 07f2afb7b5..ba3fa814f3 100644 --- a/apps/calendar/lib/object.php +++ b/apps/calendar/lib/object.php @@ -807,21 +807,4 @@ class OC_Calendar_Object{ $event = self::find($id); return ($event['repeating'] == 1)?true:false; } - - public static function generateStartEndDate($dtstart, $dtend, $tz){ - $start_dt = $dtstart->getDateTime(); - $end_dt = $dtend->getDateTime(); - $return = array(); - if($allday){ - $return['start'] = $start_dt->format('Y-m-d'); - $end_dt->modify('-1 hour'); - $return['end'] = $end_dt->format('Y-m-d'); - }else{ - $start_dt->setTimezone(new DateTimeZone($tz)); - $end_dt->setTimezone(new DateTimeZone($tz)); - $return['start'] = $start_dt->format('Y-m-d H:i:s'); - $return['end'] = $end_dt->format('Y-m-d H:i:s'); - } - return $return; - } } diff --git a/apps/calendar/lib/repeat.php b/apps/calendar/lib/repeat.php index 6976378ebd..4b9cbdcd4b 100644 --- a/apps/calendar/lib/repeat.php +++ b/apps/calendar/lib/repeat.php @@ -95,12 +95,25 @@ class OC_Calendar_Repeat{ $end->modify('+5 years'); $object->expand($start, $end); foreach($object->getComponents() as $vevent){ - if(!($vevent instanceof Sabre_VObject_Component_VEvent)){ + if(get_class($vevent) != 'Sabre_VObject_Component_VEvent'){ continue; } - $startenddate = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), 'UTC'); + $dtstart = $vevent->DTSTART; + $start_dt = $dtstart->getDateTime(); + $dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent); + $end_dt = $dtend->getDateTime(); + if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){ + $startdate = $start_dt->format('Y-m-d'); + $end_dt->modify('-1 sec'); + $enddate = $end_dt->format('Y-m-d'); + }else{ + $start_dt->setTimezone(new DateTimeZone('UTC')); + $end_dt->setTimezone(new DateTimeZone('UTC')); + $startdate = $start_dt->format('Y-m-d H:i:s'); + $enddate = $end_dt->format('Y-m-d H:i:s'); + } $stmt = OCP\DB::prepare('INSERT INTO *PREFIX*calendar_repeat (eventid,calid,startdate,enddate) VALUES(?,?,?,?)'); - $stmt->execute(array($id,OC_Calendar_Object::getCalendarid($id),$startenddate['start'],$startenddate['end'])); + $stmt->execute(array($id,OC_Calendar_Object::getCalendarid($id),$startdate,$enddate)); } return true; }