diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2024-08-15 06:57:58 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+github@gmail.com> | 2024-08-15 13:11:11 +0200 |
| commit | 06564d7e43e54c7ec336ec5941167976b7d31484 (patch) | |
| tree | 58632f834871887a4459c132df683b0504c4f382 /lib/modules | |
| parent | 507a22586889f8684f831a964ee4ab182933ffcc (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.php | 215 |
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); + } } |
