From: toyomoyo Date: Fri, 22 Jun 2007 09:18:31 +0000 (+0000) Subject: bits of the grader report X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=d9a3e38b3a203dc8f45601201faba84cbf31f7a4;p=moodle.git bits of the grader report --- diff --git a/grade/report/grader/index.php b/grade/report/grader/index.php index 4062363fdd..672fc9bbb8 100644 --- a/grade/report/grader/index.php +++ b/grade/report/grader/index.php @@ -5,14 +5,50 @@ require_once($CFG->libdir.'/tablelib.php'); include_once($CFG->libdir.'/gradelib.php'); - // get the params $courseid = required_param('id', PARAM_INT); $context = get_context_instance(CONTEXT_COURSE, $courseid); $page = optional_param('page', 0, PARAM_INT); -$sortitemid = optional_param('sortitemid', 0, PARAM_INT); // sort by which grade item +$sortitemid = optional_param('sortitemid', 0, PARAM_ALPHANUM); // sort by which grade item + +// setting the sort order, this depends on last state +// all this should be in the new table class that we might need to use +// for displaying grades + +// already in not requesting sort, i.e. normal paging + +if ($sortitemid) { + if (!isset($SESSION->gradeuserreport->sort)) { + $sortorder = $SESSION->gradeuserreport->sort = 'ASC'; + } else { + // this is the first sort, i.e. by last name + if (!isset($SESSION->gradeuserreport->sortitemid)) { + $sortorder = $SESSION->gradeuserreport->sort = 'ASC'; + } else if ($SESSION->gradeuserreport->sortitemid == $sortitemid) { + // same as last sort + if ($SESSION->gradeuserreport->sort == 'ASC') { + $sortorder = $SESSION->gradeuserreport->sort = 'DESC'; + } else { + $sortorder = $SESSION->gradeuserreport->sort = 'ASC'; + } + } else { + $sortorder = $SESSION->gradeuserreport->sort = 'ASC'; + } + } + $SESSION->gradeuserreport->sortitemid = $sortitemid; +} else { + // not requesting sort, use last setting (for paging) + $sortitemid = $SESSION->gradeuserreport->sortitemid; + $sortorder = $SESSION->gradeuserreport->sort; +} + +/// end of setting sort order code -$perpage = 10; +// first make sure we have all final grades +// TODO: check that no grade_item has needsupdate set +grade_update_final_grades($courseid); + +$perpage = 3; // roles to be displaye in the gradebook $gradebookroles = $CFG->gradebookroles; @@ -23,22 +59,32 @@ $gradebookroles = $CFG->gradebookroles; // this is check for user roles because there could be some users with grades // but not supposed to be displayed -if ($sortitemid) { - - $sql = "SELECT u.id, u.firstname, u.lastname, g.itemid, g.finalgrade +if (is_numeric($sortitemid)) { + $sql = "SELECT u.id, u.firstname, u.lastname 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 WHERE ra.roleid in ($gradebookroles) AND ra.contextid ".get_related_contexts_string($context)." - ORDER BY g.finalgrade ASC"; + ORDER BY g.finalgrade $sortorder"; $users = get_records_sql($sql, $perpage * $page, $perpage); -} else { - +} else { + // default sort // get users sorted by lastname - $users = get_role_users(@implode(',', $CFG->gradebookroles), $context, false, '', 'u.lastname ASC', false, 0, $perpage); + $users = get_role_users(@implode(',', $CFG->gradebookroles), $context, false, 'u.id, u.firstname, u.lastname', 'u.'.$sortitemid .' '. $sortorder, false, $page * $perpage, $perpage); } -print_object($users); + +/// count total records for paging + +$countsql = "SELECT COUNT(DISTINCT u.id) + 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 + WHERE ra.roleid in ($gradebookroles) + AND ra.contextid ".get_related_contexts_string($context); +$numusers = count_records_sql($countsql); + +// print_object($users); // debug // phase 2 sql, we supply the userids in this query, and get all the grades // pulls out all the grades, this does not need to worry about paging @@ -49,19 +95,27 @@ $sql = "SELECT g.id, g.itemid, g.userid, g.finalgrade AND gi.courseid = $courseid AND g.userid in (".implode(",", array_keys($users)).")"; -$grades = get_records_sql($sql); - -print_object($grades); +///print_object($grades); //debug $finalgrades = array(); // needs to be formatted into an array for easy retrival -foreach ($grades as $grade) { - $finalgrades[$grade->userid][$grade->itemid] = $grade->finalgrade; - + +if ($grades = get_records_sql($sql)) { + foreach ($grades as $grade) { + $finalgrades[$grade->userid][$grade->itemid] = $grade->finalgrade; + } } print_heading('Grader Report'); +// base url for sorting by first/last name +$baseurl = 'report.php?id='.$courseid.'&report=grader&page='.$page; +// base url for paging +$pbarurl = 'report.php?id='.$courseid.'&report=grader&'; + +print_paging_bar($numusers, $page, $perpage, $pbarurl); + +/// With the users in an sorted array and grades fetched, we can not print the main html table if ($gtree = new grade_tree($courseid, false)) { // 1. Fetch all top-level categories for this course, with all children preloaded, sorted by sortorder @@ -80,7 +134,30 @@ if ($gtree = new grade_tree($courseid, false)) { $topcathtml = ' '; $cathtml = ' '; - $itemhtml = ' '; + + if ($sortitemid == 'lastname') { + if ($sortorder == 'ASC') { + $lastarrow = ' '; + } else { + $lastarrow = ' '; + } + } else { + $lastarrow = ''; + } + + if ($sortitemid == 'firstname') { + if ($sortorder == 'ASC') { + $firstarrow = ' '; + } else { + $firstarrow = ' '; + } + } else { + $firstarrow = ''; + } + + // first name/last name column + $itemhtml = 'Firstname '. $firstarrow. '/ Lastname '. $lastarrow .''; + $items = array(); foreach ($tree as $topcat) { @@ -92,7 +169,17 @@ if ($gtree = new grade_tree($courseid, false)) { foreach ($cat['children'] as $item) { $itemcount++; $catitemcount++; - $itemhtml .= '' . $item['object']->itemname . ''; + + if ($item['object']->id == $sortitemid) { + if ($sortorder == 'ASC') { + $arrow = ' '; + } else { + $arrow = ' '; + } + } else { + $arrow = ''; + } + $itemhtml .= ''. $item['object']->itemname . '' . $arrow. ''; $items[] = $item; }