diff --git a/grade/report.php b/grade/report.php index b88478d6deb..7448c15c739 100644 --- a/grade/report.php +++ b/grade/report.php @@ -28,7 +28,7 @@ $courseid = required_param('id'); // course id $report = optional_param('report', 'user', PARAM_FILE); // course id - + $edit = optional_param('edit', -1, PARAM_BOOL); // sticky editting mode /// Make sure they can even access this course @@ -84,11 +84,40 @@ $crumbs[] = array('name' => $strgrades, 'link' => '', 'type' => 'misc'); $crumbs[] = array('name' => $reportnames[$report], 'link' => '', 'type' => 'misc'); - $navigation = build_navigation($crumbs); + $navigation = build_navigation($crumbs); + + // build buttons here + /// setting up editting mode + if (!isset($USER->gradeediting)) { + $USER->gradeediting = 0; + } + + if (($edit == 1) and confirm_sesskey()) { + $USER->gradeediting = 1; + } else if (($edit == 0) and confirm_sesskey()) { + $USER->gradeediting = 0; + } + + // params for the turn editting on button + $options['id'] = $courseid; + $options['report'] = $report; + + if ($USER->gradeediting) { + $options['edit'] = 0; + $string = get_string('turneditingoff'); + } else { + $options['edit'] = 1; + $string = get_string('turneditingon'); + } + + $options['sesskey'] = sesskey(); + $link = 'report.php'; + + // turn eidtting on and off buttons + $buttons = print_single_button($link, $options, $string, 'get', '_self', true); print_header_simple($strgrades.':'.$reportnames[$report], ':'.$strgrades, $navigation, - '', '', true, '', navmenu($course)); - + '', '', true, $buttons, navmenu($course)); /// Print the report selector at the top if there is more than one report diff --git a/grade/report/grader/category.php b/grade/report/grader/category.php index 2c8e9e1b253..d48cac9ea54 100644 --- a/grade/report/grader/category.php +++ b/grade/report/grader/category.php @@ -64,7 +64,7 @@ $crumbs[] = array('name' => $strcategoriesedit, 'link' => '', 'type' => 'misc'); $navigation = build_navigation($crumbs); -print_header_simple($strgrades.': '.$strgraderreport.': '.$strcategoriesedit, $navigation, +zprint_header_simple($strgrades.': '.$strgraderreport.': '.$strcategoriesedit, $navigation, '', '', true, '', navmenu($course)); $tree = new grade_tree($param->courseid); diff --git a/grade/report/grader/index.php b/grade/report/grader/index.php index c336ff1df4d..6aaeb899fd9 100644 --- a/grade/report/grader/index.php +++ b/grade/report/grader/index.php @@ -5,12 +5,47 @@ require_once($CFG->libdir.'/tablelib.php'); include_once($CFG->libdir.'/gradelib.php'); +/// processing posted grades here + +if ($data = data_submitted()) { + foreach ($data as $varname => $postedgrade) { + // skip, not a grade + if (!strstr($varname, 'grade')) { + continue; + } + // clean + $postedgrade = clean_param($postedgrade, PARAM_NUMBER); + + $gradeinfo = explode("_", $varname); + + $grade = new object(); + $grade->userid = $gradeinfo[1]; + $gradeitemid = $gradeinfo[2]; + $grade->rawgrade = $postedgrade; + + // put into grades array + $grades[$gradeitemid][] = $grade; + } +} + +// now we update the raw grade for each posted grades +if (!empty($grades)) { + foreach ($grades as $gradeitemid => $itemgrades) { + foreach ($itemgrades as $gradedata) { + echo "gradeitemid is $gradeitemid"; + $gradeitem = new grade_item(array('id'=>$gradeitemid), true); + $gradeitem->update_raw_grade($gradedata->userid, $gradedata->rawgrade); + } + } +} + // 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_ALPHANUM); // sort by which grade item $report = optional_param('report', 0, PARAM_ALPHANUM); +$perpage = optional_param('perpage', 3, PARAM_INT); // number of users on a page // setting the sort order, this depends on last state // all this should be in the new table class that we might need to use @@ -39,18 +74,24 @@ if ($sortitemid) { $SESSION->gradeuserreport->sortitemid = $sortitemid; } else { // not requesting sort, use last setting (for paging) - $sortitemid = $SESSION->gradeuserreport->sortitemid; - $sortorder = $SESSION->gradeuserreport->sort; + + if (isset($SESSION->gradeuserreport->sortitemid)) { + $sortitemid = $SESSION->gradeuserreport->sortitemid; + } + if (isset($SESSION->gradeuserreport->sort)) { + $sortorder = $SESSION->gradeuserreport->sort; + } else { + $sortorder = 'ASC'; + } } /// end of setting sort order code + // 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; @@ -124,23 +165,22 @@ print_paging_bar($numusers, $page, $perpage, $pbarurl); if ($gtree = new grade_tree($courseid, false)) { // 1. Fetch all top-level categories for this course, with all children preloaded, sorted by sortorder - $tree = $gtree->tree_filled; + $tree = $gtree->tree_filled; if (empty($gtree->tree_filled)) { debugging("The tree_filled array wasn't initialised, grade_tree could not display the grades correctly."); - return false; } // Fetch array of students enroled in this course if (!$context = get_context_instance(CONTEXT_COURSE, $gtree->courseid)) { - return false; + return false; } //$users = get_role_users(@implode(',', $CFG->gradebookroles), $context); $topcathtml = '
';
} else {
@@ -150,7 +190,7 @@ if ($gtree = new grade_tree($courseid, false)) {
$lastarrow = '';
}
- if ($sortitemid == 'firstname') {
+ if ($sortitemid === 'firstname') {
if ($sortorder == 'ASC') {
$firstarrow = '
';
} else {
@@ -212,14 +252,56 @@ if ($gtree = new grade_tree($courseid, false)) {
foreach ($users as $userid => $user) {
$studentshtml .= '