aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/StudipTreeNodeCourseTrait.php
blob: 0d3b360b35f04e9b0031a461011bf61c1cac8067 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?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 !== 0) {
            $condition .= "  AND s.`status` IN (:types)";
            $semclass = new SemClass($sem_class);
            $parameters['types'] = array_keys($semclass->getSemTypes());
        }

        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];
    }
}