// Get the user preferences
$perpage = get_user_preferences('grade_report_studentsperpage', $CFG->grade_report_studentsperpage); // number of users on a page
$decimals = get_user_preferences('grade_report_decimalpoints', $CFG->grade_report_decimalpoints); // decimals in grades
+$displaytotals = get_user_preferences('grade_report_showgrandtotals', $CFG->grade_report_showgrandtotals);
+$displaygrouptotals = get_user_preferences('grade_report_showgroups', $CFG->grade_report_showgroups);
$aggregation_position = get_user_preferences('grade_report_aggregationposition', $CFG->grade_report_aggregationposition);
// Override perpage if set in URL
$perpage = $perpageurl;
}
+/// setting up groups
+
// Prepare language strings
$strsortasc = get_string('sortasc', 'grades');
$strsortdesc = get_string('sortdesc', 'grades');
// base url for paging
$pbarurl = 'report.php?id='.$courseid.'&perpage='.$perpage.'&report=grader&';
+/// find out current groups mode
+$course = get_record('course', 'id', $courseid);
+$groupmode = $course->groupmode;
+$currentgroup = setup_and_print_groups($course, $groupmode, $baseurl);
+
+// update paging after group
+$baseurl .= 'group='.$currentgroup.'&';
+$pbarurl .= 'group='.$currentgroup.'&';
+
+if ($currentgroup) {
+ $groupsql = " LEFT JOIN {$CFG->prefix}groups_members gm ON gm.userid = u.id ";
+ $groupwheresql = " AND gm.groupid = $currentgroup ";
+} else {
+ $groupsql = '';
+ $groupwheresql = '';
+}
+
// Grab the grade_tree for this course
$gtree = new grade_tree($courseid, true, false, $aggregation_position);
FROM {$CFG->prefix}grade_grades g RIGHT OUTER JOIN
{$CFG->prefix}user u ON (u.id = g.userid AND g.itemid = $sortitemid)
LEFT JOIN {$CFG->prefix}role_assignments ra ON u.id = ra.userid
+ $groupsql
WHERE ra.roleid in ($gradebookroles)
- AND ra.contextid ".get_related_contexts_string($context)."
+ $groupwheresql
+ AND ra.contextid ".get_related_contexts_string($context)."
ORDER BY g.finalgrade $sortorder";
$users = get_records_sql($sql, $perpage * $page, $perpage);
} else {
// default sort
// get users sorted by lastname
- $users = get_role_users(@implode(',', $CFG->gradebookroles), $context, false, 'u.id, u.firstname, u.lastname', 'u.'.$sortitemid .' '. $sortorder, false, $page * $perpage, $perpage);
+ $users = get_role_users(@implode(',', $CFG->gradebookroles), $context, false, 'u.id, u.firstname, u.lastname', 'u.'.$sortitemid .' '. $sortorder, false, $page * $perpage, $perpage, $currentgroup);
+ // need to cut users down by groups
+
}
/// count total records for paging
FROM {$CFG->prefix}grade_grades g RIGHT OUTER JOIN
{$CFG->prefix}user u ON (u.id = g.userid AND g.itemid = $sortitemid)
LEFT JOIN {$CFG->prefix}role_assignments ra ON u.id = ra.userid
+ $groupsql
WHERE ra.roleid in ($gradebookroles)
- AND ra.contextid ".get_related_contexts_string($context);
+ $groupwheresql
+ AND ra.contextid ".get_related_contexts_string($context);
$numusers = count_records_sql($countsql);
// print_object($users); // debug
{$CFG->prefix}grade_grades g
LEFT JOIN {$CFG->prefix}grade_grades_text gt ON g.id = gt.gradeid
WHERE g.itemid = gi.id
- AND gi.courseid = $courseid $userselect";
+ AND gi.courseid = $courseid $userselect";
///print_object($grades); //debug
if ($type == 'filler' or $type == 'fillerfirst' or $type == 'fillerlast') {
$headerhtml .= '<td class="'.$type.$catlevel.'" '.$colspan.'> </td>';
-
} else if ($type == 'category') {
$headerhtml .= '<td class="category'.$catlevel.'" '.$colspan.'>'.$element['object']->get_name();
}
$headerhtml .= '</td>';
-
} else {
if ($element['object']->id == $sortitemid) {
if ($sortorder == 'ASC') {
$items[$element['object']->sortorder] =& $element['object'];
}
+
}
$headerhtml .= '</tr>';
if (isset($finalgrades[$userid][$item->id])) {
- $gradeval = $finalgrades[$userid][$item->id]->finalgrade;
-
- // trim trailing "0"s
- if (isset($gradeval)) {
- if ($gradeval != 0) {
- $gradeval = trim($gradeval, ".0");
- } else {
- $gradeval = 0;
- }
- }
+ $gradeval = get_grade_clean($finalgrades[$userid][$item->id]->finalgrade);
$grade = new grade_grades($finalgrades[$userid][$item->id], false);
$grade->feedback = $finalgrades[$userid][$item->id]->feedback;
if ((int) $gradeval < 1) {
$studentshtml .= '-';
} else {
- $studentshtml .= round($scales[$gradeval-1], $decimals);
+ $studentshtml .= $scales[$gradeval-1];
}
} else {
// no such scale, throw error?
$studentshtml .= '</tr>';
}
+// if user preference to display group sum
+if ($currentgroup && ($displaygrouptotals || 1)) {
+
+/** SQL for finding group sum */
+ $SQL = "SELECT g.itemid, SUM(g.finalgrade) as sum
+ FROM {$CFG->prefix}grade_items gi LEFT JOIN
+ {$CFG->prefix}grade_grades g ON gi.id = g.itemid RIGHT OUTER 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 = $courseid
+ $groupwheresql
+ AND ra.roleid in ($gradebookroles)
+ AND ra.contextid ".get_related_contexts_string($context)."
+ GROUP BY g.itemid";
+
+ $groupsum = array();
+ $sums = get_records_sql($SQL);
+ foreach ($sums as $itemid => $csum) {
+ $groupsum[$itemid] = $csum;
+ }
+
+ $groupsumhtml = '<tr><th>Group total</th>';
+ foreach ($items as $item) {
+ if (!isset($groupsum[$item->id])) {
+ $groupsumhtml .= '<td>-</td>';
+ } else {
+ $sum = $groupsum[$item->id];
+ $groupsumhtml .= '<td>'.get_grade_clean($sum->sum).'</td>';
+ }
+ }
+ $groupsumhtml .= '</tr>';
+} else {
+ $groupsumhtml = '';
+}
+
+// user preference not implemented yet
+if ($displaytotals || 1) {
+
+/** SQL for finding the SUM grades of all visible users ($CFG->gradebookroles) */
+
+ $SQL = "SELECT g.itemid, SUM(g.finalgrade) as sum
+ FROM {$CFG->prefix}grade_items gi LEFT JOIN
+ {$CFG->prefix}grade_grades g ON gi.id = g.itemid RIGHT OUTER JOIN
+ {$CFG->prefix}user u ON u.id = g.userid LEFT JOIN
+ {$CFG->prefix}role_assignments ra ON u.id = ra.userid
+ WHERE gi.courseid = $courseid
+ AND ra.roleid in ($gradebookroles)
+ AND ra.contextid ".get_related_contexts_string($context)."
+ GROUP BY g.itemid";
+
+ $classsum = array();
+ $sums = get_records_sql($SQL);
+ foreach ($sums as $itemid => $csum) {
+ $classsum[$itemid] = $csum;
+ }
+
+ $gradesumhtml = '<tr><th>Total</th>';
+ foreach ($items as $item) {
+ if (!isset($classsum[$item->id])) {
+ $gradesumhtml .= '<td>-</td>';
+ } else {
+ $sum = $classsum[$item->id];
+ $gradesumhtml .= '<td>'.get_grade_clean($sum->sum).'</td>';
+ }
+ }
+ $gradesumhtml .= '</tr>';
+} else {
+ $gradesumhtml = '';
+}
+
$reporthtml = "<table class=\"boxaligncenter\">$headerhtml";
$reporthtml .= $studentshtml;
+$reporthtml .= $groupsumhtml;
+$reporthtml .= $gradesumhtml;
$reporthtml .= "</table>";
// print submit button
echo '<div style="text-align:center"><input type="submit" value="'.get_string('update').'" /></div>';
echo '</div></form>';
}
+
+// remove trailing 0s and "."s
+function get_grade_clean($gradeval) {
+
+ if ($gradeval != 0) {
+ $gradeval = trim($gradeval, ".0");
+ } else {
+ $gradeval = 0;
+ }
+
+ return $gradeval;
+}
?>