From 7d10995c86442d8726b60b013bcb05a53ba77b9a Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Thu, 8 Jan 2009 08:53:20 +0000 Subject: [PATCH] MDL-13778 Added 6 "composite" grade display types for the grader report Merged from MOODLE_19_STABLE --- admin/settings/grades.php | 25 +++++---- grade/edit/tree/item_form.php | 22 ++++++-- lang/en_utf8/grades.php | 9 ++++ lib/grade/constants.php | 6 +++ lib/gradelib.php | 98 ++++++++++++++++++++++++----------- 5 files changed, 116 insertions(+), 44 deletions(-) diff --git a/admin/settings/grades.php b/admin/settings/grades.php index 26e14b4443..f703ef6486 100644 --- a/admin/settings/grades.php +++ b/admin/settings/grades.php @@ -5,11 +5,23 @@ if (has_capability('moodle/grade:manage', $systemcontext) or has_capability('moodle/grade:manageletters', $systemcontext)) { // speedup for non-admins, add all caps used on this page + require_once $CFG->libdir.'/grade/constants.php'; + $display_types = array(GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), + GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades'), + GRADE_DISPLAY_TYPE_REAL_PERCENTAGE => get_string('realpercentage', 'grades'), + GRADE_DISPLAY_TYPE_REAL_LETTER => get_string('realletter', 'grades'), + GRADE_DISPLAY_TYPE_LETTER_REAL => get_string('letterreal', 'grades'), + GRADE_DISPLAY_TYPE_LETTER_PERCENTAGE => get_string('letterpercentage', 'grades'), + GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER => get_string('percentageletter', 'grades'), + GRADE_DISPLAY_TYPE_PERCENTAGE_REAL => get_string('percentagereal', 'grades') + ); + asort($display_types); + // General settings $temp = new admin_settingpage('gradessettings', get_string('generalsettings', 'grades'), 'moodle/grade:manage'); if ($ADMIN->fulltree) { - require_once $CFG->libdir.'/grade/constants.php'; // new CFG variable for gradebook (what roles to display) $temp->add(new admin_setting_special_gradebookroles()); @@ -29,10 +41,8 @@ if (has_capability('moodle/grade:manage', $systemcontext) $temp->add(new admin_setting_configcheckbox('gradepublishing', get_string('gradepublishing', 'grades'), get_string('configgradepublishing', 'grades'), 0)); $temp->add(new admin_setting_configselect('grade_export_displaytype', get_string('gradeexportdisplaytype', 'grades'), - get_string('configgradeexportdisplaytype', 'grades'), GRADE_DISPLAY_TYPE_REAL, - array(GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), - GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')))); + get_string('configgradeexportdisplaytype', 'grades'), GRADE_DISPLAY_TYPE_REAL, $display_types)); + $temp->add(new admin_setting_configselect('grade_export_decimalpoints', get_string('gradeexportdecimalpoints', 'grades'), get_string('configexportdecimalpoints', 'grades'), 2, @@ -98,10 +108,7 @@ if (has_capability('moodle/grade:manage', $systemcontext) $temp = new admin_settingpage('gradeitemsettings', get_string('gradeitemsettings', 'grades'), 'moodle/grade:manage'); if ($ADMIN->fulltree) { $temp->add(new admin_setting_configselect('grade_displaytype', get_string('gradedisplaytype', 'grades'), - get_string('configgradedisplaytype', 'grades'), GRADE_DISPLAY_TYPE_REAL, - array(GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), - GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')))); + get_string('configgradedisplaytype', 'grades'), GRADE_DISPLAY_TYPE_REAL, $display_types)); $temp->add(new admin_setting_configselect('grade_decimalpoints', get_string('decimalpoints', 'grades'), get_string('configdecimalpoints', 'grades'), 2, diff --git a/grade/edit/tree/item_form.php b/grade/edit/tree/item_form.php index 3f1fee6c18..3d5f6ca83c 100644 --- a/grade/edit/tree/item_form.php +++ b/grade/edit/tree/item_form.php @@ -93,10 +93,20 @@ class edit_item_form extends moodleform { /// grade display prefs $default_gradedisplaytype = grade_get_setting($COURSE->id, 'displaytype', $CFG->grade_displaytype); - $options = array(GRADE_DISPLAY_TYPE_DEFAULT => get_string('default', 'grades'), - GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), - GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), - GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')); + $options = array(GRADE_DISPLAY_TYPE_DEFAULT => get_string('default', 'grades'), + GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), + GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades'), + GRADE_DISPLAY_TYPE_REAL_PERCENTAGE => get_string('realpercentage', 'grades'), + GRADE_DISPLAY_TYPE_REAL_LETTER => get_string('realletter', 'grades'), + GRADE_DISPLAY_TYPE_LETTER_REAL => get_string('letterreal', 'grades'), + GRADE_DISPLAY_TYPE_LETTER_PERCENTAGE => get_string('letterpercentage', 'grades'), + GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER => get_string('percentageletter', 'grades'), + GRADE_DISPLAY_TYPE_PERCENTAGE_REAL => get_string('percentagereal', 'grades') + ); + + asort($options); + foreach ($options as $key=>$option) { if ($key == $default_gradedisplaytype) { $options[GRADE_DISPLAY_TYPE_DEFAULT] = get_string('defaultprev', 'grades', $option); @@ -136,12 +146,16 @@ class edit_item_form extends moodleform { $mform->addElement('header', 'headerparent', get_string('parentcategory', 'grades')); $options = array(); + $default = ''; $coefstring = ''; $categories = grade_category::fetch_all(array('courseid'=>$COURSE->id)); foreach ($categories as $cat) { $cat->apply_forced_settings(); $options[$cat->id] = $cat->get_name(); + if ($cat->is_course_category()) { + $default = $cat->id; + } if ($cat->is_aggregationcoef_used()) { if ($cat->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN) { diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index 0deccd54a0..0f7f2ac4e2 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -30,7 +30,10 @@ $string['aggregation'] = 'Aggregation'; $string['aggregationcoef'] = 'Aggregation coefficient'; $string['aggregationcoefextra'] = 'Extra credit coefficient'; $string['aggregationcoefextrasum'] = 'Act as extra credit'; +$string['aggregationcoefextrasum'] = 'Extra credit'; +$string['aggregationcoefextrasumhelp'] = 'Extra credit for this grade item during aggregation.'; $string['aggregationcoefweight'] = 'Item weight'; +$string['aggregationcoefweighthelp'] = 'Weight applied to all grades in this grade item during aggregation with other grade items.'; $string['aggregationhelp'] = 'Strategy used to aggregate grades across all students in a course.'; $string['aggregationposition'] = 'Aggregation position'; $string['aggregationview'] = 'Aggregation view'; @@ -301,6 +304,8 @@ $string['lessthanmin'] = 'The grade entered for $a->itemname for $a->username is $string['lettergrade'] = 'Letter grade'; $string['lettergradenonnumber'] = 'Low and/or High grade were non-numeric for'; $string['letter'] = 'Letter'; +$string['letterpercentage'] = 'Letter (percentage)'; +$string['letterreal'] = 'Letter (real)'; $string['letters'] = 'Letters'; $string['linkedactivity'] = 'Linked activity'; $string['linkedactivityhelp'] = 'Specifies an optional activity to which this outcome item is linked. This is used to measure student performance on criteria not assessed by the activity grade.'; @@ -394,6 +399,8 @@ $string['parentcategory'] = 'Parent category'; $string['pctoftotalgrade'] = '%% of total grade'; $string['percent'] = 'Percent'; $string['percentage'] = 'Percentage'; +$string['percentageletter'] = 'Percentage (letter)'; +$string['percentagereal'] = 'Percentage (real)'; $string['percentascending'] = 'Sort by percent ascending'; $string['percentdescending'] = 'Sort by percent descending'; $string['percentshort'] = '%%'; @@ -420,6 +427,8 @@ $string['rangesdisplaytype'] = 'Range display type'; $string['rank'] = 'Rank'; $string['rawpct'] = 'Raw %%'; $string['real'] = 'Real'; +$string['realletter'] = 'Real (letter)'; +$string['realpercentage'] = 'Real (percentage)'; $string['regradeanyway'] = 'Regrade anyway'; $string['removeallcoursegrades'] = 'Delete all grades'; $string['removeallcourseitems'] = 'Delete all items and categories'; diff --git a/lib/grade/constants.php b/lib/grade/constants.php index 6852a1e5d4..fd84192f66 100644 --- a/lib/grade/constants.php +++ b/lib/grade/constants.php @@ -66,6 +66,12 @@ define('GRADE_DISPLAY_TYPE_DEFAULT', 0); define('GRADE_DISPLAY_TYPE_REAL', 1); define('GRADE_DISPLAY_TYPE_PERCENTAGE', 2); define('GRADE_DISPLAY_TYPE_LETTER', 3); +define('GRADE_DISPLAY_TYPE_REAL_PERCENTAGE', 12); +define('GRADE_DISPLAY_TYPE_REAL_LETTER', 13); +define('GRADE_DISPLAY_TYPE_LETTER_REAL', 31); +define('GRADE_DISPLAY_TYPE_LETTER_PERCENTAGE', 32); +define('GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER', 23); +define('GRADE_DISPLAY_TYPE_PERCENTAGE_REAL', 21); define('GRADE_REPORT_AGGREGATION_POSITION_FIRST', 0); define('GRADE_REPORT_AGGREGATION_POSITION_LAST', 1); diff --git a/lib/gradelib.php b/lib/gradelib.php index 4c56bc2f64..cc993347e2 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -666,48 +666,84 @@ function grade_format_gradevalue($value, &$grade_item, $localized=true, $display switch ($displaytype) { case GRADE_DISPLAY_TYPE_REAL: - if ($grade_item->gradetype == GRADE_TYPE_SCALE) { - if (!$scale = $grade_item->load_scale()) { - return get_string('error'); - } - - $value = (int)bounded_number($grade_item->grademin, $value, $grade_item->grademax); - return format_string($scale->scale_items[$value-1]); - - } else { - return format_float($value, $decimals, $localized); - } + return grade_format_gradevalue_real($value, $grade_item, $decimals, $localized); case GRADE_DISPLAY_TYPE_PERCENTAGE: - $min = $grade_item->grademin; - $max = $grade_item->grademax; - if ($min == $max) { - return ''; - } - $value = bounded_number($min, $value, $max); - $percentage = (($value-$min)*100)/($max-$min); - return format_float($percentage, $decimals, $localized).' %'; + return grade_format_gradevalue_percentage($value, $grade_item, $decimals, $localized); case GRADE_DISPLAY_TYPE_LETTER: - $context = get_context_instance(CONTEXT_COURSE, $grade_item->courseid); - if (!$letters = grade_get_letters($context)) { - return ''; // no letters?? - } + return grade_format_gradevalue_letter($value, $grade_item); - $value = grade_grade::standardise_score($value, $grade_item->grademin, $grade_item->grademax, 0, 100); - $value = bounded_number(0, $value, 100); // just in case - foreach ($letters as $boundary => $letter) { - if ($value >= $boundary) { - return format_string($letter); - } - } - return '-'; // no match? maybe '' would be more correct + case GRADE_DISPLAY_TYPE_REAL_PERCENTAGE: + return grade_format_gradevalue_real($value, $grade_item, $decimals, $localized) . ' (' . + grade_format_gradevalue_percentage($value, $grade_item, $decimals, $localized) . ')'; + + case GRADE_DISPLAY_TYPE_REAL_LETTER: + return grade_format_gradevalue_real($value, $grade_item, $decimals, $localized) . ' (' . + grade_format_gradevalue_letter($value, $grade_item) . ')'; + + case GRADE_DISPLAY_TYPE_PERCENTAGE_REAL: + return grade_format_gradevalue_percentage($value, $grade_item, $decimals, $localized) . ' (' . + grade_format_gradevalue_real($value, $grade_item, $decimals, $localized) . ')'; + + case GRADE_DISPLAY_TYPE_LETTER_REAL: + return grade_format_gradevalue_letter($value, $grade_item) . ' (' . + grade_format_gradevalue_real($value, $grade_item, $decimals, $localized) . ')'; + case GRADE_DISPLAY_TYPE_LETTER_PERCENTAGE: + return grade_format_gradevalue_letter($value, $grade_item) . ' (' . + grade_format_gradevalue_percentage($value, $grade_item, $decimals, $localized) . ')'; + + case GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER: + return grade_format_gradevalue_percentage($value, $grade_item, $decimals, $localized) . ' (' . + grade_format_gradevalue_letter($value, $grade_item) . ')'; default: return ''; } } +function grade_format_gradevalue_real($value, $grade_item, $decimals, $localized) { + if ($grade_item->gradetype == GRADE_TYPE_SCALE) { + if (!$scale = $grade_item->load_scale()) { + return get_string('error'); + } + + $value = (int)bounded_number($grade_item->grademin, $value, $grade_item->grademax); + return format_string($scale->scale_items[$value-1]); + + } else { + return format_float($value, $decimals, $localized); + } +} + +function grade_format_gradevalue_percentage($value, $grade_item, $decimals, $localized) { + $min = $grade_item->grademin; + $max = $grade_item->grademax; + if ($min == $max) { + return ''; + } + $value = bounded_number($min, $value, $max); + $percentage = (($value-$min)*100)/($max-$min); + return format_float($percentage, $decimals, $localized).' %'; +} + +function grade_format_gradevalue_letter($value, $grade_item) { + $context = get_context_instance(CONTEXT_COURSE, $grade_item->courseid); + if (!$letters = grade_get_letters($context)) { + return ''; // no letters?? + } + + $value = grade_grade::standardise_score($value, $grade_item->grademin, $grade_item->grademax, 0, 100); + $value = bounded_number(0, $value, 100); // just in case + foreach ($letters as $boundary => $letter) { + if ($value >= $boundary) { + return format_string($letter); + } + } + return '-'; // no match? maybe '' would be more correct +} + + /** * Returns grade options for gradebook category menu * @param int $courseid -- 2.39.5