aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/AdminCourseFilter.class.php
diff options
context:
space:
mode:
authorMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2024-06-18 13:18:06 +0000
committerMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2024-06-18 13:18:06 +0000
commit33fd1358507b4a5abb3dcebe78d407d0567717c1 (patch)
tree6bd8f6959da4c3fc1b8907c0bbc28eb9e10d4a5a /lib/classes/AdminCourseFilter.class.php
parent42d46671c0309bddb71a91bbfdc5f2fa2e44384e (diff)
Deprecate `StudipAutoloader` and use composer's `autoload`
Closes #4282 Merge request studip/studip!3099
Diffstat (limited to 'lib/classes/AdminCourseFilter.class.php')
-rw-r--r--lib/classes/AdminCourseFilter.class.php220
1 files changed, 0 insertions, 220 deletions
diff --git a/lib/classes/AdminCourseFilter.class.php b/lib/classes/AdminCourseFilter.class.php
deleted file mode 100644
index f643e09..0000000
--- a/lib/classes/AdminCourseFilter.class.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-
-/**
- * Class AdminCourseFilter
- *
- * The main class to filter all courses for admins. It's a singleton class, so you
- * better call it with AdminCourseFilter::get(). The whole class is created to
- * provide a nice hook for plugins to add special filters into the admin-area of
- * Stud.IP.
- *
- * To add a filter with a plugin, listen to the notification "AdminCourseFilterWillQuery"
- * like this:
- *
- * NotificationCenter::addObserver($this, "addMyFilter", "AdminCourseFilterWillQuery");
- *
- * Where $this is an object and "addMyFilter" a method. Such a method might look like this:
- *
- * public function addLectureshipFilter($event, $filter)
- * {
- * if ($GLOBALS['user']->cfg->getValue("LECTURESHIP_FILTER")) {
- * $filter->query->join('lehrauftrag', 'seminare.Seminar_id = lehrauftrag.seminar_id');
- * }
- * }
- *
- * Within this method you alter the public $filter->query object. That query object is of type SQLQuery.
- *
- */
-class AdminCourseFilter
-{
- static protected $instance = null;
-
- /** @var SQLQuery|null */
- public $query = null;
- public $max_show_courses = 500;
- public $settings = [];
-
- /**
- * returns an AdminCourseFilter singleton object
- * @return AdminCourseFilter or derived-class object
- */
- static public function get($reset_settings = false)
- {
- if (!self::$instance) {
- $class = get_called_class();
- self::$instance = new $class($reset_settings);
- }
- return self::$instance;
- }
-
- /**
- * Constructor of the singleton-object.
- */
- public function __construct()
- {
- $this->initSettings();
- }
-
- protected function initSettings()
- {
- $this->query = SQLQuery::table('seminare');
- $this->query->join('sem_types', 'sem_types', 'sem_types.id = seminare.status');
- $this->query->join('sem_classes', 'sem_classes', 'sem_classes.id = sem_types.class');
- $this->query->where("sem_classes.studygroup_mode = '0'");
- $this->query->groupBy('seminare.Seminar_id');
-
- if ($GLOBALS['user']->cfg->ADMIN_COURSES_SEARCHTEXT) {
- $this->query->join('teachers_su', 'seminar_user', "teachers_su.Seminar_id = seminare.Seminar_id AND teachers_su.status = 'dozent'");
- $this->query->join('teachers', 'auth_user_md5', 'teachers.user_id = teachers_su.user_id');
- $this->query->where(
- 'search',
- "(seminare.name LIKE :search OR seminare.VeranstaltungsNummer LIKE :search OR seminare.untertitel LIKE :search OR CONCAT(teachers.Vorname, ' ', teachers.Nachname) LIKE :search)",
- ['search' => '%'.$GLOBALS['user']->cfg->ADMIN_COURSES_SEARCHTEXT.'%']
- );
- }
- if (Request::option('course_id')) {
- $this->query->where('course_id', 'seminare.Seminar_id = :course_id', ['course_id' => Request::option('course_id')]);
- }
- $inst_ids = [];
-
- if (
- !$GLOBALS['user']->cfg->MY_INSTITUTES_DEFAULT
- || $GLOBALS['user']->cfg->MY_INSTITUTES_DEFAULT === 'all'
- ) {
- $inst = new SimpleCollection(Institute::getMyInstitutes($GLOBALS['user']->id));
- $inst_ids = $inst->map(function ($a) {
- return $a['Institut_id'];
- });
- } else {
-
- $inst_id = $GLOBALS['user']->cfg->MY_INSTITUTES_DEFAULT;
- $inst_ids[] = $inst_id;
-
- if ($GLOBALS['user']->cfg->MY_INSTITUTES_INCLUDE_CHILDREN) {
- $inst = Institute::find($inst_id);
- if ($inst && $inst->isFaculty()) {
- foreach ($inst->sub_institutes->pluck('Institut_id') as $institut_id) {
- $inst_ids[] = $institut_id;
- }
- }
- }
- }
-
- if (Config::get()->ALLOW_ADMIN_RELATED_INST) {
- $this->query->where('seminar_inst', 'EXISTS (SELECT 1 FROM seminar_inst WHERE seminar_id = seminare.Seminar_id AND institut_id IN (:institut_ids))');
- } else {
- $this->query->where("seminar_inst", "seminare.institut_id IN (:institut_ids)");
- }
- $this->query->parameter('institut_ids', $inst_ids);
-
- if ($GLOBALS['user']->cfg->MY_COURSES_SELECTED_CYCLE) {
- $this->query->join('semester_courses', 'semester_courses.course_id = seminare.Seminar_id', 'LEFT JOIN');
- $this->query->where('semester_id', '(semester_courses.semester_id = :semester_id OR semester_courses.semester_id IS NULL)', [
- 'semester_id' => $GLOBALS['user']->cfg->MY_COURSES_SELECTED_CYCLE
- ]);
- }
-
- if ($GLOBALS['user']->cfg->MY_COURSES_TYPE_FILTER && $GLOBALS['user']->cfg->MY_COURSES_TYPE_FILTER !== 'all') {
- if (str_contains($GLOBALS['user']->cfg->MY_COURSES_TYPE_FILTER, '_')) {
- list($sem_class_id, $sem_type_id) = explode('_', $GLOBALS['user']->cfg->MY_COURSES_TYPE_FILTER);
- $this->query->where('course_type', 'seminare.status = :course_type', ['course_type' => $sem_type_id]);
- } else {
- //sem class
- $this->query->where('course_class', 'sem_types.class = :course_class', [
- 'course_class' => $GLOBALS['user']->cfg->MY_COURSES_TYPE_FILTER
- ]);
- }
-
- }
-
- if ($GLOBALS['user']->cfg->MY_COURSES_SELECTED_STGTEIL) {
- $this->query->join('mvv_lvgruppe_seminar', '`mvv_lvgruppe_seminar`.`seminar_id` = `seminare`.`Seminar_id`');
- $this->query->join('mvv_lvgruppe_modulteil', '`mvv_lvgruppe_modulteil`.`lvgruppe_id` = `mvv_lvgruppe_seminar`.`lvgruppe_id`');
- $this->query->join('mvv_modulteil', '`mvv_modulteil`.`modulteil_id` = `mvv_lvgruppe_modulteil`.`modulteil_id`');
- $this->query->join('mvv_modul', '`mvv_modul`.`modul_id` = `mvv_modulteil`.`modul_id`');
- $this->query->join('mvv_stgteilabschnitt_modul', '`mvv_stgteilabschnitt_modul`.`modul_id` = `mvv_modul`.`modul_id`');
- $this->query->join('mvv_stgteilabschnitt', '`mvv_stgteilabschnitt`.`abschnitt_id` = `mvv_stgteilabschnitt_modul`.`abschnitt_id`');
- $this->query->join('mvv_stgteilversion', '`mvv_stgteilversion`.`version_id` = `mvv_stgteilabschnitt`.`version_id`');
- $this->query->where('stgteil', 'mvv_stgteilversion.stgteil_id = :stgteil_id', [
- 'stgteil_id' => $GLOBALS['user']->cfg->MY_COURSES_SELECTED_STGTEIL
- ]);
- }
-
- if ($GLOBALS['user']->cfg->ADMIN_COURSES_TEACHERFILTER) {
- $this->query->join('teachers_su', 'seminar_user', "teachers_su.Seminar_id = seminare.Seminar_id AND teachers_su.status = 'dozent'");
- $this->query->where(
- 'teacher_filter',
- "teachers_su.user_id = :teacher_id",
- ['teacher_id' => $GLOBALS['user']->cfg->ADMIN_COURSES_TEACHERFILTER]
- );
- }
-
-
-
- $datafields_filters = $GLOBALS['user']->cfg->ADMIN_COURSES_DATAFIELDS_FILTERS;
- foreach ($datafields_filters as $datafield_id => $value) {
- $this->query->join('de_'.$datafield_id, 'datafields_entries', 'de_'.$datafield_id.'.range_id = seminare.Seminar_id AND `de_'.$datafield_id.'`.datafield_id = :de_'.$datafield_id.'_id');
- $this->query->where('de_' . $datafield_id . '_contents', 'de_' . $datafield_id . '.`content` LIKE :de_' . $datafield_id . '_content',
- [
- 'de_' . $datafield_id . '_id' => $datafield_id,
- 'de_' . $datafield_id . '_content' => '%' . $value . '%'
- ]);
- }
- }
-
- /**
- * Returns the data of the resultset of the AdminCourseFilter.
- * Also saves the settings in the session.
- * Note that a notification AdminCourseFilterWillQuery will be posted, before the result is computed.
- * Plugins may register at this event to fully alter this AdminCourseFilter-object and so the resultset.
- * @return array associative array with seminar_ids as keys and seminar-data-arrays as values.
- */
- public function getCourses()
- {
- NotificationCenter::postNotification("AdminCourseFilterWillQuery", $this);
- return $this->query->fetchAll(Course::class);
- }
-
- /**
- * @return integer number of courses that this filter would return
- */
- public function countCourses()
- {
- NotificationCenter::postNotification("AdminCourseFilterWillQuery", $this);
- return $this->query->count();
- }
-
- /**
- * @param int|null $limit
- * @return Course[]
- */
- public function fetchCourses(?int $limit = null): array
- {
- NotificationCenter::postNotification('AdminCourseFilterWillQuery', $this);
- return $this->query->fetchAll(Course::class, $limit);
- }
-
- /**
- * Returns the data of the resultset of the AdminCourseFilter.
- *
- * @param string $order_by possible values name or number
- *
- * Note that a notification AdminCourseFilterWillQuery will be posted, before the result is computed.
- * Plugins may register at this event to fully alter this AdminCourseFilter-object and so the resultset.
- * @return array associative array with seminar_ids as keys and seminar-data-arrays as values.
- */
- public function getCoursesForAdminWidget(string $order_by = 'name')
- {
- try {
- $order = 'seminare.name';
- if ($order_by === 'number') {
- $order = 'seminare.veranstaltungsnummer, seminare.name';
- }
- $this->query->orderBy($order);
- return $this->fetchCourses($this->max_show_courses);
- } catch (OverflowException $e) {
- return [];
- }
- }
-
-}