From c2a4da64dcbb8db4df4419ac7a3f683dd1cdcbe9 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+github@gmail.com>
Date: Fri, 25 Oct 2024 09:37:51 +0200
Subject: [PATCH] fix Course::getDatesWithExDates() in the wake of the changes
 in #4758, re #4758

---
 lib/classes/SimpleORMapCollection.php |  1 -
 lib/models/Course.php                 | 26 +++++++++++++++++---------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/lib/classes/SimpleORMapCollection.php b/lib/classes/SimpleORMapCollection.php
index 20162e5613d..f437084191a 100644
--- a/lib/classes/SimpleORMapCollection.php
+++ b/lib/classes/SimpleORMapCollection.php
@@ -234,7 +234,6 @@ class SimpleORMapCollection extends SimpleCollection
      */
     public function merge(SimpleCollection $a_collection, string $mode = 'ignore')
     {
-        $mode = func_get_arg(1);
         foreach ($a_collection as $element) {
             try {
                 /**
diff --git a/lib/models/Course.php b/lib/models/Course.php
index d7ffff7a956..17c06ca382e 100644
--- a/lib/models/Course.php
+++ b/lib/models/Course.php
@@ -1906,17 +1906,25 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
      */
     public function getDatesWithExdates($range_begin = 0, $range_end = 0)
     {
-        $dates = [];
-        if (($range_begin > 0) && ($range_end > 0) && ($range_end > $range_begin)) {
-            $ex_dates = $this->ex_dates->findBy('content', '', '<>')
-                          ->findBy('date', $range_begin, '>=')
-                          ->findBy('end_time', $range_end, '<=');
-            $dates = $this->dates->findBy('date', $range_begin, '>=')
-                          ->findBy('end_time', $range_end, '<=');
-            $dates->merge($ex_dates);
+        $dates = SimpleCollection::createFromArray([]);
+        if (
+            $range_begin > 0
+            && $range_end > 0
+            && $range_end > $range_begin
+        ) {
+            $dates->merge(
+                $this->dates->findBy('date', $range_begin, '>=')
+                     ->findBy('end_time', $range_end, '<=')
+            );
+
+            $dates->merge(
+                $this->ex_dates->findBy('content', '', '<>')
+                     ->findBy('date', $range_begin, '>=')
+                     ->findBy('end_time', $range_end, '<=')
+            );
         } else {
-            $dates = $this->ex_dates->findBy('content', '', '<>');
             $dates->merge($this->dates);
+            $dates->merge($this->ex_dates->findBy('content', '', '<>'));
         }
         $dates->uasort(function($a, $b) {
             return $a->date - $b->date
-- 
GitLab