diff options
| -rw-r--r-- | app/controllers/admin/courses.php | 44 | ||||
| -rw-r--r-- | lib/classes/AdminCourseFilter.class.php | 4 | ||||
| -rw-r--r-- | lib/plugins/core/AdminCourseWidget.class.php | 18 |
3 files changed, 55 insertions, 11 deletions
diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php index af3b5c7..b0a5551 100644 --- a/app/controllers/admin/courses.php +++ b/app/controllers/admin/courses.php @@ -235,6 +235,17 @@ class Admin_CoursesController extends AuthenticatedController )->asDialog('size=auto'); $sidebar->addWidget($export); } + + foreach (PluginManager::getInstance()->getPlugins('AdminCourseWidgetPlugin') as $plugin) { + foreach ($plugin->getWidgets() as $index => $widget) { + $position = $plugin->getPositionInSidebar($index); + if ($position) { + $sidebar->insertWidget($widget, $position, $index); + } else { + $sidebar->addWidget($widget, $index); + } + } + } } @@ -315,21 +326,26 @@ class Admin_CoursesController extends AuthenticatedController ? $configuration->MY_INSTITUTES_DEFAULT : null; + $filters = array_merge( + $this->getDatafieldFilters(), + [ + 'institut_id' => $institut_id, + 'search' => $configuration->ADMIN_COURSES_SEARCHTEXT, + 'semester_id' => $configuration->MY_COURSES_SELECTED_CYCLE, + 'course_type' => $configuration->MY_COURSES_TYPE_FILTER, + 'stgteil' => $configuration->MY_COURSES_SELECTED_STGTEIL, + 'teacher_filter' => $configuration->ADMIN_COURSES_TEACHERFILTER, + ] + ); + + foreach (PluginManager::getInstance()->getPlugins('AdminCourseWidgetPlugin') as $plugin) { + $filters = array_merge($filters, $plugin->getFilterValues()); + } return [ 'setActivatedFields' => $this->getFilterConfig(), 'setActionArea' => $configuration->MY_COURSES_ACTION_AREA ?? '1', - 'setFilter' => array_filter(array_merge( - $this->getDatafieldFilters(), - [ - 'institut_id' => $institut_id, - 'search' => $configuration->ADMIN_COURSES_SEARCHTEXT, - 'semester_id' => $configuration->MY_COURSES_SELECTED_CYCLE, - 'course_type' => $configuration->MY_COURSES_TYPE_FILTER, - 'stgteil' => $configuration->MY_COURSES_SELECTED_STGTEIL, - 'teacher_filter' => $configuration->ADMIN_COURSES_TEACHERFILTER, - ] - )), + 'setFilter' => array_filter($filters), ]; } @@ -406,6 +422,12 @@ class Admin_CoursesController extends AuthenticatedController } $GLOBALS['user']->cfg->store('ADMIN_COURSES_DATAFIELDS_FILTERS', $datafields_filters); + foreach (PluginManager::getInstance()->getPlugins('AdminCourseWidgetPlugin') as $plugin) { + foreach ($plugin->getWidgets() as $name => $widget) { + $plugin->setFilter($name, Request::get($name)); + } + } + $filter = AdminCourseFilter::get(); if (Request::option('course_id')) { //we have only one course and want to see if that course is part of the result set $filter->query->where('course_id', 'seminare.Seminar_id = :course_id', ['course_id' => Request::option('course_id')]); diff --git a/lib/classes/AdminCourseFilter.class.php b/lib/classes/AdminCourseFilter.class.php index a934ebe..f803082 100644 --- a/lib/classes/AdminCourseFilter.class.php +++ b/lib/classes/AdminCourseFilter.class.php @@ -171,6 +171,10 @@ class AdminCourseFilter 'de_' . $datafield_id . '_content' => '%' . $value . '%' ]); } + + foreach (PluginManager::getInstance()->getPlugins('AdminCourseWidgetPlugin') as $plugin) { + $plugin->applyFilter($this); + } } /** diff --git a/lib/plugins/core/AdminCourseWidget.class.php b/lib/plugins/core/AdminCourseWidget.class.php new file mode 100644 index 0000000..3f67b7b --- /dev/null +++ b/lib/plugins/core/AdminCourseWidget.class.php @@ -0,0 +1,18 @@ +<?php +interface AdminCourseWidgetPlugin +{ + /** + * Returns an array of widgets in the way: ['select_studiengang' => $select_widget]. + * The indexes are the names of the parameter. + * @return array of SidebarWidget + */ + public function getWidgets(): array; + + public function getFilterValues(): array; + + public function applyFilter(AdminCourseFilter $filter): void; + + public function setFilter(string $name, $value): void; + + public function getPositionInSidebar($name): ?string; +} |
