From c5c53c473121e3902d0b79bbcf1a2c94e7ff8029 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Tue, 27 Aug 2024 11:45:12 +0000
Subject: [PATCH] ensure a valid semester is always selected, fixes #4527

Closes #4527

Merge request studip/studip!3327
---
 app/controllers/calendar/schedule.php | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/app/controllers/calendar/schedule.php b/app/controllers/calendar/schedule.php
index 5d9a26ef6e9..cf70dd3184c 100644
--- a/app/controllers/calendar/schedule.php
+++ b/app/controllers/calendar/schedule.php
@@ -83,17 +83,20 @@ class Calendar_ScheduleController extends AuthenticatedController
 
         // check, if the hidden seminar-entries shall be shown
         $show_hidden = Request::int('show_hidden', 0);
+
         // load semester-data and current semester
         $this->semesters = array_reverse(Semester::findAllVisible(false));
-        if (Request::option('semester_id')) {
-            $this->current_semester = Semester::find(Request::option('semester_id'));
-            $schedule_settings['semester_id'] = Request::option('semester_id');
-            UserConfig::get($GLOBALS['user']->id)->store('SCHEDULE_SETTINGS',
-                $schedule_settings);
-        } else {
-            $this->current_semester = !empty($schedule_settings['semester_id']) ?
-                Semester::find($schedule_settings['semester_id']) :
-                Semester::findCurrent();
+        $this->current_semester = Semester::findCurrent();
+
+        $semester_id = Request::option('semester_id', $schedule_settings['semester_id'] ?? null);
+        if ($semester_id && Semester::exists($semester_id)) {
+            $this->current_semester = Semester::find($semester_id);
+
+            $schedule_settings['semester_id'] = $this->current_semester->id;
+            User::findCurrent()->getConfiguration()->store(
+                'SCHEDULE_SETTINGS',
+                $schedule_settings
+            );
         }
 
         // check type-safe if days is false otherwise sunday (0) cannot be chosen
-- 
GitLab