diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php index e3be8c8428f..c5fb501ce3e 100644 --- a/apps/calendar/lib/app.php +++ b/apps/calendar/lib/app.php @@ -399,11 +399,11 @@ class OC_Calendar_App{ } }else{ $object->expand($start, $end); - foreach($object->getComponents() as $vevent){ - if(!($vevent instanceof Sabre_VObject_Component_VEvent)){ + foreach($object->getComponents() as $singleevent){ + if(!($singleevent instanceof Sabre_VObject_Component_VEvent)){ continue; } - $dynamicoutput = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), self::$tz); + $dynamicoutput = OC_Calendar_Object::generateStartEndDate($singleevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($singleevent), $allday, self::$tz); $return[] = array_merge($staticoutput, $dynamicoutput); } } diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php index 07f2afb7b57..12dbd3b8b48 100644 --- a/apps/calendar/lib/object.php +++ b/apps/calendar/lib/object.php @@ -304,8 +304,7 @@ class OC_Calendar_Object{ return date('Y-m-d H:i', $datetime->format('U') - $datetime->getOffset()); } - public static function getDTEndFromVEvent($vevent) - { + public static function getDTEndFromVEvent($vevent){ if ($vevent->DTEND) { $dtend = $vevent->DTEND; }else{ @@ -808,13 +807,16 @@ class OC_Calendar_Object{ return ($event['repeating'] == 1)?true:false; } - public static function generateStartEndDate($dtstart, $dtend, $tz){ + public static function generateStartEndDate($dtstart, $dtend, $allday, $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'); + $end_dt->modify('-1 day'); + while($start_dt->format('U') >= $end_dt->format('U')){ + $end_dt->modify('+1 day'); + } $return['end'] = $end_dt->format('Y-m-d'); }else{ $start_dt->setTimezone(new DateTimeZone($tz)); diff --git a/apps/calendar/lib/repeat.php b/apps/calendar/lib/repeat.php index 6976378ebda..204f96a5a2a 100644 --- a/apps/calendar/lib/repeat.php +++ b/apps/calendar/lib/repeat.php @@ -98,7 +98,7 @@ class OC_Calendar_Repeat{ if(!($vevent instanceof Sabre_VObject_Component_VEvent)){ continue; } - $startenddate = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), 'UTC'); + $startenddate = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), ($vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE)?true:false, 'UTC'); $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'])); } @@ -111,8 +111,8 @@ class OC_Calendar_Repeat{ */ public static function generateCalendar($id){ $allobjects = OC_Calendar_Object::all($id); - foreach($allobjects['id'] as $eventid){ - self::generate($eventid); + foreach($allobjects as $event){ + self::generate($event['id']); } return true; }