} else {
$totalcount = $this->get_numusers();
}
+
if ($showaverages) {
+ /*
+ * this sql is broken in the event of multiple grade book roles assigned to one user
+ * or same role in multiple contexts
$SQL = "SELECT g.itemid, SUM(g.finalgrade) as sum, COUNT(DISTINCT(u.id)) as count
- FROM {$CFG->prefix}grade_items gi INNER JOIN
- {$CFG->prefix}grade_grades g ON gi.id = g.itemid INNER JOIN
- {$CFG->prefix}user u ON u.id = g.userid INNER JOIN
+ FROM {$CFG->prefix}grade_items gi LEFT JOIN
+ {$CFG->prefix}grade_grades g ON gi.id = g.itemid LEFT JOIN
+ {$CFG->prefix}user u ON u.id = g.userid LEFT JOIN
{$CFG->prefix}role_assignments ra ON u.id = ra.userid
$groupsql
WHERE gi.courseid = $this->courseid
AND ra.roleid in ($this->gradebookroles)
AND ra.contextid ".get_related_contexts_string($this->context)."
GROUP BY g.itemid";
-
+ */
+
+ // the first join on user is needed for groupsql
+ $SQL = "SELECT g.itemid, SUM(g.finalgrade) as sum, COUNT(DISTINCT(u.id)) as count
+ FROM {$CFG->prefix}grade_items gi LEFT JOIN
+ {$CFG->prefix}grade_grades g ON gi.id = g.itemid LEFT JOIN
+ {$CFG->prefix}user u ON g.userid = u.id
+ $groupsql
+ WHERE gi.courseid = $this->courseid
+ $groupwheresql
+ AND g.userid IN (
+ SELECT DISTINCT(u.id)
+ FROM {$CFG->prefix}user u LEFT JOIN
+ {$CFG->prefix}role_assignments ra ON u.id = ra.userid
+ WHERE ra.roleid in ($this->gradebookroles)
+ AND ra.contextid ".get_related_contexts_string($this->context)."
+ )
+ GROUP BY g.itemid";
+
$sum_array = array();
$count_array = array();
$sums = get_records_sql($SQL);