aboutsummaryrefslogtreecommitdiff
path: root/lib/modules
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2024-08-15 06:57:58 +0000
committerJan-Hendrik Willms <tleilax+github@gmail.com>2024-08-15 13:11:11 +0200
commit06564d7e43e54c7ec336ec5941167976b7d31484 (patch)
tree58632f834871887a4459c132df683b0504c4f382 /lib/modules
parent507a22586889f8684f831a964ee4ab182933ffcc (diff)
fix access to institute administration, fixes #4458
Closes #4458 Merge request studip/studip!3243
Diffstat (limited to 'lib/modules')
-rw-r--r--lib/modules/CoreAdmin.class.php215
1 files changed, 122 insertions, 93 deletions
diff --git a/lib/modules/CoreAdmin.class.php b/lib/modules/CoreAdmin.class.php
index 948809c..d0d2084 100644
--- a/lib/modules/CoreAdmin.class.php
+++ b/lib/modules/CoreAdmin.class.php
@@ -24,105 +24,118 @@ class CoreAdmin extends CorePlugin implements StudipModule
*/
public function getTabNavigation($course_id)
{
- if ($GLOBALS['perm']->have_studip_perm('tutor', $course_id)) {
- $navigation = new Navigation(_('Verwaltung'));
- $navigation->setImage(Icon::create('admin', Icon::ROLE_INFO_ALT));
- $navigation->setActiveImage(Icon::create('admin', Icon::ROLE_INFO));
-
- $main = new Navigation(_('Werkzeuge'), 'dispatch.php/course/contentmodules');
- $navigation->addSubNavigation('contentmodules', $main);
-
- if (!Context::isInstitute()) {
- $item = new Navigation(_('Grunddaten'), 'dispatch.php/course/basicdata/view/' . $course_id);
- $item->setImage(Icon::create('edit'));
- $item->setDescription(_('Bearbeiten der Grundeinstellungen dieser Veranstaltung.'));
- $navigation->addSubNavigation('details', $item);
-
- $item = new Navigation(_('Infobild'), 'dispatch.php/avatar/update/course/' . $course_id);
- $item->setImage(Icon::create('file-pic'));
- $item->setDescription(_('Infobild dieser Veranstaltung bearbeiten oder löschen.'));
- $navigation->addSubNavigation('avatar', $item);
-
- $item = new Navigation(_('Studienbereiche'), 'dispatch.php/course/study_areas/show/' . $course_id);
- $item->setImage(Icon::create('module'));
- $item->setDescription(_('Zuordnung dieser Veranstaltung zu Studienbereichen für die Darstellung im Verzeichnis aller Veranstaltungen.'));
- $navigation->addSubNavigation('study_areas', $item);
-
- $current_course = Course::find($course_id);
- if ($current_course && $current_course->getSemClass()->offsetGet('module')) {
- $item = new Navigation(_('LV-Gruppen'), 'dispatch.php/course/lvgselector/index/' . $course_id, ['list' => 'TRUE']);
- $item->setImage(Icon::create('learnmodule'));
- $item->setDescription(_('Zuordnung der Veranstaltung zu Lehrveranstaltungsgruppen um die Einordnung innerhalb des Modulverzeichnisses festzulegen.'));
- $navigation->addSubNavigation('lvgruppen', $item);
- }
-
- $item = new Navigation(_('Zeiten/Räume'), 'dispatch.php/course/timesrooms');
- $item->setImage(Icon::create('date'));
- $item->setDescription(_('Regelmäßige Veranstaltungszeiten, Einzeltermine und Ortsangaben ändern.'));
- $navigation->addSubNavigation('dates', $item);
-
- $item = new Navigation(_('Zugangsberechtigungen'), 'dispatch.php/course/admission');
- $item->setImage(Icon::create('lock-locked'));
- $item->setDescription(_('Zugangsbeschränkungen, Anmeldeverfahren oder einen Passwortschutz für diese Veranstaltung einrichten.'));
- $navigation->addSubNavigation('admission', $item);
-
- $item = new AutoNavigation(_('Zusatzangaben'), 'dispatch.php/admin/additional');
- $item->setImage(Icon::create('add'));
- $item->setDescription(_('Vorlagen zur Erhebung weiterer Angaben von Teilnehmenden auswählen.'));
- $navigation->addSubNavigation('additional_data', $item);
-
- } // endif modules only seminars
-
- if ($GLOBALS['perm']->have_studip_perm('tutor', $course_id)) {
- if (Config::get()->VOTE_ENABLE) {
- $item = new Navigation(_('Fragebögen'), 'dispatch.php/questionnaire/courseoverview');
- $item->setImage(Icon::create('vote'));
- $item->setDescription(_('Erstellen und bearbeiten von Fragebögen.'));
- $navigation->addSubNavigation('questionnaires', $item);
- }
- if (Config::get()->EVAL_ENABLE) {
- $item = new Navigation(_('Evaluationen'), 'admin_evaluation.php?view=eval_sem');
- $item->setImage(Icon::create('evaluation'));
- $item->setDescription(_('Richten Sie fragebogenbasierte Umfragen und Lehrevaluationen ein.'));
- $navigation->addSubNavigation('evaluation', $item);
- }
+ $range = RangeFactory::find($course_id);
+
+ // Given range is invalid, leave early
+ if (!$range) {
+ return [];
+ }
+
+ // Special case: Tutors of institutes may manage votes
+ if (
+ Config::get()->VOTE_ENABLE
+ && $range instanceof Institute
+ && !$range->isEditableByUser()
+ && Seminar_Perm::get()->have_studip_perm('tutor', $range->id)
+ ) {
+ $navigation = $this->getRootNavigation();
+ $this->addVoteNavigation($navigation);
+
+ return ['admin' => $navigation];
+ }
+
+ // User may not edit this range
+ if (!$range->isEditableByUser()) {
+ return [];
+ }
+
+ // Build regular admin navigation
+ $navigation = $this->getRootNavigation();
+
+ $main = new Navigation(_('Werkzeuge'), 'dispatch.php/course/contentmodules');
+ $navigation->addSubNavigation('contentmodules', $main);
+
+ if ($range instanceof Course) {
+ $item = new Navigation(_('Grunddaten'), 'dispatch.php/course/basicdata/view/' . $course_id);
+ $item->setImage(Icon::create('edit'));
+ $item->setDescription(_('Bearbeiten der Grundeinstellungen dieser Veranstaltung.'));
+ $navigation->addSubNavigation('details', $item);
+
+ $item = new Navigation(_('Infobild'), 'dispatch.php/avatar/update/course/' . $course_id);
+ $item->setImage(Icon::create('file-pic'));
+ $item->setDescription(_('Infobild dieser Veranstaltung bearbeiten oder löschen.'));
+ $navigation->addSubNavigation('avatar', $item);
+
+ $item = new Navigation(_('Studienbereiche'), 'dispatch.php/course/study_areas/show/' . $course_id);
+ $item->setImage(Icon::create('module'));
+ $item->setDescription(_('Zuordnung dieser Veranstaltung zu Studienbereichen für die Darstellung im Verzeichnis aller Veranstaltungen.'));
+ $navigation->addSubNavigation('study_areas', $item);
+
+ if ($range->getSemClass()['module']) {
+ $item = new Navigation(_('LV-Gruppen'), 'dispatch.php/course/lvgselector/index/' . $course_id, ['list' => 'TRUE']);
+ $item->setImage(Icon::create('learnmodule'));
+ $item->setDescription(_('Zuordnung der Veranstaltung zu Lehrveranstaltungsgruppen um die Einordnung innerhalb des Modulverzeichnisses festzulegen.'));
+ $navigation->addSubNavigation('lvgruppen', $item);
}
+ $item = new Navigation(_('Zeiten/Räume'), 'dispatch.php/course/timesrooms');
+ $item->setImage(Icon::create('date'));
+ $item->setDescription(_('Regelmäßige Veranstaltungszeiten, Einzeltermine und Ortsangaben ändern.'));
+ $navigation->addSubNavigation('dates', $item);
+
+ $item = new Navigation(_('Zugangsberechtigungen'), 'dispatch.php/course/admission');
+ $item->setImage(Icon::create('lock-locked'));
+ $item->setDescription(_('Zugangsbeschränkungen, Anmeldeverfahren oder einen Passwortschutz für diese Veranstaltung einrichten.'));
+ $navigation->addSubNavigation('admission', $item);
+
+ $item = new AutoNavigation(_('Zusatzangaben'), 'dispatch.php/admin/additional');
+ $item->setImage(Icon::create('add'));
+ $item->setDescription(_('Vorlagen zur Erhebung weiterer Angaben von Teilnehmenden auswählen.'));
+ $navigation->addSubNavigation('additional_data', $item);
+
+ } // endif modules only seminars
+
+ if (Config::get()->VOTE_ENABLE) {
+ $this->addVoteNavigation($navigation);
+ }
+ if (Config::get()->EVAL_ENABLE) {
+ $item = new Navigation(_('Evaluationen'), 'admin_evaluation.php?view=eval_sem');
+ $item->setImage(Icon::create('evaluation'));
+ $item->setDescription(_('Richten Sie fragebogenbasierte Umfragen und Lehrevaluationen ein.'));
+ $navigation->addSubNavigation('evaluation', $item);
+ }
+
+ /*
+ * Is the current SemClass available for grouping other courses?
+ * -> show child management
+ */
+ if ($range instanceof Course) {
+ $c = $range->getSemClass();
+ if ($c->isGroup()) {
+
+ $item = new Navigation(_('Unterveranstaltungen'), 'dispatch.php/course/grouping/children');
+ $item->setImage(Icon::create('group', Icon::ROLE_INFO_ALT));
+ $item->setActiveImage(Icon::create('group', Icon::ROLE_INFO));
+ $item->setDescription(_('Ordnen Sie dieser Veranstaltung eine oder mehrere Unterveranstaltungen zu.'));
+ $navigation->addSubNavigation('children', $item);
+
/*
- * Is the current SemClass available for grouping other courses?
- * -> show child management
+ * Check if any SemClasses with grouping functionality exist at all
+ * -> show parent assignment.
*/
- $course = Course::find($course_id);
- if ($course) {
- $c = $course->getSemClass();
- if ($c->isGroup()) {
-
- $item = new Navigation(_('Unterveranstaltungen'), 'dispatch.php/course/grouping/children');
- $item->setImage(Icon::create('group', Icon::ROLE_INFO_ALT));
- $item->setActiveImage(Icon::create('group', Icon::ROLE_INFO));
- $item->setDescription(_('Ordnen Sie dieser Veranstaltung eine oder mehrere Unterveranstaltungen zu.'));
- $navigation->addSubNavigation('children', $item);
-
- /*
- * Check if any SemClasses with grouping functionality exist at all
- * -> show parent assignment.
- */
- } else if (count(SemClass::getGroupClasses()) > 0) {
-
- $item = new Navigation(_('Zuordnung zu Hauptveranstaltung'), 'dispatch.php/course/grouping/parent');
- $item->setImage(Icon::create('group', Icon::ROLE_INFO_ALT));
- $item->setActiveImage(Icon::create('group', Icon::ROLE_INFO));
- $item->setDescription(_('Ordnen Sie diese Veranstaltung einer bestehenden ' .
- 'Hauptveranstaltung zu oder lösen Sie eine bestehende Zuordnung.'));
- $navigation->addSubNavigation('parent', $item);
-
- }
- }
+ } else if (count(SemClass::getGroupClasses()) > 0) {
- return ['admin' => $navigation];
- } else {
- return [];
+ $item = new Navigation(_('Zuordnung zu Hauptveranstaltung'), 'dispatch.php/course/grouping/parent');
+ $item->setImage(Icon::create('group', Icon::ROLE_INFO_ALT));
+ $item->setActiveImage(Icon::create('group', Icon::ROLE_INFO));
+ $item->setDescription(_('Ordnen Sie diese Veranstaltung einer bestehenden ' .
+ 'Hauptveranstaltung zu oder lösen Sie eine bestehende Zuordnung.'));
+ $navigation->addSubNavigation('parent', $item);
+
+ }
}
+
+ return ['admin' => $navigation];
}
/**
@@ -145,4 +158,20 @@ class CoreAdmin extends CorePlugin implements StudipModule
// TODO: Implement getInfoTemplate() method.
return null;
}
+
+ private function getRootNavigation(): Navigation
+ {
+ $navigation = new Navigation(_('Verwaltung'));
+ $navigation->setImage(Icon::create('admin', Icon::ROLE_INFO_ALT));
+ $navigation->setActiveImage(Icon::create('admin', Icon::ROLE_INFO));
+ return $navigation;
+ }
+
+ private function addVoteNavigation(Navigation &$navigation): void
+ {
+ $item = new Navigation(_('Fragebögen'), 'dispatch.php/questionnaire/courseoverview');
+ $item->setImage(Icon::create('vote'));
+ $item->setDescription(_('Erstellen und bearbeiten von Fragebögen.'));
+ $navigation->addSubNavigation('questionnaires', $item);
+ }
}