diff --git a/lib/classes/searchtypes/NewsRangesSearch.php b/lib/classes/searchtypes/NewsRangesSearch.php index 927181e8719f28229f4829a7264e12c3c3e591ed..fc2fcbccee46bda59bc9eb8cdc32de6a5d79a3d0 100644 --- a/lib/classes/searchtypes/NewsRangesSearch.php +++ b/lib/classes/searchtypes/NewsRangesSearch.php @@ -29,27 +29,54 @@ class NewsRangesSearch extends SearchType $user = \User::findCurrent(); // Courses + $number_sql = Config::get()->IMPORTANT_SEMNUMBER ? "CONCAT(IFNULL(s.VeranstaltungsNummer, ''), ' '), " : ''; + $semester_sql = " CONCAT(' (',IFNULL(GROUP_CONCAT(DISTINCT semester_data.name ORDER BY semester_data.beginn SEPARATOR '-'),'" . _('unbegrenzt') . "'),')')"; + if ($GLOBALS['perm']->have_perm('root')) { - $sql_searches[] = "SELECT CONCAT(`Seminar_id`, '__seminar') AS `range_id`, `name` - FROM `seminare` - WHERE `name` LIKE :input"; + $sql_searches[] = "SELECT * + FROM ( + SELECT CONCAT(s.`Seminar_id`, '__seminar') AS `range_id`, + TRIM(CONCAT({$number_sql} s.`name`, {$semester_sql})) AS `name` + FROM `seminare` AS s + LEFT JOIN `semester_courses` AS sc ON s.`Seminar_id` = sc.`course_id` + LEFT JOIN `semester_data` USING (`semester_id`) + WHERE s.`name` LIKE :input + GROUP BY s.`Seminar_id` + ORDER BY s.`start_time` DESC + ) AS course_select"; } elseif ($GLOBALS['perm']->have_perm('admin')) { $sem_inst = Config::get()->ALLOW_ADMIN_RELATED_INST ? 'si' : 's'; - $sql_searches[] = "SELECT CONCAT(`Seminar_id`, '__seminar') AS `range_id`, `name` - FROM `seminare` AS s - JOIN `seminar_inst` si USING (Seminar_id) - WHERE {$sem_inst}.`institut_id` IN (:institutes) - AND `name` LIKE :input"; + $sql_searches[] = "SELECT * + FROM ( + SELECT CONCAT(s.`Seminar_id`, '__seminar') AS `range_id`, + TRIM(CONCAT({$number_sql} s.`name`, {$semester_sql})) AS `name` + FROM `seminare` AS s + JOIN `seminar_inst` si USING (Seminar_id) + LEFT JOIN `semester_courses` AS sc ON s.`Seminar_id` = sc.`course_id` + LEFT JOIN `semester_data` USING (`semester_id`) + WHERE {$sem_inst}.`institut_id` IN (:institutes) + AND `name` LIKE :input + GROUP BY s.`Seminar_id` + ORDER BY s.`start_time` DESC + ) AS course_select"; $parameters[':institutes'] = $this->getAdminInstitutes($user); } else { - $sql_searches[] = "SELECT CONCAT(`Seminar_id`, '__seminar') AS `range_id`, `name` - FROM `seminare` - JOIN `seminar_user` USING (`Seminar_id`) - WHERE `name` LIKE :input - AND `seminar_user`.`user_id` = :user_id - AND `seminar_user`.`status` IN ('tutor', 'dozent')"; + $sql_searches[] = "SELECT * + FROM ( + SELECT CONCAT(s.`Seminar_id`, '__seminar') AS `range_id`, + TRIM(CONCAT({$number_sql} s.`name`, {$semester_sql})) AS `name` + FROM `seminare` AS s + JOIN `seminar_user` USING (`Seminar_id`) AS su + LEFT JOIN `semester_courses` AS sc ON s.`Seminar_id` = sc.`course_id` + LEFT JOIN `semester_data` USING (`semester_id`) + WHERE s.`name` LIKE :input + AND su.`user_id` = :user_id + AND su.`status` IN ('tutor', 'dozent') + GROUP BY s.`Seminar_id` + ORDER BY s.`start_time` DESC + ) AS course_select "; $parameters[':user_id'] = $user->id; }