aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admin/courses.php44
-rw-r--r--lib/classes/AdminCourseFilter.class.php4
-rw-r--r--lib/plugins/core/AdminCourseWidget.class.php18
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;
+}