aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/StudipTreeNodeCourseTrait.php
diff options
context:
space:
mode:
authorThomas Hackl <hackl@data-quest.de>2024-10-29 06:59:03 +0000
committerThomas Hackl <hackl@data-quest.de>2024-10-29 06:59:03 +0000
commit541088347bf3c9ff69ec61466091e9997c6dcb85 (patch)
treef0ae8a3045a99110d15a350101f7067d500e2902 /lib/classes/StudipTreeNodeCourseTrait.php
parenta838d4f6a962c20cd4ed812223062e02a3f49316 (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.php62
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];
+ }
+}