aboutsummaryrefslogtreecommitdiff
path: root/lib/classes
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2025-08-26 08:53:09 +0200
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2025-08-26 08:54:29 +0200
commit00dd77ab6d5763d93999f00250cb5e6f4de12e9c (patch)
treef85ecafa7cf671f337961c3669932963528592a4 /lib/classes
parent5903190449f30edf66e8f0bb479ef19797e0ba27 (diff)
fix filters for select and boolean, fix filtering for deleted datafields, use default as well, some cleanupbiest-5848
Diffstat (limited to 'lib/classes')
-rw-r--r--lib/classes/AdminCourseFilter.php44
-rw-r--r--lib/classes/DataFieldSelectboxEntry.php5
2 files changed, 39 insertions, 10 deletions
diff --git a/lib/classes/AdminCourseFilter.php b/lib/classes/AdminCourseFilter.php
index bdb84d2..04d7d17 100644
--- a/lib/classes/AdminCourseFilter.php
+++ b/lib/classes/AdminCourseFilter.php
@@ -157,14 +157,42 @@ class AdminCourseFilter
if (!$reset_settings) {
$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 . '%'
- ]);
- }
+
+ DataField::findEachMany(
+ function (DataField $datafield) use (&$datafields_filters) {
+ $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->join(
+ "dd_{$datafield->id}",
+ 'datafields',
+ "dd_{$datafield->id}.datafield_id = de_{$datafield->id}.datafield_id"
+ );
+
+ if ($datafield->isNumericType()) {
+ $this->query->where(
+ "de_{$datafield->id}_contents",
+ "IFNULL(de_{$datafield->id}.`content`, dd_{$datafield->id}.`default_value`) = :de_{$datafield->id}_content",
+ [
+ "de_{$datafield->id}_id" => $datafield->id,
+ "de_{$datafield->id}_content" => $datafields_filters[$datafield->id]
+ ]
+ );
+ } else {
+ $this->query->where(
+ "de_{$datafield->id}_contents",
+ "IFNULL(de_{$datafield->id}.`content`, dd_{$datafield->id}.`default_value`) LIKE :de_{$datafield->id}_content",
+ [
+ "de_{$datafield->id}_id" => $datafield->id,
+ "de_{$datafield->id}_content" => '%' . $datafields_filters[$datafield->id] . '%'
+ ]
+ );
+ }
+ },
+ array_keys($datafields_filters)
+ );
}
}
diff --git a/lib/classes/DataFieldSelectboxEntry.php b/lib/classes/DataFieldSelectboxEntry.php
index 4c9c890..4a1cc02 100644
--- a/lib/classes/DataFieldSelectboxEntry.php
+++ b/lib/classes/DataFieldSelectboxEntry.php
@@ -92,8 +92,9 @@ class DataFieldSelectboxEntry extends DataFieldEntry
public function getDisplayValue($entities = true)
{
$value = $this->is_assoc_param
- ? $this->type_param[$this->getValue()]
- : $this->getValue();
+ ? $this->type_param[$this->getValue()] ?? ''
+ : $this->getValue();
+
return $entities ? htmlReady($value) : $value;
}
}