diff options
| author | Thomas Hackl <hackl@data-quest.de> | 2024-10-29 06:59:03 +0000 |
|---|---|---|
| committer | Thomas Hackl <hackl@data-quest.de> | 2024-10-29 06:59:03 +0000 |
| commit | 541088347bf3c9ff69ec61466091e9997c6dcb85 (patch) | |
| tree | f0ae8a3045a99110d15a350101f7067d500e2902 /lib/classes/StudipTreeNodeCourseTrait.php | |
| parent | a838d4f6a962c20cd4ed812223062e02a3f49316 (diff) | |
Resolve "Veranstaltungsverzeichnis/Einrichtungsverzeichnis findet keine unbegrenzt laufenden Veranstaltungen mehr"
Closes #4752
Merge request studip/studip!3544
Diffstat (limited to 'lib/classes/StudipTreeNodeCourseTrait.php')
| -rw-r--r-- | lib/classes/StudipTreeNodeCourseTrait.php | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/classes/StudipTreeNodeCourseTrait.php b/lib/classes/StudipTreeNodeCourseTrait.php new file mode 100644 index 0000000..23ea992 --- /dev/null +++ b/lib/classes/StudipTreeNodeCourseTrait.php @@ -0,0 +1,62 @@ +<?php +trait StudipTreeNodeCourseTrait +{ + protected function getCoursesCondition( + string $alias, + string $semester_id, + $sem_class, + string $searchterm = '', + array $courses = [] + ): array { + $parameters = []; + $order_by = []; + + $condition = " JOIN `seminare` s ON (s.`Seminar_id` = {$alias}.`seminar_id`)"; + + if ($semester_id !== 'all') { + $condition .= " LEFT JOIN `semester_courses` sc ON ({$alias}.`seminar_id` = sc.`course_id`) + LEFT JOIN `semester_data` sd USING (`semester_id`) + WHERE (sc.`semester_id` = :semester OR sc.`semester_id` IS NULL)"; + $parameters[':semester'] = $semester_id; + $order_by[] = 'sd.`beginn`'; + } else { + $condition .= " WHERE 1"; + } + + if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) { + $condition .= " AND s.`visible` = 1"; + } + + if ($sem_class) { + $condition .= " AND s.`status` IN (:types)"; + $parameters['types'] = array_map( + function ($type) { + return $type['id']; + }, + array_filter( + SemType::getTypes(), + function ($t) use ($sem_class) { + return $t['class'] === $sem_class; + } + ) + ); + } + + if ($searchterm) { + $condition .= " AND s.`Name` LIKE :searchterm"; + $parameters['searchterm'] = '%' . trim($searchterm) . '%'; + } + + if ($courses) { + $condition .= " AND {$alias}.`seminar_id` IN (:courses)"; + $parameters['courses'] = $courses; + } + + if (Config::get()->IMPORTANT_SEMNUMBER) { + $order_by[] = 's.`VeranstaltungsNummer`'; + } + $order_by[] = 's.`Name`'; + + return [$condition, $parameters, $order_by]; + } +} |
