-
Bug
-
Resolution: Fixed
-
Blocker
-
2.8, 2.9
-
MOODLE_28_STABLE, MOODLE_29_STABLE
-
MOODLE_28_STABLE, MOODLE_29_STABLE
-
MDL-48618-master -
-
Team '; drop tables Sprint 7
Quick summary
If a grade item of has its max points changed after someone receives a grade, then the resulting computed grade becomes very different from previous version of Moodle.
Steps to reproduce
You can recreate the problem in 2.8 without the upgrade step.
- You will need a course with two users, A and B.
- Go into your gradebook and create a new manual Grade Item, leave it at the default 100 points and change the display to 'Real (Percent)'
- Give User A a grade of '10' and save.
- You should see the user has a grade of '10 (10%)'.
- Edit the grade item and set the maximum points to 10.
- Go back to the gradebook and give User B a grade of 10 and save.
- You will now see that User A has a grade of '10 (10%)' while User B has a grade of '10 (100%)'
- If you did this under 2.7, both users would have '10 (100%)', but then when you upgrade the site to 2.8, the grades would change to how you see them in the above example.
Background/Cause
When a grade is entered for a user, it is recorded in the grade_grade table. We record various bits of data, include the then current maxgrade of the grade_item, but under rawgrademax. In versions of Moodle prior to 2.8, when making derivative computations off the grade, we would always fetch grade_item->maxgrade, which contains the now max grade for the grade_item, and use that as the number of available points.
After the gradebook changes, grade_grade->rawgrademax is now used for the computation, in large part to support the computation of grades for different users with different sets of hidden grades. This has lead to a number of side effects:
- Percents and any downstream computed grades (and number of points available) have changed for grade entries that have this problem.
- Two users with the same number of points for an item can see different percents.
- Drop lowest/keep highest selections are wrong.
- If you have the Range rows on in the gradebook, it will show the 'expanded' range. So in our above example it will show 0-100, even though 10 is the max points.
- In the user report the user will see the expanded range.
How do users cause it
The most common thing we see is that teachers create a grade item for something, and forget to change the max points to what they want (usually 4 points). They then go and grade people. Then they see the mistake and change the max grade to be 4, with their intent (and the previous behavior being) that a user with a grade of 4 points has a 100%.
How wide spread
I've written a reporting and fixing tool that I will attach to this, but I ran some reports on our system and found that it effects 10-15% of all enrollments in our system, and about 5% of all grade_grade entries.
Possible routes to a solution?
- Go back to the old way of computing grade_grade values.
MDL-47078andMDL-47059are where these changes were made. - Decide that the new way is the right way, which means a few things need to be done:
- Upgrade steps to 'fixup' the old rawgrademax values.
- Is it ok to just copy grade_item->maxgrade over to grade_grade->rawgrademax when they don't match (only for non course or category item types) and then make it all as needing regrading?
- Restore steps to fix restores
- Figuring out how to stop it from happening in the future. When they change a grade item, what do they mean? We may need to add UI to get the user to choose between these:
- I want to keep the point value and just change the 'out of' for everybody. (Old behavior)
- I want to keep the same equivalent %, scaled to the new max.
- I want to keep the points and max as they were for all entered grade. (Current behavior, and this seems the least useful from a user standpoint to me)
- Review each module with grades and make sure they behave correctly (mod_assign is particularly fun in this regard...)
- Upgrade steps to 'fixup' the old rawgrademax values.
Original chat between Eric and Eloy: https://moodle.org/local/chatlogs/index.php?conversationid=16933
- blocks
-
MDL-50481 Behat "I select X from the Y singleselect" does not always work without JS
- Closed
- has a non-specific relationship to
-
MDL-52522 grade_minmaxtouse not respected for overridden categories
- Closed
-
MDL-50582 Grade display outside of the gradebook reports
- Closed
-
MDL-50569 Handle minmaxtouse when restoring a course
- Closed
-
MDL-48634 Add option to rescale existing grades when changing max points
- Closed
- has been marked as being related by
-
MDL-48239 Max Grade of Aspects with Calculation Formula is always 100
- Closed
-
MDL-50089 Gradebook export does not respect aggregate only non-empty grades for percentage and letter
- Closed
-
MDL-50432 Grade integrity must be maintained during upgrades
- Closed
- is a regression caused by
-
MDL-47059 Investigate/fix handling of hidden and excluded grades within natural weights
- Closed
-
MDL-47078 Sum of grades does not work with exclude empty grades
- Closed
- Testing discovered
-
MDL-50583 Optimize upgrade_minmaxgrade course detection query to use keys
- Closed
- will help resolve
-
MDL-50729 Oddity in logs; shows student updated others' grades.
- Closed