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!
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
+21
-10
@@ -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 '<a href="' . $url . '">' . $modulename . '</a>';
|
||||
} else {
|
||||
return $modulename;
|
||||
return $modulename;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user