diff --git a/kronolith/lib/Kronolith.php b/kronolith/lib/Kronolith.php index 16d98250c90..284f69c42fa 100644 --- a/kronolith/lib/Kronolith.php +++ b/kronolith/lib/Kronolith.php @@ -364,7 +364,7 @@ static public function addEvents(&$results, &$event, $startDate, $endDate, $event->start->month, $event->start->mday)) { if ($coverDates) { - self::addCoverDates($results, $event, $event->start, $event->end, $json); + self::addCoverDates($results, $event, $event->start, $event->end, $json, $endDate); } else { $results[$event->start->dateString()][$event->id] = $json ? $event->toJson() : $event; } @@ -406,7 +406,7 @@ static public function addEvents(&$results, &$event, $startDate, $endDate, $addEvent->start = $addEvent->originalStart = $next; $addEvent->end = $addEvent->originalEnd = $nextEnd; if ($coverDates) { - self::addCoverDates($results, $addEvent, $next, $nextEnd, $json); + self::addCoverDates($results, $addEvent, $next, $nextEnd, $json, $endDate); } else { $addEvent->start = $next; $addEvent->end = $nextEnd; @@ -519,7 +519,8 @@ static public function addEvents(&$results, &$event, $startDate, $endDate, $loopDate = new Horde_Date(array('month' => $eventStart->month, 'mday' => $i, 'year' => $eventStart->year)); - while ($loopDate->compareDateTime($eventEnd) <= 0) { + while ($loopDate->compareDateTime($eventEnd) <= 0 && + $loopDate->compareDateTime($endDate) <=0) { if (!$allDay || $loopDate->compareDateTime($eventEnd) != 0) { $addEvent = clone $event; @@ -571,13 +572,16 @@ static public function addEvents(&$results, &$event, $startDate, $endDate, * @param Horde_Date $eventEnd The event's end at the actual recurrence. * @param boolean $json Store the results of the events' toJson() * method? + * @param Horde_Date $endDate The ending date of the current view. */ static public function addCoverDates(&$results, $event, $eventStart, - $eventEnd, $json) + $eventEnd, $json, Horde_Date $endDate = null) { $loopDate = new Horde_Date($eventStart->year, $eventStart->month, $eventStart->mday); $allDay = $event->isAllDay(); - while ($loopDate->compareDateTime($eventEnd) <= 0) { + $endDate = empty($endDate) ? $eventEnd : $endDate; + while ($loopDate->compareDateTime($eventEnd) <= 0 && + $loopDate->compareDateTime($endDate) <= 0) { if (!$allDay || $loopDate->compareDateTime($eventEnd) != 0) { $addEvent = clone $event;