Skip to content

Commit

Permalink
Merge branch 'MDL-52218_master_alt' of git://github.com/markn86/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
danpoltawski committed Jan 18, 2016
2 parents 0ff8d34 + ae139d7 commit 574b76a
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 2 deletions.
25 changes: 23 additions & 2 deletions grade/report/grader/lib.php
Expand Up @@ -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
Expand Down Expand Up @@ -538,8 +545,10 @@ public function load_final_grades() {

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
}
}
Expand All @@ -553,6 +562,8 @@ public function load_final_grades() {
$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];
}
}
}
Expand Down Expand Up @@ -898,13 +909,23 @@ public function get_right_rows($displayaverages) {
}
$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);
Expand Down
121 changes: 121 additions & 0 deletions grade/report/grader/tests/behat/switch_views.feature
@@ -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 | - |

0 comments on commit 574b76a

Please sign in to comment.