Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Won't Fix
-
Affects Version/s: 1.6.2
-
Fix Version/s: None
-
Component/s: Blocks
-
Labels:None
-
Database:MySQL
-
Affected Branches:MOODLE_16_STABLE
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.
my patch
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']; > }