From feb28852d82475ebcd0573807e5d68481d0fe5b8 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Fri, 2 Feb 2024 07:38:43 +0000
Subject: [PATCH] fix #3437

Closes #3437

Merge request studip/studip!2464
---
 app/controllers/course/courseware.php | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/app/controllers/course/courseware.php b/app/controllers/course/courseware.php
index c1421f486d2..6297d50da56 100644
--- a/app/controllers/course/courseware.php
+++ b/app/controllers/course/courseware.php
@@ -64,10 +64,14 @@ class Course_CoursewareController extends CoursewareController
         $this->user_id = $user->id;
         /** @var array<mixed> $last */
         $last = UserConfig::get($this->user_id)->getValue('COURSEWARE_LAST_ELEMENT');
+        $lastStructuralElement = \Courseware\StructuralElement::findOneById($last);
 
         if ($unit_id === null) {
-            $this->redirectToFirstUnit('course', Context::getId(), $last);
-
+            if ($lastStructuralElement->canVisit($user)) {
+                $this->redirectToFirstUnit('course', Context::getId(), $last);
+            } else {
+                $this->redirectToFirstUnit('course', Context::getId(), []);
+            }
             return;
         }
 
@@ -75,7 +79,12 @@ class Course_CoursewareController extends CoursewareController
         $this->unit_id = null;
         $unit = Unit::find($unit_id);
         if (isset($unit)) {
-            $this->setEntryElement('course', $unit, $last, Context::getId());
+            if ($lastStructuralElement->canVisit($user)) {
+                $this->setEntryElement('course', $unit, $last, Context::getId());
+            } else {
+                $rootElement = [Context::getId() => $unit->structural_element->id];
+                $this->setEntryElement('course', $unit, $rootElement, Context::getId());
+            }
         }
     }
 
-- 
GitLab