]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10490 Letter type implemented
authornicolasconnault <nicolasconnault>
Wed, 18 Jul 2007 11:34:55 +0000 (11:34 +0000)
committernicolasconnault <nicolasconnault>
Wed, 18 Jul 2007 11:34:55 +0000 (11:34 +0000)
grade/edit/item_form.php
grade/report/grader/lib.php
grade/report/grader/preferences.php
grade/report/grader/preferences_form.php
grade/report/grader/settings.php
grade/report/lib.php
lang/en_utf8/grades.php
lib/grade/grade_grades.php
lib/gradelib.php
version.php

index f37fc45b9697ed1e9053141e4cc44f429b1833ae..d94b5801cb88e90d8bfbb582c892996a5b35fe2e 100644 (file)
@@ -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);
index ebf07662bc790a45191ac8f1fe68de647d66ba54..b7407eab71970291afeee7ac417c04bc35645541 100644 (file)
@@ -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 .= '<span onmouseover="' . $overlib . '" onmouseout="return nd();">';
                     }
 
-                    // 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 .= '<td>'.$gradehtml.'</td>';
                 }
             }
@@ -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 .= '<td>'.$gradehtml.'</td>';
@@ -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 .= '<th class="range">'. $grademin.'-'. $grademax.'</th>';
index f2ade4a847bf348a31622ce539aa936db9bcd698..84519dba4d1cc40a4e06c71d328cd8df0eaea7ba 100644 (file)
@@ -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;
         }
     }
index 348ae9488e89878105a9f673e4bc589b3788e4be..975a870522db262e45f69f088f370dec68e43218 100644 (file)
@@ -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);
         }
index b68751d481d35e4ab9e87773f019069f46adf5ff..2876dab6a81b036fbb2e290fd7ef5b61a6bec3a0 100644 (file)
@@ -1,5 +1,13 @@
 <?php // $Id$
 require_once($CFG->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, ''));
+}
 
 ?>
index b7bcb5327aee39afd65a02b940dc8c668ad81098..2ff9ebdd671ab94138a5f4ba7972a69d4f0e02bb 100755 (executable)
@@ -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;
+    }
 }
 ?>
index c452ea03a39aff221e9eccc8fef21e305ea98a0c..26558d1c7d0f5bae5c10a96ce97ca7366229f405 100644 (file)
@@ -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';
index 0f2ad33514a4b72c461c5e15b5d09e5213ac6a58..53e85dcd09b725f6d51f43972e334814e308c7af 100644 (file)
@@ -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 '-';
+    }
+
 }
 
 ?>
index 150826de17e74a0ba754df8c0bdf572a8e3f0b23..a3702b0bcebadaf648daf406ed1e9bc8b5f32c6e 100644 (file)
@@ -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
+}
 ?>
index db85e3a86c23f9a5ffb247a7b6b421ba8b667f08..f149f087159d477458d911b5867a2318a19715d3 100644 (file)
@@ -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