From a756b09921d5f21ed4e8d90ecd0f7eb879d591bd Mon Sep 17 00:00:00 2001
From: Rasmus Fuhse <fuhse@data-quest.de>
Date: Thu, 2 May 2024 09:49:31 +0000
Subject: [PATCH] Resolve "Verwaltung von Veranstaltungen: Lehrendenfilter wird
 angewendet, obwohl das nicht angezeigt wird"

Closes #4053

Merge request studip/studip!2946
---
 app/controllers/admin/courses.php | 34 +++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php
index d0e2d5331a1..5ae810ddada 100644
--- a/app/controllers/admin/courses.php
+++ b/app/controllers/admin/courses.php
@@ -535,12 +535,42 @@ class Admin_CoursesController extends AuthenticatedController
             if (isset($filters[$key])) {
                 $config->store($field, $filters[$key]);
             }
+            unset($filters[$key]);
+        }
+
+        if ($config->ADMIN_COURSES_TEACHERFILTER) {
             if (!$config->MY_INSTITUTES_DEFAULT) {
                 $config->delete('ADMIN_COURSES_TEACHERFILTER');
+            } else {
+                $exists = InstituteMember::countBySQL("INNER JOIN `auth_user_md5` USING (`user_id`) WHERE `user_inst`.`user_id` = :user_id AND `user_inst`.`Institut_id` = :institut_id AND `auth_user_md5`.`perms` = 'dozent' ", [
+                    'user_id' => $config->ADMIN_COURSES_TEACHERFILTER,
+                    'institut_id' => $config->MY_INSTITUTES_DEFAULT
+                ]) > 0;
+                if (!$exists) {
+                    $config->delete('ADMIN_COURSES_TEACHERFILTER');
+                }
+            }
+        }
+        if ($config->MY_COURSES_SELECTED_STGTEIL) {
+            if (!$config->MY_INSTITUTES_DEFAULT) {
                 $config->delete('MY_COURSES_SELECTED_STGTEIL');
+            } else {
+                $statement = DBManager::get()->prepare("
+                    SELECT 1
+                    FROM `mvv_stg_stgteil`
+                        INNER JOIN `mvv_studiengang` ON (`mvv_stg_stgteil`.`studiengang_id` = `mvv_studiengang`.`studiengang_id`)
+                    WHERE `mvv_studiengang`.`institut_id` = :institut_id
+                        AND `mvv_stg_stgteil`.`stgteil_id` = :stgteil_id
+                ");
+                $statement->execute([
+                    'institut_id' => $config->MY_INSTITUTES_DEFAULT,
+                    'stgteil_id' => $config->MY_COURSES_SELECTED_STGTEIL
+                ]);
+                $exists = (bool) $statement->fetch(PDO::FETCH_COLUMN);
+                if (!$exists) {
+                    $config->delete('MY_COURSES_SELECTED_STGTEIL');
+                }
             }
-
-            unset($filters[$key]);
         }
 
         // Datafield filters
-- 
GitLab