MDL-13778 Added 6 "composite" grade display types for the grader report
This commit is contained in:
@@ -31,11 +31,20 @@ if (has_capability('moodle/grade:manage', $systemcontext)
|
||||
// enable publishing in exports/imports
|
||||
$temp->add(new admin_setting_configcheckbox('gradepublishing', get_string('gradepublishing', 'grades'), get_string('configgradepublishing', 'grades'), 0));
|
||||
|
||||
$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);
|
||||
|
||||
$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,
|
||||
@@ -104,7 +113,12 @@ if (has_capability('moodle/grade:manage', $systemcontext)
|
||||
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'))));
|
||||
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_REAL => get_string('percentagereal', 'grades'))));
|
||||
|
||||
$temp->add(new admin_setting_configselect('grade_decimalpoints', get_string('decimalpoints', 'grades'),
|
||||
get_string('configdecimalpoints', 'grades'), 2,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -300,6 +300,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.';
|
||||
@@ -391,6 +393,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'] = '%%';
|
||||
@@ -417,6 +421,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';
|
||||
|
||||
@@ -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);
|
||||
|
||||
+67
-31
@@ -664,48 +664,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
|
||||
|
||||
Reference in New Issue
Block a user