From cf22cb99fecfd1064e64f81c659af60159d17184 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Fri, 20 Sep 2024 06:26:00 +0000
Subject: [PATCH] remove faulty additional field and access to it, fixes #4620

Closes #4620

Merge request studip/studip!3431
---
 lib/classes/InstituteCalendarHelper.php          | 14 +++++++-------
 lib/classes/globalsearch/GlobalSearchCourses.php |  2 +-
 lib/models/Course.php                            |  2 --
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/lib/classes/InstituteCalendarHelper.php b/lib/classes/InstituteCalendarHelper.php
index 6c934b4968b..95e9e8d5ad6 100644
--- a/lib/classes/InstituteCalendarHelper.php
+++ b/lib/classes/InstituteCalendarHelper.php
@@ -589,7 +589,7 @@ class InstituteCalendarHelper
      *
      * @return string enriched course info string for tooltip
      */
-    private static function getCycleInfos($course, $cycle_date)
+    private static function getCycleInfos(Course $course, $cycle_date)
     {
 
         $info_string = $course->getFullName('number-name') . "\n";
@@ -615,20 +615,20 @@ class InstituteCalendarHelper
 
         if ($course->getSemClass()->offsetGet('module')) {
             $mvv_pathes = [];
-            $course_start = $course->start_time;
-            $course_end = ($course->end_time < 0 || is_null($course->end_time))
-                        ? PHP_INT_MAX
-                        : $course->end_time;
             // set filter to show only pathes with valid semester data
             ModuleManagementModelTreeItem::setObjectFilter('Modul',
-                function ($modul) use ($course_start, $course_end) {
+                function ($modul) use ($course) {
                     // check for public status
                     if (!$GLOBALS['MVV_MODUL']['STATUS']['values'][$modul->stat]['public']) {
                         return false;
                     }
                     $modul_start = Semester::find($modul->start)->beginn ?: 0;
                     $modul_end = Semester::find($modul->end)->ende ?: PHP_INT_MAX;
-                    return ($modul_start <= $course_end && $modul_end >= $course_start);
+                    return $modul_end >= $course->start_semester->beginn
+                        && (
+                            $course->isOpenEnded()
+                            || $modul_start <= $course->end_semester->ende
+                        );
                 }
             );
 
diff --git a/lib/classes/globalsearch/GlobalSearchCourses.php b/lib/classes/globalsearch/GlobalSearchCourses.php
index 6359e8a6cb2..c51566d20cf 100644
--- a/lib/classes/globalsearch/GlobalSearchCourses.php
+++ b/lib/classes/globalsearch/GlobalSearchCourses.php
@@ -168,7 +168,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
             });
         }
         $result_children = [];
-        foreach($visibleChildren as $child) {
+        foreach ($visibleChildren as $child) {
             $result_children[] = self::filter($child, $search);
         }
 
diff --git a/lib/models/Course.php b/lib/models/Course.php
index d736725d17b..cb94bbc5434 100644
--- a/lib/models/Course.php
+++ b/lib/models/Course.php
@@ -71,7 +71,6 @@
  * @property SimpleORMapCollection|Institute[] $institutes has_and_belongs_to_many Institute
  * @property SimpleORMapCollection|UserDomain[] $domains has_and_belongs_to_many UserDomain
  * @property-read mixed $teachers additional field
- * @property mixed $end_time additional field
  * @property mixed $start_semester additional field
  * @property mixed $end_semester additional field
  * @property-read mixed $semester_text additional field
@@ -273,7 +272,6 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
         $config['additional_fields']['teachers'] = [
             'get' => 'getTeachers'
         ];
-        $config['additional_fields']['end_time'] = true;
 
         $config['additional_fields']['start_semester'] = [
             'get' => 'getStartSemester',
-- 
GitLab