Merge branch 'MDL-47463-master' of git://github.com/FMCorz/moodle
authorDan Poltawski <dan@moodle.com>
Tue, 14 Oct 2014 18:11:57 +0000 (19:11 +0100)
committerDan Poltawski <dan@moodle.com>
Tue, 14 Oct 2014 18:11:57 +0000 (19:11 +0100)
grade/report/user/lib.php
grade/tests/behat/grade_scales.feature
grade/tests/behat/grade_single_item_scales.feature [new file with mode: 0644]
lib/grade/grade_category.php

index 9c0660c..562703a 100644 (file)
@@ -712,12 +712,12 @@ class grade_report_user extends grade_report {
                 // Normalise the gradeval.
                 $gradecat = $grade_object->load_parent_category();
                 if ($gradecat->aggregation == GRADE_AGGREGATE_SUM) {
-                    // Natural aggregation/Sum of grades does not consider the mingrade.
+                    // Natural aggregation/Sum of grades does not consider the mingrade, cannot traditionnally normalise it.
                     $graderange = $this->aggregationhints[$itemid]['grademax'];
                     $gradeval = $this->aggregationhints[$itemid]['grade'] / $graderange;
                 } else {
-                    $graderange = $this->aggregationhints[$itemid]['grademax'] - $this->aggregationhints[$itemid]['grademin'];
-                    $gradeval = ($this->aggregationhints[$itemid]['grade'] - $this->aggregationhints[$itemid]['grademin']) / $graderange;
+                    $gradeval = grade_grade::standardise_score($this->aggregationhints[$itemid]['grade'],
+                        $this->aggregationhints[$itemid]['grademin'], $this->aggregationhints[$itemid]['grademax'], 0, 1);
                 }
 
                 // Multiply the normalised value by the weight
index 1421da7..c884ba8 100644 (file)
@@ -63,6 +63,11 @@ Feature: View gradebook when scales are used
     And I press "Save changes"
     And I follow "Course 1"
     And I follow "Grades"
+    And I navigate to "Course grade settings" node in "Grade administration > Setup"
+    And I set the field "Show weightings" to "Show"
+    And I set the field "Show contribution to course total" to "Show"
+    And I press "Save changes"
+    And I follow "Grader report"
     And I turn editing mode on
 
   @javascript
@@ -83,10 +88,10 @@ Feature: View gradebook when scales are used
     And I set the field "Select all or one user" to "Student 3"
     And I click on "Select all or one user" "select"
     And the following should exist in the "user-grade" table:
-      | Grade item          | Grade | Range | Percentage |
-      | Test assignment one | C     | F–A   | 50.00 %    |
-      | Category total      | 3.00  | 0–5   | 60.00 %    |
-      | Course total        | 3.00  | 0–5   | 60.00 %    |
+      | Grade item          | Grade | Range | Percentage | Contribution to course total |
+      | Test assignment one | C     | F–A   | 50.00 %    | 3.00                         |
+      | Category total      | 3.00  | 0–5   | 60.00 %    | -                            |
+      | Course total        | 3.00  | 0–5   | 60.00 %    | -                            |
     And I set the field "jump" to "Categories and items"
     And the following should exist in the "grade_edit_tree_table" table:
       | Name                | Max grade |
@@ -98,10 +103,10 @@ Feature: View gradebook when scales are used
     And I follow "Course 1"
     And I follow "Grades"
     And the following should exist in the "user-grade" table:
-      | Grade item          | Grade | Range | Percentage |
-      | Test assignment one | B     | F–A   | 75.00 %    |
-      | Category total      | 4.00  | 0–5   | 80.00 %    |
-      | Course total        | 4.00  | 0–5   | 80.00 %    |
+      | Grade item          | Grade | Range | Percentage | Contribution to course total |
+      | Test assignment one | B     | F–A   | 75.00 %    | 4.00                         |
+      | Category total      | 4.00  | 0–5   | 80.00 %    | -                            |
+      | Course total        | 4.00  | 0–5   | 80.00 %    | -                            |
 
   @javascript
   Scenario Outline: Test displaying scales in gradebook in all other aggregation methods
@@ -131,10 +136,10 @@ Feature: View gradebook when scales are used
     And I set the field "Select all or one user" to "Student 3"
     And I click on "Select all or one user" "select"
     And the following should exist in the "user-grade" table:
-      | Grade item          | Grade          | Range | Percentage    |
-      | Test assignment one | C              | F–A   | 50.00 %       |
-      | Category total<aggregation>.      | 3.00           | 1–5   | 50.00 %       |
-      | Course total<aggregation>.        | <coursetotal3> | 0–100 | <courseperc3> |
+      | Grade item                   | Grade          | Range | Percentage    | Contribution to course total |
+      | Test assignment one          | C              | F–A   | 50.00 %       | <contrib3>                   |
+      | Category total<aggregation>. | 3.00           | 1–5   | 50.00 %       | -                            |
+      | Course total<aggregation>.   | <coursetotal3> | 0–100 | <courseperc3> | -                            |
     And I set the field "jump" to "Categories and items"
     And the following should exist in the "grade_edit_tree_table" table:
       | Name                | Max grade |
@@ -146,18 +151,18 @@ Feature: View gradebook when scales are used
     And I follow "Course 1"
     And I follow "Grades"
     And the following should exist in the "user-grade" table:
-      | Grade item          | Grade          | Range | Percentage    |
-      | Test assignment one | B              | F–A   | 75.00 %       |
-      | Category total<aggregation>.      | 4.00           | 1–5   | 75.00 %       |
-      | Course total<aggregation>.        | <coursetotal2> | 0–100 | <courseperc2> |
+      | Grade item                   | Grade          | Range | Percentage    | Contribution to course total |
+      | Test assignment one          | B              | F–A   | 75.00 %       | <contrib2>                   |
+      | Category total<aggregation>. | 4.00           | 1–5   | 75.00 %       | -                            |
+      | Course total<aggregation>.   | <coursetotal2> | 0–100 | <courseperc2> | -                            |
 
-  Examples:
-      | aggregation                         | coursetotal1 | coursetotal2 | coursetotal3 | coursetotal4 | coursetotal5 |overallavg | courseperc2 | courseperc3 |
-      | Mean of grades                      | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
-      | Weighted mean of grades             | -            | -            | -            | -            | -            | -         | -           | -           |
-      | Simple weighted mean of grades      | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
-      | Mean of grades (with extra credits) | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
-      | Median of grades                    | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
-      | Lowest grade                        | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
-      | Highest grade                       | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
-      | Mode of grades                      | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     |
+    Examples:
+      | aggregation                         | coursetotal1 | coursetotal2 | coursetotal3 | coursetotal4 | coursetotal5 |overallavg | courseperc2 | courseperc3 | contrib2 | contrib3 |
+      | Mean of grades                      | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
+      | Weighted mean of grades             | -            | -            | -            | -            | -            | -         | -           | -           | 0.00     | 0.00     |
+      | Simple weighted mean of grades      | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
+      | Mean of grades (with extra credits) | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
+      | Median of grades                    | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
+      | Lowest grade                        | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
+      | Highest grade                       | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
+      | Mode of grades                      | 100.00       | 75.00        | 50.00        | 25.00        | 0.00         | 50.00     | 75.00 %     | 50.00 %     | 75.00    | 50.00    |
diff --git a/grade/tests/behat/grade_single_item_scales.feature b/grade/tests/behat/grade_single_item_scales.feature
new file mode 100644 (file)
index 0000000..6692c49
--- /dev/null
@@ -0,0 +1,134 @@
+@core @core_grades
+Feature: View gradebook when single item scales are used
+  In order to use single item scales to grade activities
+  As an teacher
+  I need to be able to view gradebook with single item scales
+
+  Background:
+    Given I log in as "admin"
+    And I set the following administration settings values:
+      | grade_report_showranges    | 1 |
+      | grade_aggregations_visible | Mean of grades,Weighted mean of grades,Simple weighted mean of grades,Mean of grades (with extra credits),Median of grades,Lowest grade,Highest grade,Mode of grades,Natural |
+    And I navigate to "Scales" node in "Site administration > Grades"
+    And I press "Add a new scale"
+    And I set the following fields to these values:
+      | Name  | Singleitem |
+      | Scale | Ace!       |
+    And I press "Save changes"
+    And I log out
+    And the following "courses" exist:
+      | fullname | shortname |
+      | Course 1 | C1        |
+    And the following "users" exist:
+      | username | firstname | lastname | email            | idnumber |
+      | teacher1 | Teacher   | 1        | teacher1@asd.com | t1       |
+      | student1 | Student   | 1        | student1@asd.com | s1       |
+      | student2 | Student   | 2        | student2@asd.com | s2       |
+    And the following "course enrolments" exist:
+      | user     | course | role           |
+      | teacher1 | C1     | editingteacher |
+      | student1 | C1     | student        |
+      | student2 | C1     | student        |
+    And the following "grade categories" exist:
+      | fullname       | course |
+      | Sub category 1 | C1     |
+    And the following "activities" exist:
+      | activity | course | idnumber | name                | intro             | gradecategory  |
+      | assign   | C1     | a1       | Test assignment one | Submit something! | Sub category 1 |
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I follow "Test assignment one"
+    And I follow "Edit settings"
+    And I expand all fieldsets
+    And I set the field "grade[modgrade_type]" to "Scale"
+    And I set the field "grade[modgrade_scale]" to "Singleitem"
+    And I press "Save and display"
+    And I follow "View/grade all submissions"
+    And I click on "Grade Student 1" "link" in the "Student 1" "table_row"
+    And I set the field "Grade" to "A"
+    And I press "Save changes"
+    And I follow "Course 1"
+    And I follow "Grades"
+    And I navigate to "Course grade settings" node in "Grade administration > Setup"
+    And I set the field "Show weightings" to "Show"
+    And I set the field "Show contribution to course total" to "Show"
+    And I press "Save changes"
+    And I follow "Grader report"
+    And I turn editing mode on
+
+  @javascript
+  Scenario: Test displaying single item scales in gradebook in aggregation method Natural
+    When I turn editing mode off
+    Then the following should exist in the "user-grades" table:
+      | -1-                | -4-       | -5-            | -6-          |
+      | Student 1          | Ace!      | 1.00           | 1.00         |
+    And the following should exist in the "user-grades" table:
+      | -1-                | -2-       | -3-            | -4-          |
+      | Range              | Ace!–Ace! | 0.00–1.00      | 0.00–1.00    |
+      | Overall average    | Ace!      | 1.00           | 1.00         |
+    And I follow "User report"
+    And I set the field "Select all or one user" to "Student 1"
+    And the following should exist in the "user-grade" table:
+      | Grade item          | Grade | Range     | Contribution to course total |
+      | Test assignment one | Ace!  | Ace!–Ace! | 1.00                         |
+      | Category total      | 1.00  | 0–1       | -                            |
+      | Course total        | 1.00  | 0–1       | -                            |
+    And I set the field "Select all or one user" to "Student 2"
+    And the following should exist in the "user-grade" table:
+      | Grade item          | Grade | Range     | Contribution to course total |
+      | Test assignment one | -     | Ace!–Ace! | 0.00                         |
+      | Category total      | -     | 0–1       | -                            |
+      | Course total        | -     | 0–1       | -                            |
+    And I set the field "jump" to "Categories and items"
+    And the following should exist in the "grade_edit_tree_table" table:
+      | Name                | Max grade |
+      | Test assignment one | 1.00      |
+      | Category total      | 1.00      |
+      | Course total        | 1.00      |
+
+  @javascript
+  Scenario Outline: Test displaying single item scales in gradebook in all other aggregation methods
+    When I follow "Edit   Course 1"
+    And I set the field "Aggregation" to "<aggregation>"
+    And I press "Save changes"
+    And I follow "Edit   Sub category 1"
+    And I expand all fieldsets
+    And I set the field "Aggregation" to "<aggregation>"
+    And I set the field "Category name" to "Sub category (<aggregation>)"
+    # And I set the field "Maximum grade" to "5"
+    # And I set the field "Minimum grade" to "1"
+    And I press "Save changes"
+    And I turn editing mode off
+    Then the following should exist in the "user-grades" table:
+      | -1-                | -4-       | -5-            | -6-            |
+      | Student 1          | Ace!      | <cattotal1>    | <coursetotal1> |
+      | Student 2          | -         | -              | -              |
+    And the following should exist in the "user-grades" table:
+      | -1-                | -2-       | -3-            | -4-            |
+      | Range              | Ace!–Ace! | 0.00–100.0     | 0.00–100.00    |
+      | Overall average    | Ace!      | <catavg>       | <overallavg>   |
+    And I follow "User report"
+    And I set the field "Select all or one user" to "Student 1"
+    And I click on "Select all or one user" "select"
+    And the following should exist in the "user-grade" table:
+      | Grade item                        | Grade          | Range       | Contribution to course total |
+      | Test assignment one               | Ace!           | Ace!–Ace!   | <contrib1>                   |
+      | Category total<aggregation>.      | <cattotal1>    | 0–100       | -                            |
+      | Course total<aggregation>.        | <coursetotal1> | 0–100       | -                            |
+    And I set the field "jump" to "Categories and items"
+    And the following should exist in the "grade_edit_tree_table" table:
+      | Name                         | Max grade |
+      | Test assignment one          | Ace! (1)  |
+      | Category total<aggregation>. | 100.00    |
+      | Course total<aggregation>.   | 100.00    |
+
+    Examples:
+      | aggregation                         | contrib1 | cattotal1 | coursetotal1 | catavg | overallavg |
+      | Mean of grades                      | 100.00   | 100.00    | 100.00       | 100.00 | 100.00     |
+      | Weighted mean of grades             | 0.00     | 100.00    | -            | 100.00 | -          |
+      | Simple weighted mean of grades      | 0.00     | -         | -            | -      | -          |
+      | Mean of grades (with extra credits) | 100.00   | 100.00    | 100.00       | 100.00 | 100.00     |
+      | Median of grades                    | 100.00   | 100.00    | 100.00       | 100.00 | 100.00     |
+      | Lowest grade                        | 100.00   | 100.00    | 100.00       | 100.00 | 100.00     |
+      | Highest grade                       | 100.00   | 100.00    | 100.00       | 100.00 | 100.00     |
+      | Mode of grades                      | 100.00   | 100.00    | 100.00       | 100.00 | 100.00     |
index b0cfb9b..3f64375 100644 (file)
@@ -969,15 +969,14 @@ class grade_category extends grade_object {
                 $sum       = 0;
 
                 foreach ($grade_values as $itemid=>$grade_value) {
-
+                    if ($weights !== null) {
+                        $weights[$itemid] = $items[$itemid]->aggregationcoef;
+                    }
                     if ($items[$itemid]->aggregationcoef <= 0) {
                         continue;
                     }
                     $weightsum += $items[$itemid]->aggregationcoef;
                     $sum       += $items[$itemid]->aggregationcoef * $grade_value;
-                    if ($weights !== null) {
-                        $weights[$itemid] = $items[$itemid]->aggregationcoef;
-                    }
                 }
                 if ($weightsum == 0) {
                     $agg_grade = null;