diff --git a/grade/lib.php b/grade/lib.php index 1a7c933..df29492 100644 --- a/grade/lib.php +++ b/grade/lib.php @@ -150,13 +150,17 @@ class graded_users_iterator { $params = array_merge($params, $enrolledparams, $relatedctxparams); + $groupselect = "SELECT g.id AS groupid, g.idnumber, g.name, gm.userid, g.courseid + FROM {groups} AS g + INNER JOIN {groups_members} AS gm ON gm.groupid = g.id AND g.courseid = :courseid"; + $params['courseid'] = $this->course->id; + $groupsql = "LEFT JOIN ($groupselect) AS gm ON gm.userid = u.id"; + if ($this->groupid) { - $groupsql = "INNER JOIN {groups_members} gm ON gm.userid = u.id"; $groupwheresql = "AND gm.groupid = :groupid"; // $params contents: gradebookroles $params['groupid'] = $this->groupid; } else { - $groupsql = ""; $groupwheresql = ""; } @@ -198,6 +202,10 @@ class graded_users_iterator { } } + $userfields .= ", array_to_string(array_agg(gm.groupid), ', ') AS groupid"; + $userfields .= ", array_to_string(array_agg(COALESCE(NULLIF(gm.idnumber, ''), '-')), ', ') AS groupidnumber"; + $userfields .= ", array_to_string(array_agg(gm.name), ', ') AS groupname"; + $users_sql = "SELECT $userfields $ofields FROM {user} u JOIN ($enrolledsql) je ON je.id = u.id @@ -210,6 +218,7 @@ class graded_users_iterator { ) rainner ON rainner.userid = u.id WHERE u.deleted = 0 $groupwheresql + GROUP BY u.id ORDER BY $order"; $this->users_rs = $DB->get_recordset_sql($users_sql, $params); @@ -3131,18 +3140,27 @@ abstract class grade_helper { require_once($CFG->dirroot.'/user/profile/lib.php'); // Loads constants, such as PROFILE_VISIBLE_ALL $userdefaultfields = user_get_default_fields(); + $groupfields = array( + 'groupid' => get_string('group'), + 'groupidnumber' => get_string('idnumbergroup'), + 'groupname' => get_string('groupname', 'group')); + // Sets the list of profile fields $userprofilefields = array_map('trim', explode(',', $CFG->grade_export_userprofilefields)); if (!empty($userprofilefields)) { foreach ($userprofilefields as $field) { $field = trim($field); - if (in_array($field, $hiddenfields) || !in_array($field, $userdefaultfields)) { + if (in_array($field, $hiddenfields) || !(in_array($field, $userdefaultfields) || array_key_exists($field, $groupfields))) { continue; } $obj = new stdClass(); $obj->customid = 0; $obj->shortname = $field; - $obj->fullname = get_string($field); + if (array_key_exists($field, $groupfields)) { + $obj->fullname = $groupfields[$field]; + } else { + $obj->fullname = get_string($field); + } $fields[] = $obj; } }