|
|
|
If one student belongs to two or more groups, the block only count its grade in one group and ignore others. This makes the groupmode quiz result shows wrong group ranklist.
|
|
Description
|
If one student belongs to two or more groups, the block only count its grade in one group and ignore others. This makes the groupmode quiz result shows wrong group ranklist. |
Show » |
|
Since it call get_groups() so many times, perhaps there are some performance problem.
126,131d125
< // Now find which groups these users belong in
< $groupofuser = get_records_sql(
< 'SELECT m.userid, m.groupid, g.name FROM '.$CFG->prefix.'groups g LEFT JOIN '.$CFG->prefix.'groups_members m ON g.id = m.groupid '.
< 'WHERE g.courseid = '.$courseid.' AND m.userid IN ('.implode(',', $userids).')'
< );
<
136c130
< if(isset($groupofuser[$grade->userid])) {
—
> if ($usergroups = get_groups($courseid, $grade->userid)) {
138,144c132,140
< $groupid = $groupofuser[$grade->userid]->groupid;
< if(!isset($groupgrades[$groupid])) { < $groupgrades[$groupid] = array('sum' => (float)$grade->grade, 'number' => 1, 'group' => $groupofuser[$grade->userid]->name); < }
< else {
< $groupgrades[$groupid]['sum'] += $grade->grade;
< ++$groupgrades[$groupid]['number'];
—
> foreach ($usergroups as $usergroup) {
> $groupid = $usergroup->id;
> if(!isset($groupgrades[$groupid])) { > $groupgrades[$groupid] = array('sum' => (float)$grade->grade, 'number' => 1, 'group' => $usergroup->name); > }
> else { > $groupgrades[$groupid]['sum'] += $grade->grade; > ++$groupgrades[$groupid]['number']; > }