diff --git a/classes/exporters/CourseParticipantsExporter.php b/classes/exporters/CourseParticipantsExporter.php index 5bc42ddf6b8509221bef93785c55bd46f9172c90..ff929bfaa7732dc769c9e429515cce4e7bb5b7be 100644 --- a/classes/exporters/CourseParticipantsExporter.php +++ b/classes/exporters/CourseParticipantsExporter.php @@ -233,18 +233,12 @@ class CourseParticipantsExporter extends Exporter $fields_sql = []; - if ($with_course_id) { + if ($with_course_id || $with_group_id || $with_group_name) { $fields_sql[] = '`seminar_user`.`seminar_id` AS course_id'; } - if ($with_user_id) { + if ($with_user_id || $with_group_id || $with_group_name) { $fields_sql[] = '`seminar_user`.`user_id` AS user_id'; } - if ($with_group_name) { - $fields_sql[] = '`statusgruppen`.`name` AS group_name'; - } - if ($with_group_id) { - $fields_sql[] = '`statusgruppen`.`statusgruppe_id` AS group_id'; - } if ($with_status) { $fields_sql[] = '`seminar_user`.`status` AS status'; } @@ -285,13 +279,6 @@ class CourseParticipantsExporter extends Exporter $with_user_info_data = false; $with_course_data = false; - if ($with_group_id || $with_group_name) { - $joins_sql[] = 'LEFT JOIN `statusgruppen` - ON `seminar_user`.`Seminar_id` = `statusgruppen`.`range_id` - LEFT JOIN `statusgruppe_user` - USING (`statusgruppe_id`)'; - } - if ($min_participants > 0) { $joins_sql[] = 'INNER JOIN ( SELECT `seminar_id`, COUNT(`user_id`) AS _participant_count @@ -397,22 +384,61 @@ class CourseParticipantsExporter extends Exporter $course_members_stmt = $db->prepare($full_sql); $course_members_stmt->execute($sql_data); - if ($with_salutation) { - //The salutation field needs special attention, since we only got the - //gender-ID from the database and need to construct the salutation from it. + if ($with_salutation || $with_group_id || $with_group_name) { + $group_stmt = null; + if ($with_group_id || $with_group_name) { + $group_stmt = $db->prepare( + 'SELECT `statusgruppe_id` AS group_id, `statusgruppen`.`name` AS group_name + FROM `statusgruppe_user` INNER JOIN `statusgruppen` USING (`statusgruppe_id`) + WHERE `statusgruppen`.`range_id` = :course_id AND `statusgruppe_user`.`user_id` = :user_id' + ); + } + + //Some fields needs special attention. $db_data = $course_members_stmt->fetchAll(\PDO::FETCH_ASSOC); $output = []; foreach ($db_data as $row) { $row_data = $row; - unset($row_data['gender_id']); - $gender_id = $row['gender_id']; - $salutation = ''; - if ($gender_id == '1') { - $salutation = dgettext('Flexexport', 'Herr'); - } elseif ($gender_id == '2') { - $salutation = dgettext('Flexexport', 'Frau'); + if ($with_salutation) { + //We only got the gender-ID from the database and need to construct the salutation from it. + unset($row_data['gender_id']); + $gender_id = $row['gender_id']; + $salutation = ''; + if ($gender_id == '1') { + $salutation = dgettext('Flexexport', 'Herr'); + } elseif ($gender_id == '2') { + $salutation = dgettext('Flexexport', 'Frau'); + } + $row_data['salutation'] = $salutation; + } + if ($group_stmt) { + $group_stmt->execute(['course_id' => $row['course_id'], 'user_id' => $row['user_id']]); + $group_result = $group_stmt->fetchAll(\PDO::FETCH_ASSOC); + //Remove the unused fields that are only needed here from the result set: + if (!$with_course_id) { + unset($row_data['course_id']); + } + if (!$with_user_id) { + unset($row_data['user_id']); + } + $group_ids = []; + $group_names = []; + foreach ($group_result as $group_entry) { + //Add each group id and/or name into one column: + if ($with_group_id) { + $group_ids[] = $group_entry['group_id']; + } + if ($with_group_name) { + $group_names[] = $group_entry['group_name']; + } + } + if ($with_group_id) { + $row_data['group_id'] = implode(',', $group_ids); + } + if ($with_group_name) { + $row_data['group_name'] = implode(',', $group_names); + } } - $row_data['salutation'] = $salutation; $output[] = $row_data; } return $output;