From bdd7f99a7cccd11899bdf9ee3ed4328496e66291 Mon Sep 17 00:00:00 2001
From: Rasmus Fuhse <fuhse@data-quest.de>
Date: Wed, 11 May 2022 09:57:35 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20"Darstellungsfilter=20im=20Adminberei?=
 =?UTF-8?q?ch=20f=C3=BCr=20Veranstaltungen=20um=20Einrichtung=20erweitern"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #695

Merge request studip/studip!358
---
 app/controllers/admin/courses.php       |  7 +++++++
 app/views/admin/courses/_course.php     |  5 +++++
 app/views/admin/courses/courses.php     | 21 ++++++++++++++++-----
 lib/classes/AdminCourseFilter.class.php |  2 +-
 4 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php
index 3a7812675a1..b0bf9cd8cd4 100644
--- a/app/controllers/admin/courses.php
+++ b/app/controllers/admin/courses.php
@@ -544,6 +544,10 @@ class Admin_CoursesController extends AuthenticatedController
                     $row['semester'] = $course->semester_text;
                 }
 
+                if (in_array('institute', $filter_config)) {
+                    $row['institute'] = $course->home_institut ? $course->home_institut['name'] : $course['institute'];
+                }
+
                 foreach (PluginManager::getInstance()->getPlugins('AdminCourseContents') as $plugin) {
                     foreach ($plugin->adminAvailableContents() as $index => $label) {
                         if (in_array($plugin->getPluginId() . "_" . $index, $filter_config)) {
@@ -1097,6 +1101,7 @@ class Admin_CoursesController extends AuthenticatedController
             'type'          => _('Veranstaltungstyp'),
             'room_time'     => _('Raum/Zeit'),
             'semester'      => _('Semester'),
+            'institute'     => _('Einrichtung'),
             'requests'      => _('Raumanfragen'),
             'teachers'      => _('Lehrende'),
             'members'       => _('Teilnehmende'),
@@ -1217,6 +1222,8 @@ class Admin_CoursesController extends AuthenticatedController
         }
         if ($params['sortby'] === "status") {
             $filter->orderBy(sprintf('sem_classes.name %s, sem_types.name %s, VeranstaltungsNummer', $params['sortFlag'], $params['sortFlag'], $params['sortFlag']), $params['sortFlag']);
+        } elseif ($params['sortby'] === 'institute') {
+            $filter->orderBy('Institute.Name', $params['sortFlag']);
         } elseif ($params['sortby']) {
             $filter->orderBy($params['sortby'], $params['sortFlag']);
         }
diff --git a/app/views/admin/courses/_course.php b/app/views/admin/courses/_course.php
index a0fab915688..9632aaa98ff 100644
--- a/app/views/admin/courses/_course.php
+++ b/app/views/admin/courses/_course.php
@@ -89,6 +89,11 @@ if (!$values['parent_course'] || !in_array($values['parent_course'], array_keys(
                 <?= htmlReady($course->semester_text) ?>
             </td>
         <? endif?>
+        <? if (in_array('institute', $view_filter)) : ?>
+            <td>
+                <?= htmlReady($course->home_institut ? $course->home_institut['name'] : $course['institute']) ?>
+            </td>
+        <? endif?>
         <? if (in_array('requests', $view_filter)) : ?>
             <td style="text-align: center;">
                 <a title="<?=_('Raumanfragen')?>" href="<?= URLHelper::getLink('dispatch.php/course/room_requests', ['cid' => $semid])?>">
diff --git a/app/views/admin/courses/courses.php b/app/views/admin/courses/courses.php
index ca851d0c2f5..fab169db660 100644
--- a/app/views/admin/courses/courses.php
+++ b/app/views/admin/courses/courses.php
@@ -22,11 +22,15 @@
         <? $colspan++ ?>
         <col width="30%">
     <? endif ?>
-    <? if (in_array('semester', $view_filter)) : ?>
-        <? $colspan++ ?>
-        <col width="10%">
-    <? endif ?>
-    <? if (in_array('requests', $view_filter)) : ?>
+        <? if (in_array('semester', $view_filter)) : ?>
+            <? $colspan++ ?>
+            <col width="10%">
+        <? endif ?>
+        <? if (in_array('institute', $view_filter)) : ?>
+            <? $colspan++ ?>
+            <col width="10%">
+        <? endif ?>
+        <? if (in_array('requests', $view_filter)) : ?>
         <? $colspan++ ?>
         <col width="5%">
     <? endif ?>
@@ -125,6 +129,13 @@
                 </a>
             </th>
         <? endif ?>
+        <? if (in_array('institute', $view_filter)) : ?>
+            <th <?= ($sortby == 'institute') ? sprintf('class="sort%s"', mb_strtolower($sortFlag)) : '' ?>>
+                <a href="<?= URLHelper::getLink('', ['sortby'   => 'institute', 'sortFlag' => mb_strtolower($sortFlag)]) ?>">
+                    <?= _('Einrichtung') ?>
+                </a>
+            </th>
+        <? endif ?>
         <? if (in_array('requests', $view_filter)) : ?>
             <th <?= ($sortby == 'requests') ? sprintf('class="sort%s"', mb_strtolower($sortFlag)) : '' ?>>
                 <a href="<?=
diff --git a/lib/classes/AdminCourseFilter.class.php b/lib/classes/AdminCourseFilter.class.php
index 6fa47242e98..cd9bfacfe27 100644
--- a/lib/classes/AdminCourseFilter.class.php
+++ b/lib/classes/AdminCourseFilter.class.php
@@ -323,7 +323,7 @@ class AdminCourseFilter
         if (!in_array($flag, words('ASC DESC'))) {
             throw new Exception("Sortierreihenfolge undefiniert.");
         }
-        if (in_array($attribute, words('VeranstaltungsNummer Name status teilnehmer waiting prelim requests completion start_time'))) {
+        if (in_array($attribute, words('VeranstaltungsNummer Name status teilnehmer waiting prelim requests completion start_time Institute.Name'))) {
             $this->settings['query']['orderby'] = $attribute . ' ' . $flag;
         }
         return $this;
-- 
GitLab