From 32b97bb24aaeb59d3acfcf9298ce39caf8231c39 Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Wed, 18 Jul 2007 11:34:55 +0000 Subject: [PATCH] MDL-10490 Letter type implemented --- grade/edit/item_form.php | 18 +++-- grade/report/grader/lib.php | 33 +++++--- grade/report/grader/preferences.php | 6 +- grade/report/grader/preferences_form.php | 98 ++++++++++++++++++------ grade/report/grader/settings.php | 44 ++++++++--- grade/report/lib.php | 16 ++++ lang/en_utf8/grades.php | 5 ++ lib/grade/grade_grades.php | 40 ++++++++++ lib/gradelib.php | 11 +++ version.php | 2 +- 10 files changed, 219 insertions(+), 54 deletions(-) diff --git a/grade/edit/item_form.php b/grade/edit/item_form.php index f37fc45b96..d94b5801cb 100644 --- a/grade/edit/item_form.php +++ b/grade/edit/item_form.php @@ -4,7 +4,7 @@ require_once $CFG->libdir.'/formslib.php'; class edit_item_form extends moodleform { function definition() { - global $COURSE; + global $COURSE, $CFG; $mform =& $this->_form; @@ -74,17 +74,21 @@ class edit_item_form extends moodleform { /// user preferences $mform->addElement('header', 'general', get_string('userpreferences', 'grades')); - - $mform->addElement('select', 'pref_gradedisplaytype', get_string('gradedisplaytype', 'grades'), - array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), + $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'))); + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')); + $label = get_string('gradedisplaytype', 'grades') . ' (' . get_string('default', 'grades') + . ': ' . $options[$CFG->grade_report_gradedisplaytype] . ')'; + $mform->addElement('select', 'pref_gradedisplaytype', $label, $options); $mform->setHelpButton('pref_gradedisplaytype', array(false, get_string('gradedisplaytype', 'grades'), false, true, false, get_string("config_gradedisplaytype", 'grades'))); $mform->setDefault('pref_gradedisplaytype', GRADE_REPORT_PREFERENCE_DEFAULT); - $mform->addElement('select', 'pref_decimalpoints', get_string('decimalpoints', 'grades'), - array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), 0, 1, 2, 3, 4, 5)); + $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), 0, 1, 2, 3, 4, 5); + $label = get_string('decimalpoints', 'grades') . ' (' . get_string('default', 'grades') + . ': ' . $options[$CFG->grade_report_decimalpoints] . ')'; + $mform->addElement('select', 'pref_decimalpoints', $label, $options); $mform->setHelpButton('pref_decimalpoints', array(false, get_string('decimalpoints', 'grades'), false, true, false, get_string("config_decimalpoints", 'grades'))); $mform->setDefault('pref_decimalpoints', GRADE_REPORT_PREFERENCE_DEFAULT); diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index ebf07662bc..b7407eab71 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -689,18 +689,16 @@ class grade_report_grader extends grade_report { $gradedisplaytype = $this->get_pref('gradedisplaytype', $item->id); $percentsign = ''; + $grademin = $this->finalgrades[$userid][$item->id]->grademin; + $grademax = $this->finalgrades[$userid][$item->id]->grademax; if ($gradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE) { + if (!is_null($gradeval)) { + $gradeval = grade_grades::standardise_score($gradeval, $grademin, $grademax, 0, 100); + } $percentsign = '%'; } - // Convert the grade to percentage if needed - if ($gradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE && !is_null($gradeval)) { - $grademin = $this->finalgrades[$userid][$item->id]->grademin; - $grademax = $this->finalgrades[$userid][$item->id]->grademax; - $gradeval = grade_grades::standardise_score($gradeval, $grademin, $grademax, 0, 100); - } - // If feedback present, surround grade with feedback tooltip if (!empty($grade->feedback)) { if ($grade->feedbackformat == 1) { @@ -712,9 +710,13 @@ class grade_report_grader extends grade_report { $studentshtml .= ''; } - // finalgrades[$userid][$itemid] could be null because of the outer join - // in this case it's different than a 0 - if ($item->scaleid && !empty($scales_array[$item->scaleid]) && $gradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL) { + if ($gradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER) { + $letters = grade_report::get_grade_letters(); + if (!is_null($gradeval)) { + $studentshtml .= grade_grades::get_letter($letters, $gradeval, $grademin, $grademax); + } + } else if ($item->scaleid && !empty($scales_array[$item->scaleid]) + && $gradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL) { $scale = $scales_array[$item->scaleid]; $scales = explode(",", $scale->scale); @@ -835,7 +837,11 @@ class grade_report_grader extends grade_report { if ($displaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE) { $gradeval = grade_grades::standardise_score($rawvalue, $item->grademin, $item->grademax, 0, 100); $gradehtml = round($gradeval, $decimalpoints) . '%'; + } elseif ($displaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER) { + $letters = grade_report::get_grade_letters(); + $gradehtml = grade_grades::get_letter($letters, $gradeval, $item->grademin, $item->grademax); } + $groupavghtml .= ''.$gradehtml.''; } } @@ -927,6 +933,9 @@ class grade_report_grader extends grade_report { if ($displaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE) { $gradeval = grade_grades::standardise_score($rawvalue, $item->grademin, $item->grademax, 0, 100); $gradehtml = round($gradeval, $decimalpoints) . '%'; + } elseif ($displaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER) { + $letters = grade_report::get_grade_letters(); + $gradehtml = grade_grades::get_letter($letters, $gradeval, $item->grademin, $item->grademax); } $gradeavghtml .= ''.$gradehtml.''; @@ -967,6 +976,10 @@ class grade_report_grader extends grade_report { } elseif ($displaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE) { $grademin = 0; $grademax = 100; + } elseif ($displaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER) { + $letters = grade_report::get_grade_letters(); + $grademin = end($letters); + $grademax = reset($letters); } $scalehtml .= ''. $grademin.'-'. $grademax.''; diff --git a/grade/report/grader/preferences.php b/grade/report/grader/preferences.php index f2ade4a847..84519dba4d 100644 --- a/grade/report/grader/preferences.php +++ b/grade/report/grader/preferences.php @@ -47,7 +47,11 @@ if ($form = data_submitted()) { set_user_preference('calendar_persistflt', intval($value)); break; default: - set_user_preference($preference, $value); + if ($value == GRADE_REPORT_PREFERENCE_DEFAULT) { + unset_user_preference($preference); + } else { + set_user_preference($preference, $value); + } break; } } diff --git a/grade/report/grader/preferences_form.php b/grade/report/grader/preferences_form.php index 348ae9488e..975a870522 100644 --- a/grade/report/grader/preferences_form.php +++ b/grade/report/grader/preferences_form.php @@ -17,52 +17,100 @@ class grader_report_preferences_form extends moodleform { $systemcontext = get_context_instance(CONTEXT_SYSTEM); + $strgradeboundary = get_string('gradeboundary', 'grades'); + $strconfiggradeboundary = get_string('configgradeboundary', 'grades'); + $strgradeletter = get_string('gradeletter', 'grades'); + $strconfiggradeletter = get_string('configgradeletter', 'grades'); + $strdefault = get_string('default', 'grades'); + $strinherit = get_string('inherit', 'grades'); + $stryes = get_string('yes'); + $strno = get_string('no'); + + $percentages = array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_PREFERENCE_UNUSED => get_string('unused', 'grades')); + for ($i=100; $i > -1; $i--) { + $percentages[$i] = "$i%"; + } + + $checkbox_default = array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, 0 => $strno, 1 => $stryes); + /// form definition with preferences defaults //-------------------------------------------------------------------------------- - $preferences = array('bulkcheckboxes' => 'advcheckbox', - 'enableajax' => 'advcheckbox', - 'showcalculations' => 'advcheckbox', - 'showeyecons' => 'advcheckbox', - 'showaverages' => 'advcheckbox', - 'showgroups' => 'advcheckbox', - 'showlocks' => 'advcheckbox', - 'showranges' => 'advcheckbox', - 'quickgrading' => 'advcheckbox', - 'quickfeedback' => 'advcheckbox', - 'showuserimage' => 'advcheckbox', - 'meanselection' => array(GRADE_AGGREGATE_MEAN_ALL => get_string('meanall', 'grades'), + $preferences = array('bulkcheckboxes' => $checkbox_default, + 'enableajax' => $checkbox_default, + 'showcalculations' => $checkbox_default, + 'showeyecons' => $checkbox_default, + 'showaverages' => $checkbox_default, + 'showgroups' => $checkbox_default, + 'showlocks' => $checkbox_default, + 'showranges' => $checkbox_default, + 'quickgrading' => $checkbox_default, + 'quickfeedback' => $checkbox_default, + 'showuserimage' => $checkbox_default, + 'meanselection' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_AGGREGATE_MEAN_ALL => get_string('meanall', 'grades'), GRADE_AGGREGATE_MEAN_GRADED => get_string('meangraded', 'grades')), - 'aggregationposition' => array(GRADE_REPORT_AGGREGATION_POSITION_LEFT => get_string('left', 'grades'), + 'aggregationposition' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_AGGREGATION_POSITION_LEFT => get_string('left', 'grades'), GRADE_REPORT_AGGREGATION_POSITION_RIGHT => get_string('right', 'grades')), - 'aggregationview' => array(GRADE_REPORT_AGGREGATION_VIEW_FULL => get_string('full', 'grades'), + 'aggregationview' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_AGGREGATION_VIEW_FULL => get_string('full', 'grades'), GRADE_REPORT_AGGREGATION_VIEW_COMPACT => get_string('compact', 'grades')), - 'gradedisplaytype' => array(GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')), - 'averagesdisplaytype' => array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), + 'gradedisplaytype' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')), + 'averagesdisplaytype' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')), - 'rangesdisplaytype' => array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')), + 'rangesdisplaytype' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')), - 'averagesdecimalpoints' => array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')), + 'averagesdecimalpoints' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, + 0, 1, 2, 3, 4, 5), + 'rangesdecimalpoints' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, + GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, 0, 1, 2, 3, 4, 5), - 'rangesdecimalpoints' => array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), + 'decimalpoints' => array(GRADE_REPORT_PREFERENCE_DEFAULT => $strdefault, 0, 1, 2, 3, 4, 5), - 'decimalpoints' => array(0, 1, 2, 3, 4, 5), 'studentsperpage' => 'text'); + for ($i = 1; $i <= 10; $i++) { + $preferences['gradeboundary' . $i] = $percentages; + $preferences['gradeletter' . $i] = 'text'; + } + foreach ($preferences as $pref => $type) { + if (preg_match('/([^[0-9]+)([0-9]+)/', $pref, $matches)) { + $lang_string = $matches[1]; + $number = ' ' . $matches[2]; + } else { + $lang_string = $pref; + $number = null; + } + $full_pref = 'grade_report_' . $pref; + $pref_value = get_user_preferences($full_pref, $CFG->$full_pref); $options = null; if (is_array($type)) { $options = $type; $type = 'select'; + $default = $options[$CFG->$full_pref]; + } else { + $default = $CFG->$full_pref; } + $default_label = get_string($lang_string, 'grades') . $number . ' (' . $strdefault . ': ' . $default . ')'; - $mform->addElement($type, $full_pref, get_string($pref, 'grades'), $options); - $mform->setHelpButton($full_pref, array(false, get_string($pref, 'grades'), false, true, false, get_string("config$pref", 'grades'))); + $mform->addElement($type, $full_pref, $default_label, $options); + $mform->setHelpButton($full_pref, array(false, get_string($lang_string, 'grades'), false, true, false, + get_string("config$lang_string", 'grades'))); $mform->setDefault($full_pref, $pref_value); $mform->setType($full_pref, PARAM_ALPHANUM); } diff --git a/grade/report/grader/settings.php b/grade/report/grader/settings.php index b68751d481..2876dab6a8 100644 --- a/grade/report/grader/settings.php +++ b/grade/report/grader/settings.php @@ -1,5 +1,13 @@ libdir.'/gradelib.php'); +$strgradeboundary = get_string('gradeboundary', 'grades'); +$strconfiggradeboundary = get_string('configgradeboundary', 'grades'); +$strgradeletter = get_string('gradeletter', 'grades'); +$strconfiggradeletter = get_string('configgradeletter', 'grades'); +$strinherit = get_string('inherit', 'grades'); +$strpercentage = get_string('percentage', 'grades'); +$strreal = get_string('real', 'grades'); +$strletter = get_string('letter', 'grades'); /// Add settings for this module to the $settings object (it's already defined) $settings->add(new admin_setting_configselect('grade_report_aggregationposition', get_string('aggregationposition', 'grades'), @@ -20,20 +28,23 @@ $settings->add(new admin_setting_configcheckbox('grade_report_enableajax', get_s $settings->add(new admin_setting_configselect('grade_report_gradedisplaytype', get_string('gradedisplaytype', 'grades'), get_string('configgradedisplaytype', 'grades'), false, - array(GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')))); + array(GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => $strreal, + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => $strpercentage, + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => $strletter))); $settings->add(new admin_setting_configselect('grade_report_rangesdisplaytype', get_string('rangesdisplaytype', 'grades'), get_string('configrangesdisplaytype', 'grades'), false, - array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')))); + array(GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, + GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => $strreal, + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => $strpercentage, + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => $strletter))); $settings->add(new admin_setting_configselect('grade_report_averagesdisplaytype', get_string('averagesdisplaytype', 'grades'), get_string('configaveragesdisplaytype', 'grades'), false, - array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')))); + array(GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, + GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => $strreal, + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => $strpercentage, + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => $strletter))); $settings->add(new admin_setting_configselect('grade_report_meanselection', get_string('meanselection', 'grades'), get_string('configmeanselection', 'grades'), false, @@ -80,7 +91,7 @@ $settings->add(new admin_setting_configselect('grade_report_decimalpoints', get_ '5' => '5'))); $settings->add(new admin_setting_configselect('grade_report_averagesdecimalpoints', get_string('averagesdecimalpoints', 'grades'), get_string('configaveragesdecimalpoints', 'grades'), 2, - array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), + array(GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, '0' => '0', '1' => '1', '2' => '2', @@ -89,7 +100,7 @@ $settings->add(new admin_setting_configselect('grade_report_averagesdecimalpoint '5' => '5'))); $settings->add(new admin_setting_configselect('grade_report_rangesdecimalpoints', get_string('rangesdecimalpoints', 'grades'), get_string('configrangesdecimalpoints', 'grades'), 2, - array(GRADE_REPORT_PREFERENCE_INHERIT => get_string('inherit', 'grades'), + array(GRADE_REPORT_PREFERENCE_INHERIT => $strinherit, '0' => '0', '1' => '1', '2' => '2', @@ -97,5 +108,18 @@ $settings->add(new admin_setting_configselect('grade_report_rangesdecimalpoints' '4' => '4', '5' => '5'))); +$percentages = array(GRADE_REPORT_PREFERENCE_UNUSED => get_string('unused', 'grades')); +for ($i=100; $i > -1; $i--) { + $percentages[$i] = "$i%"; +} + +for ($i = 1; $i <= 10; $i++) { + $default = abs(($i-10)*10); + $settings->add(new admin_setting_configselect('grade_report_gradeboundary'.$i, $strgradeboundary . " $i", + $strconfiggradeboundary, $default, $percentages)); + + $settings->add(new admin_setting_configtext('grade_report_gradeletter'.$i, $strgradeletter . " $i", + $strconfiggradeletter, '')); +} ?> diff --git a/grade/report/lib.php b/grade/report/lib.php index b7bcb5327a..2ff9ebdd67 100755 --- a/grade/report/lib.php +++ b/grade/report/lib.php @@ -304,5 +304,21 @@ class grade_report { $percentage = $offset_value * $factor; return $percentage; } + + /** + * Fetches and returns an array of grade letters indexed by their grade boundaries, as stored in preferences. + * @return array + */ + function get_grade_letters() { + $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; + } + } + return $letters; + } } ?> diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index c452ea03a3..26558d1c7d 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -38,7 +38,9 @@ $string['configaveragesdisplaytype'] = 'Specifies how to display the averages fo $string['configbulkcheckboxes'] = 'Checkboxes near each grade for Bulk grade operations.'; $string['configdecimalpoints'] = 'The number of decimal points to display for each grade. This can be overriden per grading item.'; $string['configenableajax'] = 'Adds a layer of AJAX functionality to the grader report, simplifying and speeding up common operations. Depends on Javascript being switched on at the user\'s browser level.'; +$string['configgradeboundary'] = 'A percentage boundary over which grades will be assigned a grade letter (if the Letter grade display type is used). '; $string['configgradedisplaytype'] = 'Grades can be shown as real grades, as percentages (in reference to the minimum and maximum grades) or as letters (A, B, C etc..)'; +$string['configgradeletter'] = 'A letter or other symbol used to represent a range of grades.'; $string['configmeanselection'] = 'Select which types of grades will be included in the column averages. Cells with no grade can be ignored, or counted as 0 (default setting).'; $string['configquickfeedback'] = 'Quick Feedback adds a text input element in each grade cell on the grader report, allowing you to edit many grades at once. You can then click the Update button to perform all these changes at once, instead of one at a time.'; $string['configquickgrading'] = 'Quick Grading adds a text input element in each grade cell on the grader report, allowing you to edit the feedback for many grades at once. You can then click the Update button to perform all these changes at once, instead of one at a time.'; @@ -98,6 +100,7 @@ $string['full'] = 'Full'; $string['grade'] = 'Grade'; $string['gradebook'] = 'Gradebook'; $string['gradebookhiddenerror'] = 'The gradebook is currently set to hide everything from students.'; +$string['gradeboundary'] = 'Letter grade boundary'; $string['gradecategoryhelp'] = 'Grade Category Help'; $string['gradedisplaytype'] = 'Grade display type'; $string['gradeexceptions'] = 'Grade Exceptions'; @@ -158,6 +161,7 @@ $string['items'] = 'Items'; $string['left'] = 'Left'; $string['lettergrade'] = 'Letter Grade'; $string['lettergradenonnumber'] = 'Low and/or High grade were non-numeric for'; +$string['letter'] = 'Letter'; $string['letters'] = 'Letters'; $string['lock'] = 'Lock'; $string['locked'] = 'Locked'; @@ -262,6 +266,7 @@ $string['typetext'] = 'Text'; $string['typevalue'] = 'Value'; $string['uncategorised'] = 'Uncategorised'; $string['unlock'] = 'Unlock'; +$string['unused'] = 'Unused'; $string['uploadgrades'] = 'Upload grades'; $string['useadvanced'] = 'Use Advanced Features'; $string['usenooutcome'] = 'Use no outcome'; diff --git a/lib/grade/grade_grades.php b/lib/grade/grade_grades.php index 0f2ad33514..53e85dcd09 100644 --- a/lib/grade/grade_grades.php +++ b/lib/grade/grade_grades.php @@ -427,6 +427,46 @@ class grade_grades extends grade_object { $standardised_value = $factor * $diff + $target_min; return $standardised_value; } + + /** + * Returns the grade letter this grade falls under, as they are set up in the given array. + * @param array $letters An array of grade boundaries with associated letters + * @param float $gradevalue The value to convert. If not given, will use instantiated object + * @param float $grademin If not given, will look up the grade_item's grademin + * @param float $grademax If not given, will look up the grade_item's grademax + * @return string Grade letter + */ + function get_letter($letters, $gradevalue=null, $grademin=null, $grademax=null) { + if (is_null($grademin) || is_null($grademax)) { + if (!isset($this)) { + debugging("Tried to call grade_grades::get_letter statically without giving an explicit grademin or grademax!"); + return false; + } + $this->load_grade_item(); + $grademin = $this->grade_item->grademin; + $grademax = $this->grade_item->grademax; + } + + if (is_null($gradevalue)) { + if (!isset($this)) { + debugging("Tried to call grade_grades::get_letter statically without giving an explicit gradevalue!"); + return false; + } + $gradevalue = $this->finalgrade; + } + // Standardise grade first + $grade = grade_grades::standardise_score($gradevalue, $grademin, $grademax, 0, 100); + + // Sort the letters by descending boundaries (100-0) + krsort($letters); + foreach ($letters as $boundary => $letter) { + if ($grade >= $boundary) { + return $letter; + } + } + return '-'; + } + } ?> diff --git a/lib/gradelib.php b/lib/gradelib.php index 150826de17..a3702b0bce 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -78,6 +78,7 @@ define('GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE', 1); define('GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER', 2); define('GRADE_REPORT_PREFERENCE_DEFAULT', 'default'); define('GRADE_REPORT_PREFERENCE_INHERIT', 'inherit'); +define('GRADE_REPORT_PREFERENCE_UNUSED', -1); require_once($CFG->libdir . '/grade/grade_category.php'); require_once($CFG->libdir . '/grade/grade_item.php'); @@ -708,4 +709,14 @@ function grade_oldgradebook_upgrade($courseid) { } } +/** + * Builds an array of percentages indexed by integers for the purpose of building a select drop-down element. + * @param int $steps The value between each level. + * @param string $order 'asc' for 0-100 and 'desc' for 100-0 + * @param int $lowest The lowest value to include + * @param int $highest The highest value to include + */ +function build_percentages_array($steps=1, $order='desc', $lowest=0, $highest=100) { + // TODO reject or implement +} ?> diff --git a/version.php b/version.php index db85e3a86c..f149f08715 100644 --- a/version.php +++ b/version.php @@ -6,7 +6,7 @@ // This is compared against the values stored in the database to determine // whether upgrades should be performed (see lib/db/*.php) - $version = 2007071703; // YYYYMMDD = date + $version = 2007071801; // YYYYMMDD = date // XY = increments within a single day $release = '1.9 dev'; // Human-friendly version name -- 2.39.5