From 7f331f89142a30fea30b1bd8e6f3fdd816e4d031 Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Tue, 26 Jun 2007 07:32:31 +0000 Subject: [PATCH] some fixes for grader report --- grade/report.php | 37 ++++++++- grade/report/grader/category.php | 2 +- grade/report/grader/index.php | 128 +++++++++++++++++++++++++++---- grade/report/user/index.php | 5 +- 4 files changed, 150 insertions(+), 22 deletions(-) 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 = ' '; $cathtml = ' '; - - if ($sortitemid == 'lastname') { + + if ($sortitemid === 'lastname') { if ($sortorder == 'ASC') { $lastarrow = ' '; } 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 .= '' . $user->firstname . ' ' . $user->lastname . ''; foreach ($items as $item) { - // finalgrades[$userid][$itemid] could be null because of the outer join - // in this case it's different than a 0 + + + $studentshtml .= ''; + if (isset($finalgrades[$userid][$item['object']->id])) { - $studentshtml .= '' . $finalgrades[$userid][$item['object']->id] . '' . "\n"; + $gradeval = $finalgrades[$userid][$item['object']->id]; } else { - $studentshtml .= '-' . "\n"; + $gradeval = '-'; } - } + + // if in editting mode, we need to print either a text box + // or a drop down (for scales) + if ($USER->gradeediting) { + if ($item['object']->scaleid) { + if ($scale = get_record('scale', 'id', $item['object']->scaleid)) { + $scales = explode(",", $scale->scale); + // reindex because scale is off 1 + $i = 0; + foreach ($scales as $scaleoption) { + $i++; + $scaleopt[$i] = $scaleoption; + } + $studentshtml .= choose_from_menu ($scaleopt, 'grade_'.$userid.'_'.$item['object']->id, $gradeval, get_string('nograde'), '', -1, true); + } + } else { + $studentshtml .= ''; + } + } else { + // finalgrades[$userid][$itemid] could be null because of the outer join + // in this case it's different than a 0 + if ($item['object']->scaleid) { + if ($scale = get_record('scale', 'id', $item['object']->scaleid)) { + $scales = explode(",", $scale->scale); + + // invalid grade if gradeval < 1 + if ((int) $gradeval < 1) { + $studentshtml .= '-'; + } else { + $studentshtml .= $scales[$gradeval-1]; + } + } else { + // no such scale, throw error? + } + } else { + $studentshtml .= $gradeval; + } + } + + $studentshtml .= '' . "\n"; + } $studentshtml .= ''; } @@ -230,8 +312,24 @@ if ($gtree = new grade_tree($courseid, false)) { $reporthtml = "$topcathtml$cathtml$itemhtml"; $reporthtml .= $studentshtml; $reporthtml .= "
"; + + // print submit button + if ($USER->gradeediting) { + echo '
'; + echo '
'; + echo ''; + echo ''; + echo ''; + } echo $reporthtml; + + // print submit button + if ($USER->gradeediting) { + echo ''; + echo '
'; + } + } ?> diff --git a/grade/report/user/index.php b/grade/report/user/index.php index 07e042856c1..f08b5deafd3 100644 --- a/grade/report/user/index.php +++ b/grade/report/user/index.php @@ -9,7 +9,7 @@ include_once($CFG->libdir.'/gradelib.php'); $courseid = required_param('id', PARAM_INT); if (!$userid = optional_param('user', 0, PARAM_INT)) { // current user - $userid = $USER->id; + $userid = $USER->id; } @@ -22,7 +22,7 @@ if ($gradetree = new grade_tree($courseid)) { * Table has 6 columns *| pic | itemname/description | grade (grade_final) | percentage | rank | feedback | */ - $baseurl = $CFG->wwwroot.'/grade/report?id='.$id.'&userid='.$userid; + $baseurl = $CFG->wwwroot.'/grade/report?id='.$courseid.'&userid='.$userid; // setting up table headers $tablecolumns = array('itempic', 'itemname', 'grade', 'percentage', 'rank', 'feedback'); @@ -88,6 +88,7 @@ if ($gradetree = new grade_tree($courseid)) { if ($gradeitem->gradetype == 1) { // processing numeric grade if ($grade_grades->finalgrade) { + $percentage = (($grade_grades->finalgrade / $gradeitem->grademax) * 100).'%'; } else { $percentage = '-'; }