aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/globalsearch/GlobalSearchCourses.php
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2022-09-09 07:34:18 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2022-09-09 07:34:18 +0000
commit219f631ee05aea4c3abcc93f624cec510b57435a (patch)
tree8028497c1fb21d7f5d7fa256f521960bc12a6be8 /lib/classes/globalsearch/GlobalSearchCourses.php
parent00e62584ae9b60c7646290d4481b71f42fce8d81 (diff)
optimize performance of query from GlobalSearchCourses::getSQL(), fixes #1561
Closes #1561 Merge request studip/studip!990
Diffstat (limited to 'lib/classes/globalsearch/GlobalSearchCourses.php')
-rw-r--r--lib/classes/globalsearch/GlobalSearchCourses.php28
1 files changed, 15 insertions, 13 deletions
diff --git a/lib/classes/globalsearch/GlobalSearchCourses.php b/lib/classes/globalsearch/GlobalSearchCourses.php
index b4b9bcc..a490b2e 100644
--- a/lib/classes/globalsearch/GlobalSearchCourses.php
+++ b/lib/classes/globalsearch/GlobalSearchCourses.php
@@ -47,7 +47,16 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
$search = str_replace(' ', '% ', $search);
$query = DBManager::get()->quote("%{$search}%");
- $language = DBManager::get()->quote($_SESSION['_language']);
+ $language_name = 'courses.`Name`';
+ $language_join = '';
+ if (I18N::isEnabled() && $_SESSION['_language'] !== I18NString::getDefaultLanguage()) {
+ $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']);
+ }
// visibility
if (!$GLOBALS['perm']->have_perm('admin')) {
@@ -87,25 +96,18 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
}
$sql = "SELECT SQL_CALC_FOUND_ROWS courses.`Seminar_id`, courses.`start_time`,
- IFNULL(`i18n`.`value`, courses.`Name`) AS `Name`,
+ {$language_name} AS `Name`,
courses.`VeranstaltungsNummer`, courses.`status`
FROM `seminare` AS courses
- 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`)
+ {$language_join}
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}
(
- IFNULL(`i18n`.`value`, courses.`Name`) LIKE {$query}
+ {$language_name} LIKE {$query}
OR courses.`VeranstaltungsNummer` 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}
+ OR CONCAT(a.`Nachname`, ', ', a.`Vorname`, ' ', a.`Nachname`) LIKE {$query}
)
{$seminaruser}
{$institute_condition}
@@ -118,7 +120,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
$sql .= ", courses.`VeranstaltungsNummer`";
}
- $sql .= ", IFNULL(`i18n`.`value`, courses.`Name`)";
+ $sql .= ", `Name`";
$sql .= " LIMIT " . $limit;
return $sql;