Skip to content
Snippets Groups Projects
Commit f248f716 authored by Moritz Strohm's avatar Moritz Strohm
Browse files

CourseParticipantsExporter: fixed group data retrieval

parent fc2a87ac
No related branches found
No related tags found
No related merge requests found
......@@ -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,13 +384,23 @@ 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;
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 = '';
......@@ -413,6 +410,35 @@ class CourseParticipantsExporter extends Exporter
$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);
}
}
$output[] = $row_data;
}
return $output;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment