Merge branch 'MDL-47463-master' of git://github.com/FMCorz/moodle

This commit is contained in:
Dan Poltawski 2014-10-14 19:11:57 +01:00
commit 4f639ec86b
4 changed files with 171 additions and 33 deletions

View 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

View 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 | FA | 50.00 % |
| Category total | 3.00 | 05 | 60.00 % |
| Course total | 3.00 | 05 | 60.00 % |
| Grade item | Grade | Range | Percentage | Contribution to course total |
| Test assignment one | C | FA | 50.00 % | 3.00 |
| Category total | 3.00 | 05 | 60.00 % | - |
| Course total | 3.00 | 05 | 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 | FA | 75.00 % |
| Category total | 4.00 | 05 | 80.00 % |
| Course total | 4.00 | 05 | 80.00 % |
| Grade item | Grade | Range | Percentage | Contribution to course total |
| Test assignment one | B | FA | 75.00 % | 4.00 |
| Category total | 4.00 | 05 | 80.00 % | - |
| Course total | 4.00 | 05 | 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 | FA | 50.00 % |
| Category total<aggregation>. | 3.00 | 15 | 50.00 % |
| Course total<aggregation>. | <coursetotal3> | 0100 | <courseperc3> |
| Grade item | Grade | Range | Percentage | Contribution to course total |
| Test assignment one | C | FA | 50.00 % | <contrib3> |
| Category total<aggregation>. | 3.00 | 15 | 50.00 % | - |
| Course total<aggregation>. | <coursetotal3> | 0100 | <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 | FA | 75.00 % |
| Category total<aggregation>. | 4.00 | 15 | 75.00 % |
| Course total<aggregation>. | <coursetotal2> | 0100 | <courseperc2> |
| Grade item | Grade | Range | Percentage | Contribution to course total |
| Test assignment one | B | FA | 75.00 % | <contrib2> |
| Category total<aggregation>. | 4.00 | 15 | 75.00 % | - |
| Course total<aggregation>. | <coursetotal2> | 0100 | <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 |

View File

@ -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.001.00 | 0.001.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 | 01 | - |
| Course total | 1.00 | 01 | - |
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 | - | 01 | - |
| Course total | - | 01 | - |
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.00100.0 | 0.00100.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> | 0100 | - |
| Course total<aggregation>. | <coursetotal1> | 0100 | - |
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 |

View 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;