From 1667b30950710589d927cca0a1eab7a7ad6a7b9e Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+github@gmail.com>
Date: Thu, 8 Sep 2022 16:38:16 +0200
Subject: [PATCH] Revert "optimize performance of query from
 GlobalSearchCourses::getSQL(), re #1561"

This reverts commit 5761b25df3e673afb4012d7342ce3e3c25dc8c80.

re #1561
---
 .../globalsearch/GlobalSearchCourses.php      | 28 +++++++++----------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/lib/classes/globalsearch/GlobalSearchCourses.php b/lib/classes/globalsearch/GlobalSearchCourses.php
index a18775e422c..b4b9bccae1f 100644
--- a/lib/classes/globalsearch/GlobalSearchCourses.php
+++ b/lib/classes/globalsearch/GlobalSearchCourses.php
@@ -47,16 +47,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
         $search = str_replace(' ', '% ', $search);
         $query = DBManager::get()->quote("%{$search}%");
 
-        $language_name = 'courses.`Name`';
-        $language_join = '';
-        if ($_SESSION['_language'] !== Config::get()->DEFAULT_LANGUAGE) {
-            $language_name = 'IFNULL(`i18n`.`value`, courses.`Name`)';
-            $language_join = "LEFT JOIN `i18n`
-                                ON `i18n`.`object_id` = courses.`Seminar_id`
-                                  AND `i18n`.`table` = 'seminare'
-                                  AND `i18n`.`field` = 'name'
-                                  AND `lang` = " . DBManager::get()->quote($_SESSION['_language']);
-        }
+        $language = DBManager::get()->quote($_SESSION['_language']);
 
         // visibility
         if (!$GLOBALS['perm']->have_perm('admin')) {
@@ -96,18 +87,25 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
         }
 
         $sql = "SELECT SQL_CALC_FOUND_ROWS courses.`Seminar_id`, courses.`start_time`,
-                       {$language_name} AS `Name`,
+                       IFNULL(`i18n`.`value`, courses.`Name`) AS `Name`,
                        courses.`VeranstaltungsNummer`, courses.`status`
                 FROM `seminare` AS courses
-                {$language_join}
+                LEFT JOIN `i18n`
+                  ON `i18n`.`object_id` = courses.`Seminar_id`
+                      AND `i18n`.`table` = 'seminare'
+                      AND `i18n`.`field` = 'name'
+                      AND `lang` = {$language}
+                JOIN `sem_types` ON (courses.`status` = `sem_types`.`id`)
                 JOIN `seminar_user` u ON (u.`Seminar_id` = courses.`Seminar_id` AND u.`status` = 'dozent')
                 JOIN `auth_user_md5` a ON (a.`user_id` = u.`user_id`)
                 {$semester_join}
                 WHERE {$visibility}
                     (
-                        {$language_name} LIKE {$query}
+                        IFNULL(`i18n`.`value`, courses.`Name`) LIKE {$query}
                         OR courses.`VeranstaltungsNummer` LIKE {$query}
-                        OR CONCAT(a.`Nachname`, ', ', a.`Vorname`, ' ', a.`Nachname`) LIKE {$query}
+                        OR CONCAT_WS(' ', `sem_types`.`name`, IFNULL(`i18n`.`value`, courses.`Name`), `sem_types`.`name`) LIKE {$query}
+                        OR CONCAT_WS(', ', a.`Nachname`, a.`Vorname`) LIKE {$query}
+                        OR CONCAT_WS(' ', a.`Nachname`, a.`Vorname`, a.`Nachname`) LIKE {$query}
                     )
                 {$seminaruser}
                 {$institute_condition}
@@ -120,7 +118,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
             $sql .= ", courses.`VeranstaltungsNummer`";
         }
 
-        $sql .= ", {$language_name}";
+        $sql .= ", IFNULL(`i18n`.`value`, courses.`Name`)";
         $sql .= " LIMIT " . $limit;
 
         return $sql;
-- 
GitLab