diff options
| author | Peter Thienel <thienel@data-quest.de> | 2026-03-17 13:35:06 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2026-03-17 14:35:06 +0100 |
| commit | d87a0b3972e46da117366a3b29e6e5f4ce384a0f (patch) | |
| tree | c225e8ecf557745be5ece99df61f923ed9a5eb96 | |
| parent | ee91143bc05333323b44b5a41c6592894d0811f9 (diff) | |
Resolve "MVV: Suche nach Materialen/Dateien kaputt"
Closes #6368
Merge request studip/studip!4827
| -rw-r--r-- | app/controllers/materialien/files.php | 7 | ||||
| -rw-r--r-- | lib/models/MvvFile.php | 43 |
2 files changed, 21 insertions, 29 deletions
diff --git a/app/controllers/materialien/files.php b/app/controllers/materialien/files.php index a8d4823..d69bdb2 100644 --- a/app/controllers/materialien/files.php +++ b/app/controllers/materialien/files.php @@ -662,20 +662,21 @@ class Materialien_FilesController extends MVVController unset($this->filter['mvv_studiengang.institut_id']); } $own_institutes = MvvPerm::getOwnInstitutes(); + $search_names = $this->filter['searchnames'] ?? ''; + unset($this->filter['searchnames']); $institute_filter = array_merge( [ 'mvv_studiengang.institut_id' => $own_institutes ], $this->filter ); - unset($institute_filter['searchnames']); - $file_ids = MvvFile::getIdsFiltered($this->filter, true, false); + $file_ids = MvvFile::getIdsFiltered($this->filter, true); $count_faecher = $this->countFaecher($file_ids, $_SESSION['mvv_filter_files_fach_id'] ?? ''); $count_abschluesse = $this->countAbschluesse($file_ids, $_SESSION['mvv_filter_files_abschluss_id'] ?? ''); $semesters = new SimpleCollection(array_reverse(Semester::getAll())); $filter_template = $template_factory->render('shared/filter', [ 'name_search' => true, - 'selected_name' => $this->filter['searchnames'] ?? '', + 'selected_name' => $search_names, 'name_caption' => _('Name, Kategorie, Schlagwort'), 'semester' => $semesters, 'selected_semester' => $semesters->findOneBy('beginn', $this->filter['start_sem.beginn'])->id, diff --git a/lib/models/MvvFile.php b/lib/models/MvvFile.php index 1874892..740a38d 100644 --- a/lib/models/MvvFile.php +++ b/lib/models/MvvFile.php @@ -275,26 +275,6 @@ class MvvFile extends ModuleManagementModel WHERE (mvv_files_filerefs.name LIKE CONCAT('%', :term, '%') OR file_refs.name LIKE CONCAT('%', :term, '%')) GROUP BY mvvfile_id"; $params['term'] = $term; - /* if ($filter) { - foreach ($filter as $column => $val) { - if ($column == null || $val == null) { - continue; - } - if (is_array($val)) { - $sql .= ' AND '. $column . ' IN(' - . join(',', array_map( - function ($val) { - return DBManager::get()->quote($val); - }, $val)) - . ') '; - } else { - $sql .= ' AND '.$column.' = ? '; - //$params[] = $column; - $params[] = $val; - } - } - } */ - return SimpleORMapCollection::createFromArray(self::findBySQL($sql, $params)); } @@ -374,7 +354,6 @@ class MvvFile extends ModuleManagementModel public function addToRange($range_id, $range_type) { $mvvfile_range = new MvvFileRange([$this->mvvfile_id, $range_id]); - $mvvfile_range->range_type = $range_type; if ($mvvfile_range->isNew()) { $mvvfile_range->position = self::getMaxSortingPos($range_id) + 1; } @@ -471,21 +450,33 @@ class MvvFile extends ModuleManagementModel public static function getIdsFiltered($filter, $file_ids = false) { $id_type = $file_ids ? 'mvvfile_id' : 'range_id'; + $name_filter_join = ''; + $name_filter_where = ''; + $parameters = []; + if (!empty($filter['searchnames'])) { + $name_filter_join = 'LEFT JOIN `mvv_files_filerefs` USING (`mvvfile_id`) + INNER JOIN `file_refs` ON (`fileref_id` = `file_refs`.`id`)'; + $name_filter_where = " AND CONCAT_WS(' ', `file_refs`.`name`, `mvv_files_filerefs`.`name`, `mvv_files`.`category`,`mvv_files`.`tags`) LIKE :needle"; + $parameters[':needle'] = "%{$filter['searchnames']}%"; + unset($filter['searchnames']); + } $sql = "SELECT DISTINCT `mvv_files_ranges`.`{$id_type}` FROM `mvv_files` - LEFT JOIN `mvv_files_ranges` USING (`mvvfile_id`) - LEFT JOIN `mvv_abschl_zuord` ON (`mvv_abschl_zuord`.`kategorie_id` = `mvv_files_ranges`.`range_id`) + LEFT JOIN `mvv_files_ranges` USING (`mvvfile_id`)" + . $name_filter_join . + 'LEFT JOIN `mvv_abschl_zuord` ON (`mvv_abschl_zuord`.`kategorie_id` = `mvv_files_ranges`.`range_id`) LEFT JOIN `abschluss` USING(`abschluss_id`) LEFT JOIN `mvv_studiengang` ON (`mvv_studiengang`.`abschluss_id` = `abschluss`.`abschluss_id` OR `mvv_studiengang`.`studiengang_id` = `mvv_files_ranges`.`range_id`) LEFT JOIN `semester_data` `start_sem` ON (`mvv_studiengang`.`start` = `start_sem`.`semester_id`) LEFT JOIN `semester_data` `end_sem` - ON (`mvv_studiengang`.`end` = `end_sem`.`semester_id`)" - . self::getFilterSql($filter, true); + ON (`mvv_studiengang`.`end` = `end_sem`.`semester_id`)' + . self::getFilterSql($filter, true) + . $name_filter_where; $stm = DBManager::get()->prepare($sql); - $stm->execute(); + $stm->execute($parameters); return $stm->fetchAll(PDO::FETCH_COLUMN, 0); } |
