aboutsummaryrefslogtreecommitdiff
path: root/lib/classes
diff options
context:
space:
mode:
authorThomas Hackl <hackl@data-quest.de>2022-04-25 16:11:49 +0200
committerThomas Hackl <hackl@data-quest.de>2022-05-16 14:38:25 +0200
commitc2668bf721d22fe58663c8588b07f324b884bc5f (patch)
tree115fa9b797d767c539215f93e311cd4d85109a7a /lib/classes
parentef7233279bd8e88898a073efb9d8d15f29c1957a (diff)
restructure db query for all courses and corresponding listing
Diffstat (limited to 'lib/classes')
-rw-r--r--lib/classes/AutoInsert.class.php74
1 files changed, 49 insertions, 25 deletions
diff --git a/lib/classes/AutoInsert.class.php b/lib/classes/AutoInsert.class.php
index 4c6069d..c7bfed9 100644
--- a/lib/classes/AutoInsert.class.php
+++ b/lib/classes/AutoInsert.class.php
@@ -193,17 +193,17 @@ class AutoInsert
* @param string $seminar_id Id of the seminar
* @return bool Indicating whether the seminar already has an autoinsert record
*/
- public static function checkSeminar($seminar_id, $domain_id = false)
+ public static function checkSeminar($seminar_id, $range_id = false, $range_type = 'domain')
{
$cached = self::getSeminarCache();
if (!isset($cached[$seminar_id])) {
- $query = "SELECT domain_id, 1
+ $query = "SELECT range_id, 1
FROM auto_insert_sem
- WHERE seminar_id = ?";
+ WHERE seminar_id = ? AND range_type = ?";
$cached[$seminar_id] = DBManager::get()->fetchGroupedPairs(
$query,
- [$seminar_id],
+ [$seminar_id, $range_type],
function ($value) {
return (bool) $value;
}
@@ -222,13 +222,13 @@ class AutoInsert
* containing the status(ses) to enable for
* autoinsertion
*/
- public static function saveSeminar($seminar_id, $status, $domain_id)
+ public static function saveSeminar($seminar_id, $status, $range_id, $range_type = 'domain')
{
- $query = "INSERT INTO auto_insert_sem (seminar_id, status,domain_id) VALUES (?, ?,?)";
+ $query = "INSERT INTO auto_insert_sem (seminar_id, status, range_id, range_type) VALUES (?, ?, ?, ?)";
$statement = DBManager::get()->prepare($query);
foreach ((array)$status as $s) {
- $statement->execute([$seminar_id, $s, $domain_id]);
+ $statement->execute([$seminar_id, $s, $range_id, $range_type]);
}
}
@@ -279,26 +279,39 @@ class AutoInsert
$results = $statement->fetchAll(PDO::FETCH_COLUMN);
} else {
$results = [];
+
foreach (words('degree domain institute semester subject') as $type) {
- $query = "SELECT a.seminar_id, GROUP_CONCAT(a.status,IF(LENGTH(a.range_id)=0,':keine',CONCAT(':',a.range_id))) AS range_status, s.Name, s.Schreibzugriff, s.start_time ";
- $query .= "FROM auto_insert_sem a ";
- $query .= "JOIN seminare AS s USING (Seminar_id) WHERE a.`range_type` = :type ";
-
- $query .= "GROUP BY s.seminar_id ";
- $query .= "ORDER BY s.Name";
-
- $data = DBManager::get()->fetchAll($query, ['type' => $type]);
- if (count($data) > 0) {
- $results[$type] = [];
-
- foreach ($data as $index => $result) {
- $entries = explode(',', $result['range_status']);
- foreach ($entries as $entry) {
- $array = explode(':', $entry);
- $results[$type][$index]['status'][$array[1]][] = $array[0];
- }
- }
+ $select = "SELECT a.`seminar_id`, s.`Name`, a.`range_type`, a.`range_id`,
+ GROUP_CONCAT(a.`status`) AS status, s.`Schreibzugriff`, s.`start_time`";
+ $from = " FROM `auto_insert_sem` a ";
+ $join = [
+ "JOIN `seminare` s ON (s.`Seminar_id` = a.`seminar_id`)"
+ ];
+ $where = " WHERE a.`range_type` = :type ";
+ $order = "GROUP BY a.`range_type`, a.`range_id` ORDER BY s.`start_time` DESC, s.`Name`, range_name";
+
+ switch ($type) {
+ case 'domain':
+ $select .= ", IF(LENGTH(`range_id`) = 0, 'keine', a.`range_id`) AS range_name";
+ break;
+ case 'institute':
+ $select .= ", i.`Name` AS range_name ";
+ $join[] = "JOIN `Institute` i ON (i.`Institut_id` = a.`range_id`)";
+ break;
+ case 'degree':
+ $select .= ", d.`name` AS range_name";
+ $join[] = "JOIN `abschluss` d ON (d.`abschluss_id` = a.`range_id`)";
+ break;
+ case 'subject':
+ $select .= ", f.`name` AS range_name";
+ $join[] = "JOIN `fach` f ON (f.`fach_id` = a.`range_id`)";
+ break;
+ case 'semester':
+ $select .= ", a.`range_id` AS range_name";
}
+
+ $query = $select.$from.implode(' ', $join).$where.$order;
+ $results += array_merge($results, DBManager::get()->fetchAll($query, ['type' => $type]));
}
}
@@ -369,4 +382,15 @@ class AutoInsert
}
return self::$seminar_cache;
}
+
+ public static function getRangeTypes()
+ {
+ return [
+ 'degree' => _('Abschluss'),
+ 'domain' => _('Domäne'),
+ 'institute' => _('Einrichtung'),
+ 'semester' => _('Fachsemester'),
+ 'subject' => _('Fach')
+ ];
+ }
}