From d73537beac1c0ea597af07f2d21ec2a519f080c9 Mon Sep 17 00:00:00 2001
From: Peter Thienel <thienel@data-quest.de>
Date: Tue, 19 Mar 2024 09:20:24 +0100
Subject: [PATCH] pipline fixed, re #3795

---
 .../calendar/CalendarDateAssignment.class.php       | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/models/calendar/CalendarDateAssignment.class.php b/lib/models/calendar/CalendarDateAssignment.class.php
index da4761d426a..8eb536f90f7 100644
--- a/lib/models/calendar/CalendarDateAssignment.class.php
+++ b/lib/models/calendar/CalendarDateAssignment.class.php
@@ -217,6 +217,10 @@ class CalendarDateAssignment extends SimpleORMap implements Event
         bool $with_declined = false
     ) : array
     {
+        // one whole day as minimum (begin and end time stamp at the same day)
+        $begin->modify('midnight');
+        $end->modify('tomorrow -1 second');
+
         $sql = "JOIN `calendar_dates`
             ON calendar_date_id = `calendar_dates`.`id`
             WHERE
@@ -254,8 +258,8 @@ class CalendarDateAssignment extends SimpleORMap implements Event
                 $e_expire = $event->getExpire();
 
                 $cal_start = DateTimeImmutable::createFromMutable($m_start);
-                $cal_end = DateTimeImmutable::createFromMutable($m_start);
-                $cal_noon = $cal_start->setTime(12, 0);
+                $cal_end = DateTimeImmutable::createFromMutable($m_start)->modify('tomorrow -1 second');
+                $cal_noon = $cal_start->modify('noon');
                 // single events or first event
                 if (
                     ($e_start >= $cal_start && $e_end <= $cal_end)
@@ -265,9 +269,8 @@ class CalendarDateAssignment extends SimpleORMap implements Event
                 ) {
                     // exception for first event or single event
                     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;
+                        && !isset($events_created[$event->calendar_date->id])) {
+                            $events_created[$event->calendar_date->id . '_' . $event->calendar_date->begin] = $event;
                     }
                 } elseif ($e_expire > $cal_start) {
                     $events_created = array_merge($events_created, self::getRepetition($event, $cal_noon, true));
-- 
GitLab