From 57ed63e4b39ea1126fb411ebf7bc02c041380616 Mon Sep 17 00:00:00 2001
From: David Siegfried <david.siegfried@uni-vechta.de>
Date: Tue, 8 Mar 2022 14:03:20 +0000
Subject: [PATCH] remember selected semester, fixes #745

---
 app/controllers/resources/room_planning.php   | 55 +++++++++++--------
 .../resources/room_planning/semester_plan.php | 10 ++--
 2 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/app/controllers/resources/room_planning.php b/app/controllers/resources/room_planning.php
index 0b4389fff7c..4651e4be710 100644
--- a/app/controllers/resources/room_planning.php
+++ b/app/controllers/resources/room_planning.php
@@ -451,6 +451,22 @@ class Resources_RoomPlanningController extends AuthenticatedController
         }
         $this->rooms = RoomManager::getUserRooms($current_user);
 
+        //For the semester selector:
+        if (Request::get('semester_id')) {
+            $this->semester = Semester::find(Request::get('semester_id'));
+            if (!$this->semester) {
+                PageLayout::postError(
+                    _('Das ausgewählte Semester wurde nicht in der Datenbank gefunden!')
+                );
+                return;
+            }
+        } else {
+            $this->semester = Semester::findCurrent();
+        }
+
+        $this->current_semester_id = $this->semester->id;
+        URLHelper::addLinkParam('semester_id', $this->semester->id);
+
         if (Navigation::hasItem('/resources/planning/semester_plan')) {
             Navigation::activateItem('/resources/planning/semester_plan');
         }
@@ -458,7 +474,8 @@ class Resources_RoomPlanningController extends AuthenticatedController
         $new_resource_id = Request::get('new_resource_id');
         if ($new_resource_id) {
             $this->redirect(
-                'resources/room_planning/semester_plan/' . $new_resource_id
+                'resources/room_planning/semester_plan/' . $new_resource_id,
+                ['semester_id' => $this->semester->id]
             );
         }
 
@@ -490,18 +507,14 @@ class Resources_RoomPlanningController extends AuthenticatedController
                 $this->resource->getFullName()
             )
         );
-        $this->current_semester_id = Request::get('semester_id');
-        if ($this->current_semester_id) {
-            URLHelper::addLinkParam('semester_id', $this->semester_id);
-        } else {
-            $this->current_semester_id = Semester::findCurrent()->id;
-        }
+
         if (Request::isDialog()) {
             $this->dialog_semesters = array_reverse(Semester::getAll());
             $this->plan_link        = URLHelper::getLink(
                 'dispatch.php/resources/room_planning/semester_plan/' . $this->resource->id,
                 [
-                    'allday' => Request::get('allday', false)
+                    'allday' => Request::get('allday', false),
+                    'semester_id' => $this->semester->id
                 ]
             );
         }
@@ -558,17 +571,6 @@ class Resources_RoomPlanningController extends AuthenticatedController
         //Build sidebar:
         $sidebar = Sidebar::get();
 
-        $this->semester = Semester::findCurrent();
-        //For the semester selector:
-        if (Request::submitted('semester_id')) {
-            $this->semester = Semester::find(Request::get('semester_id'));
-            if (!$this->semester) {
-                PageLayout::postError(
-                    _('Das ausgewählte Semester wurde nicht in der Datenbank gefunden!')
-                );
-                return;
-            }
-        }
 
         $this->fullcalendar_studip_urls = [];
         if ($this->user_has_booking_permissions) {
@@ -581,7 +583,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
             if ($this->rooms) {
                 $room_select = new SelectWidget(
                     _('Anderen Raum wählen'),
-                    '',
+                    URLHelper::getURL('', ['semester_id' => $this->semester->id]),
                     'new_resource_id'
                 );
                 $options     = [];
@@ -591,7 +593,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
                 $room_select->setOptions($options, $this->resource->id);
                 $sidebar->addWidget($room_select);
             }
-            if ($this->resource->userHasPermission($current_user, 'user')) {
+            if ($this->resource->userHasPermission($current_user)) {
                 $views = new ViewsWidget();
                 $views->setTitle(_('Zeitfenster'));
                 $views->addLink(
@@ -599,7 +601,8 @@ class Resources_RoomPlanningController extends AuthenticatedController
                     URLHelper::getURL(
                         'dispatch.php/resources/room_planning/semester_plan/' . $this->resource->id,
                         [
-                            'allday' => null
+                            'allday' => null,
+                            'semester_id' => $this->semester->id
                         ]
                     ),
                     null,
@@ -612,6 +615,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
                         'dispatch.php/resources/room_planning/semester_plan/' . $this->resource->id,
                         [
                             'allday' => true,
+                            'semester_id' => $this->semester->id
                         ]
                     ),
                     null,
@@ -662,6 +666,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
                     'resources/room_planning/semester_plan/' . $this->resource->id,
                     [
                         'display_single_bookings' => '1',
+                        'semester_id' => $this->semester->id
 
                     ]
                 ),
@@ -669,6 +674,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
                     'resources/room_planning/semester_plan/' . $this->resource->id,
                     [
                         'display_single_bookings' => null,
+                        'semester_id' => $this->semester->id
                     ]
                 ),
                 []
@@ -680,7 +686,8 @@ class Resources_RoomPlanningController extends AuthenticatedController
             URLHelper::getURL(
                 'dispatch.php/resources/room_planning/semester_plan/' . $this->resource->id,
                 [
-                    'allday' => Request::get('allday', false)
+                    'allday' => Request::get('allday', false),
+                    'semester_id' => $this->semester->id
                 ]
             )
         );
@@ -700,7 +707,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
             _('Anderen Raum wählen'),
             URLHelper::getURL(
                 'dispatch.php/resources/room_planning/semester_plan',
-                [],
+                ['semester_id' => $this->semester->id],
                 true
             ),
             Icon::create('refresh')
diff --git a/app/views/resources/room_planning/semester_plan.php b/app/views/resources/room_planning/semester_plan.php
index 773191e535e..34e8f9d5d91 100644
--- a/app/views/resources/room_planning/semester_plan.php
+++ b/app/views/resources/room_planning/semester_plan.php
@@ -24,7 +24,7 @@
                                 <? foreach ($dialog_semesters as $sem) : ?>
                                     <option value="<?= htmlReady($sem->id) ?>"
                                             title="<?= htmlReady($sem->name) ?>"
-                                            <?= ($current_semester_id == $sem->id)
+                                            <?= ($semester->id == $sem->id)
                                               ? 'selected="selected"' : '' ?>>
                                         <?= htmlReady($sem->name) ?>
                                     </option>
@@ -96,10 +96,10 @@
                 'right' => ''
             ],
             'defaultView' =>
-                in_array(Request::get("defaultView"), ['dayGridMonth','timeGridWeek','timeGridDay'])
-                ? Request::get("defaultView")
+                in_array(Request::get('defaultView'), ['dayGridMonth','timeGridWeek','timeGridDay'])
+                ? Request::get('defaultView')
                 : 'timeGridWeek',
-            'defaultDate' => ((Request::get("semester_timerange") == 'fullsem') ? date('Y-m-d',$semester->beginn) : date('Y-m-d',$semester->vorles_beginn)),
+            'defaultDate' => ((Request::get('semester_timerange') === 'fullsem') ? date('Y-m-d', $semester->beginn) : date('Y-m-d', $semester->vorles_beginn)),
             'eventSources' => [
                 [
                     'url' => URLHelper::getURL(
@@ -112,7 +112,7 @@
                     'extraParams' => [
                         'booking_types' => [0,1,2],
                         'semester_id' => $semester->id,
-                        'semester_timerange' => Request::get("semester_timerange", 'vorles'),
+                        'semester_timerange' => Request::get('semester_timerange', 'vorles'),
                         'display_requests' => 1,
                         'display_all_requests' => $display_all_requests ? 1 : 0
                     ]
-- 
GitLab