From 25be710d236c5f4c1e689bb569d826ff12d2aa98 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Fri, 18 Jun 2021 10:43:09 +0100 Subject: [PATCH] MDL-72000 user: support custom user fields in participants export. --- user/action_redir.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/user/action_redir.php b/user/action_redir.php index 576917689cd..a98b35e09dd 100644 --- a/user/action_redir.php +++ b/user/action_redir.php @@ -99,24 +99,24 @@ if ($formaction == 'bulkchange.php') { $hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields)); } - // TODO Does not support custom user profile fields (MDL-70456). - $identityfields = \core_user\fields::get_identity_fields($context, false); - $identityfieldsselect = ''; + // Retrieve all identity fields required for users. + $userfieldsapi = \core_user\fields::for_identity($context); + $userfields = $userfieldsapi->get_sql('u', true, '', '', false); + $identityfields = array_keys($userfields->mappings); foreach ($identityfields as $field) { - $columnnames[$field] = get_string($field); - $identityfieldsselect .= ', u.' . $field . ' '; + $columnnames[$field] = \core_user\fields::get_display_name($field); } [$useridsql, $useridparams] = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED, 'userid'); [$userordersql, $userorderparams] = users_order_by_sql('u', null, $context); - $params = array_merge($useridparams, $userorderparams); + $params = array_merge($userfields->params, $useridparams, $userorderparams); // Add column for groups if the user can view them. if (!isset($hiddenfields['groups'])) { $columnnames['groupnames'] = get_string('groups'); - $identityfieldsselect .= ', gcn.groupnames'; + $userfields->selects .= ', gcn.groupnames'; [$groupconcatnamesql, $groupconcatnameparams] = groups_get_names_concat_sql($course->id); $groupconcatjoin = "LEFT JOIN ({$groupconcatnamesql}) gcn ON gcn.userid = u.id"; @@ -125,8 +125,9 @@ if ($formaction == 'bulkchange.php') { $groupconcatjoin = ''; } - $sql = "SELECT u.firstname, u.lastname" . $identityfieldsselect . " + $sql = "SELECT u.firstname, u.lastname, {$userfields->selects} FROM {user} u + {$userfields->joins} {$groupconcatjoin} WHERE u.id {$useridsql} ORDER BY {$userordersql}";