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());
$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,
$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,
/// 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);
$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) {
$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';
$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.';
$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'] = '%%';
$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';
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);
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