Merge branch 'MDL-52218_master_alt' of git://github.com/markn86/moodle
authorDan Poltawski <dan@moodle.com>
Mon, 18 Jan 2016 14:03:54 +0000 (14:03 +0000)
committerDan Poltawski <dan@moodle.com>
Mon, 18 Jan 2016 14:03:54 +0000 (14:03 +0000)
grade/report/grader/lib.php
grade/report/grader/tests/behat/switch_views.feature [new file with mode: 0644]

index 2261691..47c31e9 100644 (file)
@@ -38,6 +38,13 @@ class grade_report_grader extends grade_report {
      */
     public $grades;
 
+    /**
+     * Contains all the grades for the course - even the ones not displayed in the grade tree.
+     *
+     * @var array $allgrades
+     */
+    private $allgrades;
+
     /**
      * Array of errors for bulk grades updating.
      * @var array $gradeserror
@@ -538,8 +545,10 @@ class grade_report_grader extends grade_report {
 
         if ($grades = $DB->get_records_sql($sql, $params)) {
             foreach ($grades as $graderec) {
+                $grade = new grade_grade($graderec, false);
+                $this->allgrades[$graderec->userid][$graderec->itemid] = $grade;
                 if (in_array($graderec->userid, $userids) and array_key_exists($graderec->itemid, $this->gtree->get_items())) { // some items may not be present!!
-                    $this->grades[$graderec->userid][$graderec->itemid] = new grade_grade($graderec, false);
+                    $this->grades[$graderec->userid][$graderec->itemid] = $grade;
                     $this->grades[$graderec->userid][$graderec->itemid]->grade_item = $this->gtree->get_item($graderec->itemid); // db caching
                 }
             }
@@ -553,6 +562,8 @@ class grade_report_grader extends grade_report {
                     $this->grades[$userid][$itemid]->itemid = $itemid;
                     $this->grades[$userid][$itemid]->userid = $userid;
                     $this->grades[$userid][$itemid]->grade_item = $this->gtree->get_item($itemid); // db caching
+
+                    $this->allgrades[$userid][$itemid] = $this->grades[$userid][$itemid];
                 }
             }
         }
@@ -898,13 +909,23 @@ class grade_report_grader extends grade_report {
         }
         $jsscales = $scalesarray;
 
+        // Get all the grade items if the user can not view hidden grade items.
+        // It is possible that the user is simply viewing the 'Course total' by switching to the 'Aggregates only' view
+        // and that this user does not have the ability to view hidden items. In this case we still need to pass all the
+        // grade items (in case one has been hidden) as the course total shown needs to be adjusted for this particular
+        // user.
+        if (!$this->canviewhidden) {
+            $allgradeitems = grade_item::fetch_all(array('courseid' => $this->courseid));
+        }
+
         foreach ($this->users as $userid => $user) {
 
             if ($this->canviewhidden) {
                 $altered = array();
                 $unknown = array();
             } else {
-                $hidingaffected = grade_grade::get_hiding_affected($this->grades[$userid], $this->gtree->get_items());
+                $usergrades = $this->allgrades[$userid];
+                $hidingaffected = grade_grade::get_hiding_affected($usergrades, $allgradeitems);
                 $altered = $hidingaffected['altered'];
                 $unknown = $hidingaffected['unknown'];
                 unset($hidingaffected);
diff --git a/grade/report/grader/tests/behat/switch_views.feature b/grade/report/grader/tests/behat/switch_views.feature
new file mode 100644 (file)
index 0000000..db1d5b7
--- /dev/null
@@ -0,0 +1,121 @@
+@gradereport @gradereport_grader
+Feature: We can change what we are viewing on the grader report
+  In order to check the expected results are displayed
+  As a teacher
+  I need to assign grades and check that they display correctly in the gradebook when switching between views.
+
+  Background:
+    Given the following "courses" exist:
+      | fullname | shortname | format |
+      | Course 1 | C1 | topics |
+    And the following "users" exist:
+      | username | firstname | lastname | email |
+      | teacher1 | Teacher | 1 | teacher1@example.com |
+      | student1 | Student | 1 | student1@example.com |
+    And the following "course enrolments" exist:
+      | user | course | role |
+      | teacher1 | C1 | editingteacher |
+      | student1 | C1 | student |
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I add a "Assignment" to section "1" and I fill the form with:
+      | Assignment name | Test assignment name 1 |
+      | Description | Submit your online text |
+      | assignsubmission_onlinetext_enabled | 1 |
+    And I add a "Assignment" to section "1" and I fill the form with:
+      | Assignment name | Test assignment name 2 |
+      | Description | Submit your online text |
+      | assignsubmission_onlinetext_enabled | 1 |
+    And I log out
+    And I log in as "student1"
+    And I follow "Course 1"
+    And I follow "Test assignment name 1"
+    When I press "Add submission"
+    And I set the following fields to these values:
+      | Online text | This is a submission for assignment 1 |
+    And I press "Save changes"
+    Then I should see "Submitted for grading"
+    And I follow "Course 1"
+    And I follow "Test assignment name 2"
+    When I press "Add submission"
+    And I set the following fields to these values:
+      | Online text | This is a submission for assignment 2 |
+    And I press "Save changes"
+    Then I should see "Submitted for grading"
+    And I log out
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I navigate to "Grades" node in "Course administration"
+    And I turn editing mode on
+    And I give the grade "80.00" to the user "Student 1" for the grade item "Test assignment name 1"
+    And I give the grade "90.00" to the user "Student 1" for the grade item "Test assignment name 2"
+    And I press "Save changes"
+    And I turn editing mode off
+
+  @javascript
+  Scenario: View and minimise the grader report containing hidden activities
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I open "Test assignment name 2" actions menu
+    And I click on "Hide" "link" in the "Test assignment name 2" activity
+    And I follow "Course 1"
+    And I navigate to "Grades" node in "Course administration"
+    And I select "Grader report" from the "Grade report" singleselect
+    And I should see "Test assignment name 1"
+    And I should see "Test assignment name 2"
+    And I should see "Course total"
+    And the following should exist in the "user-grades" table:
+      | -1-                | -4-       | -5-       | -6-       |
+      | Student 1          | 80        | 90        | 170       |
+    And I click on "Change to aggregates only" "link"
+    And I should not see "Test assignment name 1"
+    And I should not see "Test assignment name 2"
+    And I should see "Course total"
+    And the following should exist in the "user-grades" table:
+      | -1-                | -4-       |
+      | Student 1          | 170       |
+    And I click on "Change to grades only" "link"
+    And I should see "Test assignment name 1"
+    And I should see "Test assignment name 2"
+    And I should not see "Course total"
+    And the following should exist in the "user-grades" table:
+      | -1-                | -4-       | -5-       |
+      | Student 1          | 80        | 90        |
+
+  @javascript
+  Scenario: View and minimise the grader report containing hidden activities without the 'moodle/grade:viewhidden' capability
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I open "Test assignment name 2" actions menu
+    And I click on "Hide" "link" in the "Test assignment name 2" activity
+    And I log out
+    And I log in as "admin"
+    And I set the following system permissions of "Teacher" role:
+      | capability | permission |
+      | moodle/grade:viewhidden | Prevent |
+    And I log out
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I navigate to "Grades" node in "Course administration"
+    And I select "Grader report" from the "Grade report" singleselect
+    And I should see "Test assignment name 1"
+    And I should see "Test assignment name 2"
+    And I should see "Course total"
+    And the following should exist in the "user-grades" table:
+      | -1-                | -4-       | -5-       | -6-       |
+      | Student 1          | 80        | -         | 80        |
+    And I click on "Change to aggregates only" "link"
+    And I should not see "Test assignment name 1"
+    And I should not see "Test assignment name 2"
+    And I should see "Course total"
+    And the following should exist in the "user-grades" table:
+      | -1-                | -4-       |
+      | Student 1          | 80        |
+    And I click on "Change to grades only" "link"
+    And I should see "Test assignment name 1"
+    And I should see "Test assignment name 2"
+    And I should not see "Course total"
+    And the following should exist in the "user-grades" table:
+      | -1-                | -4-       | -5-       |
+      | Student 1          | 80        | -         |