From 83773002244ced4b3082570175a68349baa7e28a Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Fri, 19 Apr 2024 13:17:59 +0000
Subject: [PATCH] consistently uses CourseManagementSelectWidget on all sites
 of the course management, fixes #4030

Closes #4030

Merge request studip/studip!2887
---
 app/controllers/admin/additional.php   |  2 ++
 app/controllers/avatar.php             |  6 ++++++
 app/controllers/course/grouping.php    |  5 +++++
 app/controllers/course/lvgselector.php |  5 +++++
 app/controllers/course/timesrooms.php  | 19 +++----------------
 app/controllers/questionnaire.php      |  9 +++++++++
 public/admin_evaluation.php            |  7 +++++++
 7 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/app/controllers/admin/additional.php b/app/controllers/admin/additional.php
index a98da200483..6f8f08c5cef 100644
--- a/app/controllers/admin/additional.php
+++ b/app/controllers/admin/additional.php
@@ -30,6 +30,8 @@ class Admin_AdditionalController extends AuthenticatedController
             throw new AccessDeniedException(_("Sie haben keine Berechtigung diese " .
                     "Veranstaltung zu verändern."));
         }
+
+        Sidebar::get()->addWidget(new CourseManagementSelectWidget());
     }
 
     /**
diff --git a/app/controllers/avatar.php b/app/controllers/avatar.php
index c549cf09759..aafbb986cd1 100644
--- a/app/controllers/avatar.php
+++ b/app/controllers/avatar.php
@@ -62,8 +62,14 @@ class AvatarController extends AuthenticatedController
             Navigation::activateItem('/admin/institute/details');
         } else {
             Navigation::activateItem('/course/admin/avatar');
+
+            if ($GLOBALS['perm']->have_studip_perm('admin', $id)) {
+                $widget = new CourseManagementSelectWidget();
+                Sidebar::get()->addWidget($widget);
+            }
         }
 
+
         $avatar = $class::getAvatar($id);
         $this->avatar = $avatar->getURL($class::NORMAL);
         $this->customized = $avatar->is_customized();
diff --git a/app/controllers/course/grouping.php b/app/controllers/course/grouping.php
index 4f35b53452d..1729d995292 100644
--- a/app/controllers/course/grouping.php
+++ b/app/controllers/course/grouping.php
@@ -36,6 +36,11 @@ class Course_GroupingController extends AuthenticatedController
         if (!$GLOBALS['perm']->have_studip_perm('tutor', $this->course->id)) {
             throw new AccessDeniedException(_('Sie haben leider nicht die notwendige Berechtigung für diese Aktion.'));
         }
+
+        if ($GLOBALS['perm']->have_studip_perm('admin', $this->course_id)) {
+            $widget = new CourseManagementSelectWidget();
+            Sidebar::get()->addWidget($widget);
+        }
     }
 
     /**
diff --git a/app/controllers/course/lvgselector.php b/app/controllers/course/lvgselector.php
index 3542a114320..171f3d52422 100644
--- a/app/controllers/course/lvgselector.php
+++ b/app/controllers/course/lvgselector.php
@@ -37,6 +37,11 @@ class Course_LvgselectorController extends AuthenticatedController
         $widget = new HelpbarWidget();
         $widget->addElement(new WidgetElement(_('Auf dieser Seite kann die Veranstaltung ausgewählten Lehrveranstaltungsgruppen zugeordnet werden.')));
         Helpbar::get()->addWidget($widget);
+
+        if ($GLOBALS['perm']->have_studip_perm('admin', $this->course_id)) {
+            $widget = new CourseManagementSelectWidget();
+            Sidebar::get()->addWidget($widget);
+        }
     }
 
     /**
diff --git a/app/controllers/course/timesrooms.php b/app/controllers/course/timesrooms.php
index 41a78a819bf..1f0ab17b532 100644
--- a/app/controllers/course/timesrooms.php
+++ b/app/controllers/course/timesrooms.php
@@ -1485,23 +1485,10 @@ class Course_TimesroomsController extends AuthenticatedController
         }
         Sidebar::Get()->addWidget($widget);
 
-        if ($GLOBALS['perm']->have_perm('admin')) {
-            $list = new SelectWidget(
-                _('Veranstaltungen'),
-                $this->indexURL(),
-                'cid'
-            );
 
-            foreach (AdminCourseFilter::get()->getCoursesForAdminWidget() as $seminar) {
-                $list->addElement(new SelectElement(
-                    $seminar['Seminar_id'],
-                    $seminar['Name'],
-                    $seminar['Seminar_id'] === Context::getId(),
-                    $seminar['VeranstaltungsNummer'] . ' ' . $seminar['Name']
-                ));
-            }
-            $list->size = 8;
-            Sidebar::Get()->addWidget($list);
+        if ($GLOBALS['perm']->have_studip_perm('admin', $this->course_id)) {
+            $widget = new CourseManagementSelectWidget();
+            Sidebar::get()->addWidget($widget);
         }
     }
 
diff --git a/app/controllers/questionnaire.php b/app/controllers/questionnaire.php
index d0766ed132d..2da457ce624 100644
--- a/app/controllers/questionnaire.php
+++ b/app/controllers/questionnaire.php
@@ -52,7 +52,16 @@ class QuestionnaireController extends AuthenticatedController
         if (!$GLOBALS['perm']->have_studip_perm("tutor", $this->range_id)) {
             throw new AccessDeniedException("Only for logged in users.");
         }
+
         Navigation::activateItem("/course/admin/questionnaires");
+        if ($GLOBALS['perm']->have_studip_perm('admin', $this->course_id)) {
+            // Ensure the select widget is added last
+            NotificationCenter::on('SidebarWillRender', function () {
+                $widget = new CourseManagementSelectWidget();
+                Sidebar::get()->addWidget($widget);
+            });
+        }
+
         $this->statusgruppen = Statusgruppen::findByRange_id($this->range_id);
         $this->questionnaires = Questionnaire::findBySQL(
             "INNER JOIN questionnaire_assignments USING (questionnaire_id) WHERE (questionnaire_assignments.range_id = ? AND questionnaire_assignments.range_type = ?) OR (questionnaire_assignments.range_id IN (?) AND questionnaire_assignments.range_type = 'statusgruppe') ORDER BY questionnaires.chdate DESC",
diff --git a/public/admin_evaluation.php b/public/admin_evaluation.php
index f702173df54..bee8ccece17 100644
--- a/public/admin_evaluation.php
+++ b/public/admin_evaluation.php
@@ -66,6 +66,13 @@ if ($view === 'eval_inst') {
     require_once 'lib/admin_search.inc.php';
 } else if (Context::getId() && $view == "eval_sem") {
     Navigation::activateItem('/course/admin/evaluation');
+    if ($GLOBALS['perm']->have_studip_perm('admin', Context::getId())) {
+        // Ensure the select widget is added last
+        NotificationCenter::on('SidebarWillRender', function () {
+            $widget = new CourseManagementSelectWidget();
+            Sidebar::get()->addWidget($widget);
+        });
+    }
 } else {
     Navigation::activateItem('/contents/evaluation');
 }
-- 
GitLab