aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Thienel <thienel@data-quest.de>2026-03-17 13:35:06 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2026-03-17 14:39:44 +0100
commit869949f93bc8ed23127f469b74414d8a6b247bbe (patch)
tree8eaec0f234b75abc4e05fd1e3ab81e4ae238ac96
parenta854f47cb5b20ebf6a01eae3c3175fd0b2aee071 (diff)
Resolve "MVV: Suche nach Materialen/Dateien kaputt"
Closes #6368 Merge request studip/studip!4827
-rw-r--r--app/controllers/materialien/files.php7
-rw-r--r--lib/models/MvvFile.php43
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);
}