From 99170807b4e7494da2ef95f10b83f3d3c187a0b6 Mon Sep 17 00:00:00 2001 From: Peter Thienel <thienel@data-quest.de> Date: Fri, 15 Mar 2024 19:49:19 +0100 Subject: [PATCH] removes duplicated events from calendar views, fixes #3795 --- .../calendar/CalendarDateAssignment.class.php | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/models/calendar/CalendarDateAssignment.class.php b/lib/models/calendar/CalendarDateAssignment.class.php index 6caae9e9c85..da4761d426a 100644 --- a/lib/models/calendar/CalendarDateAssignment.class.php +++ b/lib/models/calendar/CalendarDateAssignment.class.php @@ -217,9 +217,6 @@ class CalendarDateAssignment extends SimpleORMap implements Event bool $with_declined = false ) : array { - $begin->setTime(0, 0); - $end->setTime(23, 59, 59); - $sql = "JOIN `calendar_dates` ON calendar_date_id = `calendar_dates`.`id` WHERE @@ -256,11 +253,8 @@ class CalendarDateAssignment extends SimpleORMap implements Event $e_end = clone $event->getEnd(); $e_expire = $event->getExpire(); - // duration in full days - $duration = $event->getDurationDays(); - $cal_start = DateTimeImmutable::createFromMutable($m_start); - $cal_end = DateTimeImmutable::createFromMutable($m_start)->setTime(23,59,59); + $cal_end = DateTimeImmutable::createFromMutable($m_start); $cal_noon = $cal_start->setTime(12, 0); // single events or first event if ( @@ -270,11 +264,13 @@ class CalendarDateAssignment extends SimpleORMap implements Event || ($e_end > $cal_start && $e_start <= $cal_end) ) { // exception for first event or single event - if (!$event->calendar_date->exceptions->findOneBy('date', $cal_start->format('Y-m-d'))) { - $events_created = array_merge($events_created, self::createRecurrentDate($event, $cal_noon)); + if (!$event->calendar_date->exceptions->findOneBy('date', $cal_start->format('Y-m-d')) + && !isset($events_created[$event->calendar_date->id]) + && !$event->calendar_date->repetition_type) { + $events_created[$event->calendar_date->id] = $event; } } elseif ($e_expire > $cal_start) { - $events_created = array_merge($events_created, self::getRepetition($event, $cal_noon)); + $events_created = array_merge($events_created, self::getRepetition($event, $cal_noon, true)); } } -- GitLab