From 2eef63f1d37ce5621fb3b8078b5d20c2b24dc993 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Mon, 10 Oct 2022 14:08:40 +0000
Subject: [PATCH] make semester and semtype condition optional, fixes #145

Closes #145

Merge request studip/studip!1063
---
 app/controllers/course/members.php                |  9 +++------
 app/controllers/wiki.php                          |  8 --------
 lib/classes/searchtypes/MyCoursesSearch.class.php | 10 ++++++++--
 3 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php
index bad1d8ebbdd..1fe9f57e70a 100644
--- a/app/controllers/course/members.php
+++ b/app/controllers/course/members.php
@@ -451,26 +451,23 @@ class Course_MembersController extends AuthenticatedController
             global $perm;
             if ($perm->have_perm('root')) {
                 $parameters = [
-                    'semtypes' => studygroup_sem_types() ?: [],
+                    'semtypes' => studygroup_sem_types() ?: null,
                     'exclude' => [Context::getId()],
-                    'semesters' => array_map(function ($s) { return $s->semester_id; }, Semester::getAll())
                 ];
             } else if ($perm->have_perm('admin')) {
                 $parameters = [
-                    'semtypes' => studygroup_sem_types() ?: [],
+                    'semtypes' => studygroup_sem_types() ?: null,
                     'institutes' => array_map(function ($i) {
                         return $i['Institut_id'];
                     }, Institute::getMyInstitutes()),
                     'exclude' => [Context::getId()],
-                    'semesters' => array_map(function ($s) { return $s->semester_id; }, Semester::getAll())
                 ];
 
             } else {
                 $parameters = [
                     'userid' => $GLOBALS['user']->id,
-                    'semtypes' => studygroup_sem_types() ?: [],
+                    'semtypes' => studygroup_sem_types() ?: null,
                     'exclude' => [Context::getId()],
-                    'semesters' => array_map(function ($s) { return $s->semester_id; }, Semester::getAll())
                 ];
             }
             $coursesearch = MyCoursesSearch::get('Seminar_id', $GLOBALS['perm']->get_perm(), $parameters);
diff --git a/app/controllers/wiki.php b/app/controllers/wiki.php
index 95e38465b99..50bed349c61 100644
--- a/app/controllers/wiki.php
+++ b/app/controllers/wiki.php
@@ -269,12 +269,6 @@ class WikiController extends AuthenticatedController
             );
         }
 
-        $all_semesters = Semester::getAll();
-        $all_semester_ids = [];
-        foreach ($all_semesters as $semester) {
-            $all_semester_ids[] = $semester->id;
-        }
-
         $this->course_search = new QuickSearch(
             'selected_course_id',
             new MyCoursesSearch(
@@ -282,9 +276,7 @@ class WikiController extends AuthenticatedController
                 $GLOBALS['perm']->get_perm(),
                 [
                     'userid'    => $GLOBALS['user']->id,
-                    'semtypes'  => [],
                     'exclude'   => [$course_id],
-                    'semesters' => $all_semester_ids,
                 ],
                 's.`Seminar_id` IN (
                     SELECT range_id FROM wiki
diff --git a/lib/classes/searchtypes/MyCoursesSearch.class.php b/lib/classes/searchtypes/MyCoursesSearch.class.php
index dad725c1413..64bee64cb7e 100644
--- a/lib/classes/searchtypes/MyCoursesSearch.class.php
+++ b/lib/classes/searchtypes/MyCoursesSearch.class.php
@@ -189,11 +189,17 @@ class MyCoursesSearch extends StandardSearch
     {
         $conditions = [
             '(s.`VeranstaltungsNummer` LIKE :input OR s.`Name` LIKE :input)',
-            's.`status` NOT IN (:semtypes)',
             's.`Seminar_id` NOT IN (:exclude)',
-            'semester_data.`semester_id` IN (:semesters)'
         ];
 
+        if (isset($this->parameters['semtypes'])) {
+            $conditions[] = 's.`status` NOT IN (:semtypes)';
+        }
+
+        if (isset($this->parameters['semesters'])) {
+            $conditions[] = 'semester_data.`semester_id` IN (:semesters)';
+        }
+
         if ($this->additional_sql_conditions) {
             $conditions[] = $this->additional_sql_conditions;
         }
-- 
GitLab