From 39ab82b14435d17d56eba145ce7db3d9b7ba8552 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 26 Sep 2024 14:57:23 +0000
Subject: [PATCH] fix access to dbview by replacing it with the same method
 that retrieves the courses anywhere else on my courses, fixes #4638

Closes #4638

Merge request studip/studip!3453
---
 app/controllers/my_courses.php  | 84 ++++++++-------------------------
 app/views/my_courses/groups.php |  2 +-
 2 files changed, 21 insertions(+), 65 deletions(-)

diff --git a/app/controllers/my_courses.php b/app/controllers/my_courses.php
index b3677aed330..c3a3c032d41 100644
--- a/app/controllers/my_courses.php
+++ b/app/controllers/my_courses.php
@@ -174,71 +174,27 @@ class MyCoursesController extends AuthenticatedController
 
         $group_field = $this->getGroupField();
 
-        $groups     = [];
-        $add_fields = '';
-        $add_query  = '';
-
-        if ($group_field === 'sem_tree_id') {
-            $add_fields = ', sem_tree_id';
-            $add_query  = "LEFT JOIN seminar_sem_tree sst ON (sst.seminar_id=seminare.Seminar_id)";
-        } elseif ($group_field === 'dozent_id') {
-            $add_fields = ', su1.user_id as dozent_id';
-            $add_query  = "LEFT JOIN seminar_user as su1 ON (su1.seminar_id=seminare.Seminar_id AND su1.status='dozent')";
-        } elseif ($group_field === 'mvv') {
-            $add_fields = ', mm.`modul_id` AS mvv';
-            $add_query  = "LEFT JOIN `mvv_lvgruppe_seminar` AS mls ON (mls.`seminar_id` = seminare.`Seminar_id`)
-                           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` AND mm.`stat` = 'genehmigt')";
-
-        }
-
-        $dbv = DbView::getView('sem_tree');
-
-        $query = "SELECT seminare.VeranstaltungsNummer AS sem_nr, seminare.Name, seminare.Seminar_id,
-                         seminare.status AS sem_status, seminar_user.gruppe, seminare.visible,
-                         {$dbv->sem_number_sql} AS sem_number,
-                         {$dbv->sem_number_end_sql} AS sem_number_end {$add_fields}
-                  FROM seminar_user
-                  JOIN semester_data sd
-                  LEFT JOIN seminare USING (Seminar_id)
-                  {$add_query}
-                  WHERE seminar_user.user_id = ?";
-        if (Config::get()->MY_COURSES_ENABLE_STUDYGROUPS && !$studygroups) {
-            $studygroup_types = DBManager::get()->quote(studygroup_sem_types());
-            $query .= " AND seminare.status NOT IN ({$studygroup_types})";
-        } elseif ($studygroups) {
-            $studygroup_types = DBManager::get()->quote(studygroup_sem_types());
-            $query .= " AND seminare.status IN ({$studygroup_types})";
-        }
-
-        if (Config::get()->DEPUTIES_ENABLE) {
-            $query .= " UNION "
-                . Deputy::getMySeminarsQuery('gruppe', $dbv->sem_number_sql, $dbv->sem_number_end_sql, $add_fields, $add_query);
-        }
-        $query .= " ORDER BY sem_nr ASC";
+        $temp = MyRealmModel::getPreparedCourses('', [
+            'group_field'         => $group_field,
+            'order_by'            => null,
+            'order'               => 'asc',
+            'studygroups_enabled' => Config::get()->MY_COURSES_ENABLE_STUDYGROUPS,
+            'deputies_enabled'    => Config::get()->DEPUTIES_ENABLE,
+        ]);
 
-        $statement = DBManager::get()->prepare($query);
-        $statement->execute([$GLOBALS['user']->id]);
-        while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
-            $my_sem[$row['Seminar_id']] = [
-                'obj_type'       => 'sem',
-                'sem_nr'         => $row['sem_nr'],
-                'name'           => $row['Name'],
-                'visible'        => $row['visible'],
-                'gruppe'         => $row['gruppe'],
-                'sem_status'     => $row['sem_status'],
-                'sem_number'     => $row['sem_number'],
-                'sem_number_end' => $row['sem_number_end'],
-            ];
-            if ($group_field) {
-                fill_groups($groups, $row[$group_field], [
-                    'seminar_id' => $row['Seminar_id'],
-                    'sem_nr'     => $row['sem_nr'],
-                    'name'       => $row['Name'],
-                    'gruppe'     => $row['gruppe']
-                ]);
+        $groups = [];
+        $my_sem = [];
+        foreach ($temp as $courses) {
+            foreach ($courses as $course) {
+                $my_sem[$course['seminar_id']] = $course;
+                if ($group_field) {
+                    fill_groups($groups, $course[$group_field], [
+                        'seminar_id' => $course['seminar_id'],
+                        'sem_nr'     => $course['veranstaltungsnummer'],
+                        'name'       => $course['name'],
+                        'gruppe'     => $course['gruppe']
+                    ]);
+                }
             }
         }
 
diff --git a/app/views/my_courses/groups.php b/app/views/my_courses/groups.php
index fff9d63e945..689f51b9d96 100644
--- a/app/views/my_courses/groups.php
+++ b/app/views/my_courses/groups.php
@@ -48,7 +48,7 @@
                 <tr>
                     <td>
                         <a href="<?= URLHelper::getLink('seminar_main.php?auswahl=' . $member['seminar_id']) ?>">
-                            <?= htmlReady(Config::get()->IMPORTANT_SEMNUMBER ? $my_sem[$member['seminar_id']]['sem_nr'] : '') ?>
+                            <?= htmlReady(Config::get()->IMPORTANT_SEMNUMBER ? $my_sem[$member['seminar_id']]['veranstaltungsnummer'] : '') ?>
                             <?= htmlReady($my_sem[$member['seminar_id']]['name']) ?>
                         </a>
                         <? if (!$my_sem[$member['seminar_id']]['visible']): ?>
-- 
GitLab