From 3241c64cdad23215b0b3ff0d4e5917ff1fce2654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michaela=20Br=C3=BCckner?= Date: Tue, 13 May 2025 10:04:18 +0200 Subject: Resolve "Export: Datenfelder fehlen im Teilnehmerexport" Closes #5440 Merge request studip/studip!4171 --- app/controllers/course/members.php | 34 +++++++++++++++++++++++++++++++--- lib/classes/DataFieldEntry.php | 2 +- lib/models/DataField.php | 2 +- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php index 73244ca..e8878d5 100644 --- a/app/controllers/course/members.php +++ b/app/controllers/course/members.php @@ -1847,15 +1847,43 @@ class Course_MembersController extends AuthenticatedController _('Position'), ]; + $course = Course::findCurrent(); + $members = $course->getMembersData($status); + + $datafields = DataField::getDataFields('user'); + $datafields = array_filter( + $datafields, + fn(DataField $datafield) => $datafield->accessAllowed() + ); + + if (count($datafields) > 0) { + foreach ($datafields as $datafield) { + $header[] = (string) $datafield->name; + } + + foreach ($members as $user_id => $data) { + $user_datafields = DataFieldEntry::getDataFieldEntries( + $user_id, + 'user' + ); + + foreach ($datafields as $datafield) { + $user_datafield = $user_datafields[$datafield->id] ?? null; + if ($user_datafield) { + $members[$user_id][] = $user_datafield->getDisplayValue(false); + } else { + $members[$user_id][] = ''; + } + } + } + } + if (in_array($status, ['awaiting', 'claiming'])) { $filename = _('Wartelistenexport'); } else { $filename = _('Teilnehmendenexport'); } - $course = Course::findCurrent(); - $members = $course->getMembersData($status); - $filename = $filename . ' ' . $this->course_title . '.' . $export_format; $this->render_spreadsheet($header, $members, $export_format, $filename); diff --git a/lib/classes/DataFieldEntry.php b/lib/classes/DataFieldEntry.php index eca0b4a..923344f 100644 --- a/lib/classes/DataFieldEntry.php +++ b/lib/classes/DataFieldEntry.php @@ -94,7 +94,7 @@ abstract class DataFieldEntry * @param string $range_id * @param string $object_type * @param string $object_class_hint - * @return array + * @return static[] */ public static function getDataFieldEntries($range_id, $object_type = '', $object_class_hint = '') { diff --git a/lib/models/DataField.php b/lib/models/DataField.php index b66a817..fa2ba0b 100644 --- a/lib/models/DataField.php +++ b/lib/models/DataField.php @@ -86,7 +86,7 @@ class DataField extends SimpleORMap implements PrivacyObject * @param String $objectClass Object class * @param bool $includeNullClass Should the object class "null" be * included - * @return array of DataField instances + * @return static[] of DataField instances */ public static function getDataFields($objectType = null, $objectClass = '', $includeNullClass = false) { -- cgit v1.0