]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10478 Added category preference aggregationview. This one is linked with the...
authornicolasconnault <nicolasconnault>
Wed, 18 Jul 2007 14:54:35 +0000 (14:54 +0000)
committernicolasconnault <nicolasconnault>
Wed, 18 Jul 2007 14:54:35 +0000 (14:54 +0000)
We'll also need to implement the actions for the -/+ icons.

grade/edit/category.php
grade/edit/category_form.php
grade/edit/item.php
grade/edit/item_form.php
grade/report/grader/lib.php
grade/report/lib.php
lang/en_utf8/grades.php
lib/grade/grade_item.php

index 18b74b2e55aef8fc385197dc45c204c2e4ff202a..81a9f4a35182f0b59cba1394fc23a3b838bf9167 100644 (file)
@@ -2,6 +2,7 @@
 
 require_once '../../config.php';
 require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->dirroot.'/grade/report/lib.php';
 require_once $CFG->libdir.'/gradelib.php';
 require_once 'category_form.php';
 
@@ -24,6 +25,9 @@ $returnurl = $gpr->get_return_url('tree.php?id='.$course->id);
 
 $mform = new edit_category_form(null, array('gpr'=>$gpr));
 if ($category = get_record('grade_categories', 'id', $id, 'courseid', $course->id)) {
+    // Get Category preferences
+    $category->pref_aggregationview = grade_report::get_pref('aggregationview', $id);
+
     $mform->set_data($category);
 } else {
     $mform->set_data(array('courseid'=>$course->id));
@@ -43,6 +47,13 @@ if ($mform->is_cancelled()) {
         $grade_category->update();
     }
 
+    // Handle user preferences
+    if (isset($data->pref_aggregationview)) {
+        if (!grade_report::set_pref('aggregationview', $data->pref_aggregationview, $grade_category->id)) {
+            error("Could not set preference aggregationview to $value for this grade category");
+        }
+    }
+
     redirect($returnurl);
 }
 
index 4244804c194745d73447dc8a064b296e3786b124..f82aa0e303e4f5aa45bbe22c86c9b4cc8039a1a5 100644 (file)
@@ -4,9 +4,11 @@ require_once $CFG->libdir.'/formslib.php';
 
 class edit_category_form extends moodleform {
     function definition() {
+        global $CFG;
         $mform =& $this->_form;
 
         // visible elements
+        $mform->addElement('header', 'general', get_string('gradecategory', 'grades'));
         $mform->addElement('text', 'fullname', get_string('categoryname', 'grades'));
 
         $options = array(GRADE_AGGREGATE_MEAN_ALL   =>get_string('aggregatemeanall', 'grades'),
@@ -29,6 +31,18 @@ class edit_category_form extends moodleform {
         $mform->addElement('select', 'droplow', get_string('droplow', 'grades'), $options);
         $mform->disabledIf('droplow', 'keephigh', 'noteq', 0);
 
+        // user preferences
+        $mform->addElement('header', 'general', get_string('userpreferences', 'grades'));
+        $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'),
+                          GRADE_REPORT_AGGREGATION_VIEW_FULL => get_string('full', 'grades'),
+                          GRADE_REPORT_AGGREGATION_VIEW_COMPACT => get_string('compact', 'grades'));
+        $label = get_string('aggregationview', 'grades') . ' (' . get_string('default', 'grades')
+               . ': ' . $options[$CFG->grade_report_aggregationview] . ')';
+        $mform->addElement('select', 'pref_aggregationview', $label, $options);
+        $mform->setHelpButton('pref_aggregationview', array(false, get_string('aggregationview', 'grades'),
+                              false, true, false, get_string("configaggregationview", 'grades')));
+        $mform->setDefault('pref_aggregationview', GRADE_REPORT_PREFERENCE_DEFAULT);
+
         // hidden params
         $mform->addElement('hidden', 'id', 0);
         $mform->setType('id', PARAM_INT);
@@ -73,4 +87,4 @@ class edit_category_form extends moodleform {
 
 }
 
-?>
\ No newline at end of file
+?>
index 41cd091ca1001cadd30f43d85ae06b54f2881f1a..b7ca41d1ac1278353fdcad5569d868e1e2b2f7fe 100644 (file)
@@ -29,8 +29,8 @@ if ($mform->is_cancelled()) {
 
 if ($item = get_record('grade_items', 'id', $id, 'courseid', $course->id)) {
     // Get Item preferences
-    $item->pref_gradedisplaytype = get_user_preferences('grade_report_gradedisplaytype' . $id, 'default');
-    $item->pref_decimalpoints    = get_user_preferences('grade_report_decimalpoints' . $id, 'default');
+    $item->pref_gradedisplaytype = grade_report::get_pref('gradedisplaytype', $id);
+    $item->pref_decimalpoints    = grade_report::get_pref('decimalpoints', $id);
 
     $item->calculation = grade_item::denormalize_formula($item->calculation, $course->id);
     $mform->set_data($item);
index d94b5801cb88e90d8bfbb582c892996a5b35fe2e..80e8635313732a8f45237324b86931b3a02161e7 100644 (file)
@@ -72,7 +72,7 @@ class edit_item_form extends moodleform {
         $mform->addElement('date_time_selector', 'locktime', get_string('locktime', 'grades'), array('optional'=>true));
         $mform->disabledIf('locktime', 'gradetype', 'eq', GRADE_TYPE_NONE);
 
-/// user preferences
+        // user preferences
         $mform->addElement('header', 'general', get_string('userpreferences', 'grades'));
         $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'),
                           GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'),
@@ -82,7 +82,7 @@ class edit_item_form extends moodleform {
                . ': ' . $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')));
+                              false, true, false, get_string("configgradedisplaytype", 'grades')));
         $mform->setDefault('pref_gradedisplaytype', GRADE_REPORT_PREFERENCE_DEFAULT);
 
         $options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), 0, 1, 2, 3, 4, 5);
@@ -90,7 +90,7 @@ class edit_item_form extends moodleform {
                . ': ' . $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')));
+                              false, true, false, get_string("configdecimalpoints", 'grades')));
         $mform->setDefault('pref_decimalpoints', GRADE_REPORT_PREFERENCE_DEFAULT);
 
 /// hidden params
index b7407eab71970291afeee7ac417c04bc35645541..c92e70bda8d436b8235449827347b2e3807ebfb6 100644 (file)
@@ -488,6 +488,25 @@ class grade_report_grader extends grade_report {
             }
 
             foreach ($row as $element) {
+                // Load user preferences for categories
+                if ($element['type'] == 'category') {
+                    $categoryid = $element['object']->id;
+                    $aggregationview = $this->get_pref('aggregationview', $categoryid);
+
+                    if ($aggregationview == GRADE_REPORT_AGGREGATION_VIEW_COMPACT) {
+                        $categorystate = get_user_preferences('grade_report_categorystate' . $categoryid, GRADE_CATEGORY_EXPANDED);
+
+                        // Expand/Contract icon must be set appropriately
+                        if ($categorystate == GRADE_CATEGORY_CONTRACTED) {
+                            // The category is contracted: this means we only show 1 item for this category: the
+                            // category's aggregation item. The others must be removed from the grade_tree
+                        } elseif ($categorystate == GRADE_CATEGORY_EXPANDED) {
+                            // The category is expanded: we only show the non-aggregated items directly descending
+                            // from this category. The category's grade_item must be removed from the grade_tree
+                        }
+                    }
+                }
+
                 $eid    = $element['eid'];
                 $object = $element['object'];
                 $type   = $element['type'];
@@ -757,10 +776,10 @@ class grade_report_grader extends grade_report {
         global $CFG, $USER;
 
         $averagesdisplaytype = $this->get_pref('averagesdisplaytype');
-        $mean_pref = get_user_preferences('grade_report_meanselection', $CFG->grade_report_meanselection);
+        $mean_pref = $this->get_pref('meanselection');
         $groupavghtml = '';
 
-        if ($mean_pref == 2) {
+        if ($mean_pref == GRADE_AGGREGATE_MEAN_GRADED) {
             // non empty grades
             $meanstr = "AND NOT g.finalgrade IS NULL";
         } else {
@@ -781,8 +800,7 @@ class grade_report_grader extends grade_report {
                      $this->groupwheresql
                 AND ra.roleid in ($this->gradebookroles)
                 AND ra.contextid ".get_related_contexts_string($this->context)."
-                AND NOT g.finalgradeIS NULL
-                $notnullstr
+                $meanstr
                 GROUP BY g.itemid";
 
             $groupsum = array();
@@ -861,7 +879,7 @@ class grade_report_grader extends grade_report {
         $meanselection = $this->get_pref('meanselection');
         $mean_pref = get_user_preferences('grade_report_meanselection', $CFG->grade_report_meanselection);
         $gradeavghtml = '';
-        
+
         if ($mean_pref == 2) {
             // non empty grades
             $meanstr = "AND NOT g.finalgrade IS NULL";
index 2ff9ebdd671ab94138a5f4ba7972a69d4f0e02bb..eb9d9ba11e006512247ea0ae06ddb0932d82f05f 100755 (executable)
@@ -98,37 +98,37 @@ class grade_report {
      * is given (site default).
      * @static (Can be called statically, but then doesn't benefit from caching)
      * @param string $pref The name of the preference (do not include the grade_report_ prefix)
-     * @param int $itemid An optional itemid to check for a more fine-grained preference
+     * @param int $objectid An optional itemid or categoryid to check for a more fine-grained preference
      * @return mixed The value of the preference
      */
-    function get_pref($pref, $itemid=null) {
+    function get_pref($pref, $objectid=null) {
         global $CFG;
         $fullprefname = 'grade_report_' . $pref;
 
         $retval = null;
 
         if (!isset($this)) {
-            if (!empty($itemid)) {
-                $retval = get_user_preferences($fullprefname . $itemid, grade_report::get_pref($pref));
+            if (!empty($objectid)) {
+                $retval = get_user_preferences($fullprefname . $objectid, grade_report::get_pref($pref));
             } else {
                 $retval = get_user_preferences($fullprefname, $CFG->$fullprefname);
             }
         } else {
-            if (empty($this->prefs[$pref.$itemid])) {
+            if (empty($this->prefs[$pref.$objectid])) {
 
-                if (!empty($itemid)) {
-                    $retval = get_user_preferences($fullprefname . $itemid);
+                if (!empty($objectid)) {
+                    $retval = get_user_preferences($fullprefname . $objectid);
                     if (empty($retval)) {
                         // No item pref found, we are returning the global preference
                         $retval = $this->get_pref($pref);
-                        $itemid = null;
+                        $objectid = null;
                     }
                 } else {
                     $retval = get_user_preferences($fullprefname, $CFG->$fullprefname);
                 }
-                $this->prefs[$pref.$itemid] = $retval;
+                $this->prefs[$pref.$objectid] = $retval;
             } else {
-                $retval = $this->prefs[$pref.$itemid];
+                $retval = $this->prefs[$pref.$objectid];
             }
         }
 
index 26558d1c7d0f5bae5c10a96ce97ca7366229f405..818d08991ac2dae51b0fd5a132f2769128cbdae6 100644 (file)
@@ -7,6 +7,12 @@ $string['addcategoryerror'] = 'Could not add category.';
 $string['addexceptionerror'] = 'Error occurred while adding exception for userid:gradeitem';
 $string['addfeedback'] = 'Add Feedback';
 $string['additem'] = 'Add Grade Item';
+$string['aggregatemeanall'] = 'Mean of all grades';
+$string['aggregatemedian'] = 'Median of all grades';
+$string['aggregatemeangraded'] = 'Mean of non-empty grades';
+$string['aggregatemin'] = 'Smallest grade';
+$string['aggregatemax'] = 'Highest grade';
+$string['aggregatemode'] = 'Mode of all grades';
 $string['aggregation'] = 'Aggregation';
 $string['aggregationposition'] = 'Aggregation position';
 $string['aggregationview'] = 'Aggregation view';
@@ -67,6 +73,7 @@ $string['displaylettergrade'] = 'Display Letter Grades';
 $string['displaypercent'] = 'Display Percents';
 $string['displaypoints'] = 'Display Points';
 $string['displayweighted'] = 'Display Weighted Grades';
+$string['droplow'] = 'Drop the lowest';
 $string['dropped'] = 'Dropped';
 $string['dropxlowest'] = 'Drop X Lowest';
 $string['dropxlowestwarning'] = 'Note: If you use drop x lowest the grading assumes that all items in the category have the same point value. If point values differ results will be unpredictable';
@@ -76,6 +83,7 @@ $string['edittree'] = 'Categories';
 $string['enableajax'] = 'Enable AJAX';
 $string['encoding'] = 'Encoding';
 $string['errorgradevaluenonnumeric'] = 'Received non-numeric for low or high grade for';
+$string['errorcalculationunknown'] = 'Invalid formula';
 $string['errornocategorizedid'] = 'Could not get an uncategorized id!';
 $string['errornocourse'] = 'Could not get course information';
 $string['errorreprintheadersnonnumeric'] = 'Received non-numeric value for reprint-headers';
@@ -101,6 +109,7 @@ $string['grade'] = 'Grade';
 $string['gradebook'] = 'Gradebook';
 $string['gradebookhiddenerror'] = 'The gradebook is currently set to hide everything from students.';
 $string['gradeboundary'] = 'Letter grade boundary';
+$string['gradecategory'] = 'Grade Category';
 $string['gradecategoryhelp'] = 'Grade Category Help';
 $string['gradedisplaytype'] = 'Grade display type';
 $string['gradeexceptions'] = 'Grade Exceptions';
@@ -120,6 +129,7 @@ $string['gradeletternote'] = 'To delete a grade letter just empty any of the<br
 $string['grademax'] = 'Maximum grade';
 $string['grademin'] = 'Minimum grade';
 $string['gradepass'] = 'Grade to pass';
+$string['groupavg'] = 'Group average';
 $string['hidden'] = 'Hidden';
 $string['importplugins'] = 'Import plugins';
 $string['itemsedit'] = 'Edit grade item';
@@ -158,6 +168,7 @@ $string['item'] = 'Item';
 $string['iteminfo'] = 'Item info';
 $string['itemname'] = 'Item name';
 $string['items'] = 'Items';
+$string['keephigh'] = 'Keep the highest';
 $string['left'] = 'Left';
 $string['lettergrade'] = 'Letter Grade';
 $string['lettergradenonnumber'] = 'Low and/or High grade were non-numeric for';
index 1b238e827299eeef5a26dcc5d73a0271c7c07325..8f66544e8d558c6809daf549d19148e98469b5a8 100644 (file)
@@ -1154,7 +1154,6 @@ class grade_item extends grade_object {
             if (!is_null($finalgrade)) {
                 $grade->finalgrade = bounded_number($this->grademin, $finalgrade, $this->grademax);
             } else {
-                echo "Assigning null finalgrade";
                 $grade->finalgrade = $finalgrade;
             }
 
@@ -1341,8 +1340,8 @@ class grade_item extends grade_object {
     }
 
     /**
-     * Calculates final grade values useing the formula in calculation property.
-     * The parameteres are taken from final grades of grade items in current course only.
+     * Calculates final grade values using the formula in calculation property.
+     * The parameters are taken from final grades of grade items in current course only.
      * @return boolean false if error
      */
     function compute($userid=null) {