MDL-46139 Grades: Show the aggregation details in the user report.
authorDamyon Wiese <damyon@moodle.com>
Tue, 12 Aug 2014 02:40:51 +0000 (10:40 +0800)
committerAdrian Greeve <adrian@moodle.com>
Fri, 3 Oct 2014 05:47:42 +0000 (13:47 +0800)
grade/lib.php
grade/report/user/lib.php
grade/report/user/styles.css
lang/en/grades.php
lib/grade/grade_category.php
lib/grade/grade_item.php

index 83fb46b..a55a5fd 100644 (file)
@@ -1239,10 +1239,11 @@ class grade_structure {
      * @param bool  $withlink Whether or not this header has a link
      * @param bool  $icon Whether or not to display an icon with this header
      * @param bool  $spacerifnone return spacer if no icon found
+     * @param bool  $withdescription Show description if defined by this item.
      *
      * @return string header
      */
-    public function get_element_header(&$element, $withlink=false, $icon=true, $spacerifnone=false) {
+    public function get_element_header(&$element, $withlink=false, $icon=true, $spacerifnone=false, $withdescription=false) {
         $header = '';
 
         if ($icon) {
@@ -1267,6 +1268,13 @@ class grade_structure {
             }
         }
 
+        if ($withdescription) {
+            $desc = $element['object']->get_description();
+            if (!empty($desc)) {
+                $header .= '<div class="gradeitemdescription">' . s($desc) . '</div><div class="gradeitemdescriptionfiller"></div>';
+            }
+        }
+
         return $header;
     }
 
index b004e3e..91ac625 100644 (file)
@@ -346,7 +346,7 @@ class grade_report_user extends grade_report {
         $grade_object = $element['object'];
         $eid = $grade_object->id;
         $element['userid'] = $this->user->id;
-        $fullname = $this->gtree->get_element_header($element, true, true, true);
+        $fullname = $this->gtree->get_element_header($element, true, true, true, true);
         $data = array();
         $hidden = '';
         $excluded = '';
index b481be4..e11851c 100644 (file)
@@ -57,3 +57,6 @@
 
 table.user-grade td.feedbacktext {text-align:left;width: 40%;font-size: 0.8em;white-space:normal;}
 table.user-grade td.itemcenter {text-align:center;}
+.user-grade .gradeitemdescription { font-weight: normal; position: absolute; }
+.user-grade .gradeitemdescriptionfiller { clear: left; height: 1em; }
+.user-grade .gradeitemdescription { font-weight: normal; position: absolute;}
index ac8072f..96ac3f5 100644 (file)
@@ -40,6 +40,7 @@ $string['aggregatemean'] = 'Mean of grades';
 $string['aggregatemedian'] = 'Median of grades';
 $string['aggregatemin'] = 'Lowest grade';
 $string['aggregatemode'] = 'Mode of grades';
+$string['aggregatenotonlygraded'] = 'Include empty grades';
 $string['aggregateonlygraded'] = 'Exclude empty grades';
 $string['aggregateonlygraded_help'] = 'An empty grade is a grade which is missing from the gradebook. It may be from an assignment submission which has not yet been graded or from a quiz which has not yet been attempted etc.
 
@@ -48,6 +49,7 @@ $string['aggregateoutcomes'] = 'Include outcomes in aggregation';
 $string['aggregateoutcomes_help'] = 'If enabled, outcomes are included in the aggregation. This may result in an unexpected category total.';
 $string['aggregatesonly'] = 'Aggregates only';
 $string['aggregatesubcats'] = 'Aggregate including subcategories';
+$string['aggregatesubcatsshort'] = 'Include subcategories';
 $string['aggregatesubcats_help'] = 'This setting determines whether grades in subcategories are included in the aggregation.';
 $string['aggregatesum'] = 'Sum of grades';
 $string['aggregateweightedmean'] = 'Weighted mean of grades';
@@ -152,6 +154,7 @@ $string['droplow'] = 'Drop the lowest';
 $string['droplow_help'] = 'This setting enables a specified number of the lowest grades to be excluded from the aggregation.';
 $string['droplowestvalue'] = 'Set drop lowest grade value';
 $string['dropped'] = 'Dropped';
+$string['droplowestvalues'] = 'Drop {$a} lowest values';
 $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';
 $string['duplicatescale'] = 'Duplicate scale';
@@ -388,6 +391,7 @@ $string['itemnamehelp'] = 'The name of this item, pushed in by the module.';
 $string['items'] = 'Items';
 $string['itemsedit'] = 'Edit grade item';
 $string['keephigh'] = 'Keep the highest';
+$string['keephighestvalues'] = 'Keep the {$a} highest values';
 $string['keephigh_help'] = 'If set, this option will only keep the X highest grades, X being the selected value for this option.';
 $string['keymanager'] = 'Key manager';
 $string['lessthanmin'] = 'The grade entered for {$a->itemname} for {$a->username} is less than the minimum allowed';
index 198b1d8..d8a4c66 100644 (file)
@@ -1601,6 +1601,31 @@ class grade_category extends grade_object {
         }
     }
 
+    /**
+     * Describe the aggregation settings for this category so the reports make more sense.
+     *
+     * @return string description
+     */
+    public function get_description() {
+        $allhelp = array();
+        $aggrstrings = grade_helper::get_aggregation_strings();
+        $allhelp[] = $aggrstrings[$this->aggregation];
+
+        if ($this->droplow) {
+            $allhelp[] = get_string('droplowestvalues', 'grades', $this->droplow);
+        }
+        if ($this->keephigh) {
+            $allhelp[] = get_string('keephighestvalues', 'grades', $this->keephigh);
+        }
+        if (!$this->aggregateonlygraded) {
+            $allhelp[] = get_string('aggregatenotonlygraded', 'grades');
+        }
+        if ($this->aggregatesubcats) {
+            $allhelp[] = get_string('aggregatesubcatsshort', 'grades');
+        }
+        return implode('. ', $allhelp) . '.';
+    }
+
     /**
      * Sets this category's parent id
      *
index 2679146..bc28443 100644 (file)
@@ -1282,6 +1282,19 @@ class grade_item extends grade_object {
         }
     }
 
+    /**
+     * A grade item can return a more detailed description which will be added to the header of the column/row in some reports.
+     *
+     * @return string description
+     */
+    public function get_description() {
+        if ($this->is_course_item() || $this->is_category_item()) {
+            $categoryitem = $this->load_item_category();
+            return $categoryitem->get_description();
+        }
+        return '';
+    }
+
     /**
      * Sets this item's categoryid. A generic method shared by objects that have a parent id of some kind.
      *