*/
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
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
}
}
$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];
}
}
}
}
$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);
--- /dev/null
+@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 | - |