From 7cd72d0cbef2f2549240ed34098e58d6e5e89acb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de>
Date: Mon, 6 Jan 2025 08:36:05 +0000
Subject: [PATCH] Resolve #5087 "Meine Veranstaltungen verlinkt noch auf
 seminar_main.php"

Closes #5087

Merge request studip/studip!3802
---
 app/controllers/course/go.php                |  4 +++-
 app/controllers/institute/overview.php       | 13 ++++++++-----
 resources/vue/components/MyCoursesTables.vue |  2 +-
 resources/vue/components/MyCoursesTiles.vue  |  2 +-
 resources/vue/mixins/MyCoursesMixin.js       |  2 +-
 5 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/app/controllers/course/go.php b/app/controllers/course/go.php
index 03ae1dfa7f6..400c44a4c84 100644
--- a/app/controllers/course/go.php
+++ b/app/controllers/course/go.php
@@ -50,7 +50,9 @@ class Course_GoController extends AuthenticatedController
             if (!is_internal_url($redirect_to)) {
                 throw new Exception('Invalid redirection');
             }
-
+            if (str_starts_with($redirect_to, '#')) {
+                $redirect_to = 'dispatch.php/course/go' . $redirect_to;
+            }
             $this->redirect(URLHelper::getURL($redirect_to, ['cid' => $course_id]));
             return;
         }
diff --git a/app/controllers/institute/overview.php b/app/controllers/institute/overview.php
index 3713dccb0b9..db831151187 100644
--- a/app/controllers/institute/overview.php
+++ b/app/controllers/institute/overview.php
@@ -16,17 +16,20 @@ class Institute_OverviewController extends AuthenticatedController
 {
     protected $allow_nobody = true;
 
-    function before_filter(&$action, &$args) {
-
+    public function __construct(\Trails\Dispatcher $dispatcher)
+    {
+        if (Request::option('auswahl')) {
+            Request::set('cid', Request::option('auswahl'));
+        }
         //Check if anonymous access is really allowed:
         $config = Config::get();
         if (($config->ENABLE_FREE_ACCESS && ($config->ENABLE_FREE_ACCESS == 'courses_only'))) {
             $this->allow_nobody = false;
         }
+        parent::__construct($dispatcher);
+    }
 
-        if (Request::option('auswahl')) {
-            Request::set('cid', Request::option('auswahl'));
-        }
+    public function before_filter(&$action, &$args) {
 
         parent::before_filter($action, $args);
 
diff --git a/resources/vue/components/MyCoursesTables.vue b/resources/vue/components/MyCoursesTables.vue
index 0bf9423553c..e3b70ea59fb 100644
--- a/resources/vue/components/MyCoursesTables.vue
+++ b/resources/vue/components/MyCoursesTables.vue
@@ -56,7 +56,7 @@
                         {{ course.number }}
                     </td>
                     <td :class="{'subcourse-indented': isChild(course)}">
-                        <a :href="urlFor('seminar_main.php', {to: course.id})">
+                        <a :href="urlFor('dispatch.php/course/go', {to: course.id})">
                             {{ getCourseName(course, getConfig('sem_number') && responsiveDisplay) }}
                             <span v-if="course.is_deputy">{{ $gettext('[Vertretung]') }}</span>
                         </a>
diff --git a/resources/vue/components/MyCoursesTiles.vue b/resources/vue/components/MyCoursesTiles.vue
index 81e0237249e..355d24c7d67 100644
--- a/resources/vue/components/MyCoursesTiles.vue
+++ b/resources/vue/components/MyCoursesTiles.vue
@@ -24,7 +24,7 @@
                                     ></studip-action-menu>
                                 </span>
 
-                                <a :href="urlFor('seminar_main.php', {to: course.id})" class="tiles-grid-element-header-content" :title="getCourseName(course, getConfig('sem_number'))">
+                                <a :href="urlFor('dispatch.php/course/go', {to: course.id})" class="tiles-grid-element-header-content" :title="getCourseName(course, getConfig('sem_number'))">
                                     <span :style="{backgroundImage: `url(${course.avatar})`}" class="tiles-grid-element-header-image"></span>
                                     <span class="tiled-grid-element-header-title">
                                         {{ getCourseName(course, getConfig('sem_number')) }}
diff --git a/resources/vue/mixins/MyCoursesMixin.js b/resources/vue/mixins/MyCoursesMixin.js
index 6b2270742d2..fa28388e638 100644
--- a/resources/vue/mixins/MyCoursesMixin.js
+++ b/resources/vue/mixins/MyCoursesMixin.js
@@ -141,7 +141,7 @@ export default {
                         result.icon.role = 'clickable';
                     }
 
-                    result.url = this.urlFor('seminar_main.php', {
+                    result.url = this.urlFor('dispatch.php/course/go', {
                         to: course.id,
                         redirect_to: result.url,
                     });
-- 
GitLab