From b69e00eabf2b0965fd48f6806f8971c88ce46ac3 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Fri, 5 Apr 2024 07:32:39 +0000
Subject: [PATCH] fixes #3946

Closes #3946

Merge request studip/studip!2811
---
 app/controllers/my_courses.php |  2 +-
 lib/classes/MyRealmModel.php   |  2 +-
 lib/models/Course.class.php    | 22 +++++++++++++++-------
 3 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/app/controllers/my_courses.php b/app/controllers/my_courses.php
index c1374707a97..5e4c0e9348d 100644
--- a/app/controllers/my_courses.php
+++ b/app/controllers/my_courses.php
@@ -190,7 +190,7 @@ class MyCoursesController extends AuthenticatedController
                            LEFT JOIN `mvv_lvgruppe` AS ml ON (mls.`lvgruppe_id` = ml.`lvgruppe_id`)
                            LEFT JOIN `mvv_lvgruppe_modulteil` AS mlm on(mls.`lvgruppe_id` = mlm.`lvgruppe_id`)
                            LEFT JOIN `mvv_modulteil` AS mmt ON (mlm.`modulteil_id` = mmt.`modulteil_id`)
-                           LEFT JOIN `mvv_modul` AS mm ON (mmt.`modul_id` = mm.`modul_id`)";
+                           LEFT JOIN `mvv_modul` AS mm ON (mmt.`modul_id` = mm.`modul_id` AND mm.`stat` = 'genehmigt')";
 
         }
 
diff --git a/lib/classes/MyRealmModel.php b/lib/classes/MyRealmModel.php
index f968026a618..0279fe54ab8 100644
--- a/lib/classes/MyRealmModel.php
+++ b/lib/classes/MyRealmModel.php
@@ -788,7 +788,7 @@ class MyRealmModel
         foreach ($sem_courses as $sem_key => $collection) {
             $_tmp_courses[$sem_key] = [];
             foreach ($collection as $course) {
-                $modules = Course::getMVVModulesForCourseId($course['seminar_id']);
+                $modules = Course::getMVVModulesForCourseId($course['seminar_id'], ['genehmigt']);
                 if ($modules) {
                     $modules = array_map(function (Modul $module) {
                         return $module->getDisplayName();
diff --git a/lib/models/Course.class.php b/lib/models/Course.class.php
index 866b67de57d..d337063cac5 100644
--- a/lib/models/Course.class.php
+++ b/lib/models/Course.class.php
@@ -306,19 +306,27 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
     /**
      * Returns the associated mvv modules for a given course id.
      *
-     * @param string $course_id
+     * @param string     $course_id
+     * @param array|null $statusses Limit the results by a given module status
      * @return Modul[]
      */
-    public static function getMVVModulesForCourseId(string $course_id): array
+    public static function getMVVModulesForCourseId(string $course_id, ?array $statusses = null): array
     {
         $query = "SELECT mvv_modul.*
                   FROM mvv_lvgruppe_seminar
-                  JOIN `mvv_lvgruppe` on(`mvv_lvgruppe_seminar`.`lvgruppe_id` = `mvv_lvgruppe`.`lvgruppe_id`)
-                  JOIN `mvv_lvgruppe_modulteil` on(`mvv_lvgruppe_seminar`.`lvgruppe_id` = `mvv_lvgruppe_modulteil`.`lvgruppe_id`)
-                  JOIN `mvv_modulteil` on(`mvv_lvgruppe_modulteil`.`modulteil_id` = `mvv_modulteil`.`modulteil_id`)
-                  JOIN `mvv_modul` on(`mvv_modulteil`.`modul_id` = `mvv_modul`.`modul_id`)
+                  JOIN `mvv_lvgruppe` ON (`mvv_lvgruppe_seminar`.`lvgruppe_id` = `mvv_lvgruppe`.`lvgruppe_id`)
+                  JOIN `mvv_lvgruppe_modulteil` ON (`mvv_lvgruppe_seminar`.`lvgruppe_id` = `mvv_lvgruppe_modulteil`.`lvgruppe_id`)
+                  JOIN `mvv_modulteil` ON (`mvv_lvgruppe_modulteil`.`modulteil_id` = `mvv_modulteil`.`modulteil_id`)
+                  JOIN `mvv_modul` ON (`mvv_modulteil`.`modul_id` = `mvv_modul`.`modul_id`)
                   WHERE seminar_id = ?";
-        return DBManager::get()->fetchAll($query, [$course_id], function ($row) {
+        $parameters = [$course_id];
+
+        if ($statusses !== null) {
+            $query .= ' AND `mvv_modul`.`stat` IN (?)';
+            $parameters[] = $statusses;
+        }
+
+        return DBManager::get()->fetchAll($query, $parameters, function ($row) {
             return Modul::buildExisting($row);
         });
     }
-- 
GitLab