From 41f22daa71d7fc8d5a5111f963e4435382b643bd Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Wed, 19 Sep 2007 15:37:46 +0000 Subject: [PATCH] MDL-11353 Completed the implementation. This included a new method in grade_item: get_displaytype(), since that value could be set to default, and we must then look up to course, then site values. And the get_letter() method in grade_grade has been modified to first check the grade_letters table. All works like a dream! --- grade/edit/gradedisplay/gradedisplay_form.php | 2 +- grade/report/grader/lib.php | 8 +++-- grade/report/lib.php | 31 +++++++++++++------ lib/grade/grade_item.php | 19 ++++++++++++ 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/grade/edit/gradedisplay/gradedisplay_form.php b/grade/edit/gradedisplay/gradedisplay_form.php index e2f02d8a76..50914a28c8 100644 --- a/grade/edit/gradedisplay/gradedisplay_form.php +++ b/grade/edit/gradedisplay/gradedisplay_form.php @@ -74,7 +74,7 @@ class edit_grade_display_form extends moodleform { $mform->addElement('text', $gradelettername, $gradeletterstring); $mform->setHelpButton($gradelettername, array(false, $gradeletterstring, false, true, false, $gradeletterhelp)); $mform->setDefault($gradelettername, $letter); - $mform->setType($gradelettername, PARAM_ALPHANUM); + $mform->setType($gradelettername, PARAM_RAW); $mform->disabledIf($gradelettername, 'override'); $mform->addElement('select', $gradeboundaryname, $gradeboundarystring, $percentages); diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index 2391b73f64..bee29f9153 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -727,7 +727,7 @@ class grade_report_grader extends grade_report { } else { // Percentage format if specified by user (check each item for a set preference) - $gradedisplaytype = $this->get_pref('gradedisplaytype', $item->id); + $gradedisplaytype = $item->get_displaytype(); $percentsign = ''; $grademin = $item->grademin; @@ -897,8 +897,10 @@ class grade_report_grader extends grade_report { } $decimalpoints = $this->get_pref('decimalpoints', $item->id); + // Determine which display type to use for this average - $gradedisplaytype = $this->get_pref('gradedisplaytype', $item->id); + $gradedisplaytype = $item->get_displaytype(); + if ($USER->gradeediting[$this->courseid]) { $displaytype = GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL; } elseif ($averagesdisplaytype == GRADE_REPORT_PREFERENCE_INHERIT) { // Inherit specific column or general preference @@ -974,7 +976,7 @@ class grade_report_grader extends grade_report { $decimalpoints = $this->get_pref('decimalpoints', $item->id); // Determine which display type to use for this range - $gradedisplaytype = $this->get_pref('gradedisplaytype', $item->id); + $gradedisplaytype = $item->get_displaytype(); if ($USER->gradeediting[$this->courseid]) { $displaytype = GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL; diff --git a/grade/report/lib.php b/grade/report/lib.php index fda0f7b543..b9f8e3692f 100755 --- a/grade/report/lib.php +++ b/grade/report/lib.php @@ -118,7 +118,7 @@ class grade_report { } else { $this->course = get_record('course', 'id', $this->courseid); } - + $this->gpr = $gpr; $this->context = $context; $this->page = $page; @@ -245,16 +245,27 @@ class grade_report { } /** - * Fetches and returns an array of grade letters indexed by their grade boundaries, as stored in preferences. + * Fetches and returns an array of grade letters indexed by their grade boundaries, as stored in course item settings or site preferences. * @return array */ function get_grade_letters() { + global $COURSE; $letters = array(); - for ($i = 1; $i <= 10; $i++) { - $boundary = grade_report::get_pref('gradeboundary' . $i); - $letter = grade_report::get_pref('gradeletter' . $i); - if (!is_null($boundary) && $boundary != -1 && !empty($letter)) { - $letters[$boundary] = $letter; + $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); + + if ($records = get_records('grade_letters', 'contextid', $context->id)) { + foreach ($records as $record) { + if (!is_null($record->lowerboundary) && !empty($record->letter)) { + $letters[$record->lowerboundary] = $record->letter; + } + } + } else { + for ($i = 1; $i <= 10; $i++) { + $boundary = grade_report::get_pref('gradeboundary' . $i); + $letter = grade_report::get_pref('gradeletter' . $i); + if (!is_null($boundary) && $boundary != -1 && !empty($letter)) { + $letters[$boundary] = $letter; + } } } return $letters; @@ -328,7 +339,7 @@ class grade_report { } $coursemodule = get_coursemodule_from_instance($itemmodule, $iteminstance, $this->course->id); - + $dir = $CFG->dirroot . "/mod/$itemmodule/"; $url = $CFG->wwwroot . "/mod/$itemmodule/"; @@ -339,12 +350,12 @@ class grade_report { } $url .= "?id=$coursemodule->id"; - + // MDL-11274, Hide grades in the grader report if the current grader doesn't have 'moodle/grade:viewhidden' if (has_capability('moodle/grade:viewhidden', get_context_instance(CONTEXT_COURSE, $coursemodule->course))) { return '' . $modulename . ''; } else { - return $modulename; + return $modulename; } } diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 126fcc9645..ad8620328a 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -1685,5 +1685,24 @@ class grade_item extends grade_object { return true; } } + + /** + * Returns the value of the display type. It can be set at 3 levels: grade_item, course and site. The lowest level overrides the higher ones. + * @return int Display type + */ + function get_displaytype() { + global $CFG; + $course_gradedisplaytype = get_field('grade_items', 'display', 'courseid', $this->courseid, 'itemtype', 'course'); + $site_gradedisplaytype = $CFG->grade_report_gradedisplaytype; + $default_gradedisplaytype = $this->display; + + if ($this->display == GRADE_REPORT_PREFERENCE_DEFAULT) { + $default_gradedisplaytype = $course_gradedisplaytype; + if ($course_gradedisplaytype == GRADE_REPORT_PREFERENCE_DEFAULT) { + $default_gradedisplaytype = $site_gradedisplaytype; + } + } + return $default_gradedisplaytype; + } } ?> -- 2.39.5