MDL-48634 grades: Add an option to rescale when changing the maxgrade

This commit is contained in:
Damyon Wiese 2015-04-15 07:57:28 -04:00 committed by Mark Nelson
parent 9d5d9c64ff
commit d629c601c5
12 changed files with 422 additions and 11 deletions

View file

@ -156,6 +156,8 @@ if ($mform->is_cancelled()) {
}
$grade_item = new grade_item(array('id'=>$id, 'courseid'=>$courseid));
$oldmin = $grade_item->grademin;
$oldmax = $grade_item->grademax;
grade_item::set_properties($grade_item, $data);
$grade_item->outcomeid = null;
@ -175,6 +177,12 @@ if ($mform->is_cancelled()) {
} else {
$grade_item->update();
if (!empty($data->rescalegrades)) {
$newmin = $grade_item->grademin;
$newmax = $grade_item->grademax;
$grade_item->rescale_grades_keep_percentage($oldmin, $oldmax, $newmin, $newmax, 'gradebook');
}
}
// update hiding flag

View file

@ -97,6 +97,10 @@ class edit_item_form extends moodleform {
$mform->setType('grademin', PARAM_RAW);
}
$mform->addElement('selectyesno', 'rescalegrades', get_string('modgraderescalegrades', 'grades'));
$mform->addHelpButton('rescalegrades', 'modgraderescalegrades', 'grades');
$mform->disabledIf('rescalegrades', 'gradetype', 'noteq', GRADE_TYPE_VALUE);
$mform->addElement('text', 'gradepass', get_string('gradepass', 'grades'));
$mform->addHelpButton('gradepass', 'gradepass', 'grades');
$mform->disabledIf('gradepass', 'gradetype', 'eq', GRADE_TYPE_NONE);
@ -269,6 +273,7 @@ class edit_item_form extends moodleform {
// the idnumber of grade itemnumber 0 is synced with course_modules
$mform->hardFreeze('idnumber');
}
$mform->removeElement('rescalegrades');
//$mform->removeElement('calculation');
}
}
@ -342,6 +347,7 @@ class edit_item_form extends moodleform {
// all new items are manual, children of course category
$mform->removeElement('plusfactor');
$mform->removeElement('multfactor');
$mform->removeElement('rescalegrades');
}
// no parent header for course category
@ -353,12 +359,15 @@ class edit_item_form extends moodleform {
/// perform extra validation before submission
function validation($data, $files) {
global $COURSE;
$grade_item = false;
if ($data['id']) {
$grade_item = new grade_item(array('id' => $data['id'], 'courseid' => $data['courseid']));
}
$errors = parent::validation($data, $files);
if (array_key_exists('idnumber', $data)) {
if ($data['id']) {
$grade_item = new grade_item(array('id'=>$data['id'], 'courseid'=>$data['courseid']));
if ($grade_item) {
if ($grade_item->itemtype == 'mod') {
$cm = get_coursemodule_from_instance($grade_item->itemmodule, $grade_item->iteminstance, $grade_item->courseid);
} else {

View file

@ -0,0 +1,76 @@
@core @core_grades
Feature: We can change the maximum and minimum number of points for manual items with existing grades
In order to verify existing grades are modified as expected
As an teacher
I need to modify a grade item with exiting grades
I need to ensure existing grades are modified in an expected manner
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email | idnumber |
| teacher1 | Teacher | 1 | teacher1@example.com | t1 |
| student1 | Student | 1 | student1@example.com | s1 |
| student2 | Student | 2 | student2@example.com | s2 |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
| student2 | C1 | student |
And I log in as "teacher1"
And I am on site homepage
And I follow "Course 1"
And I navigate to "Grades" node in "Course administration"
And I navigate to "Gradebook setup" node in "Grade administration > Setup"
And I press "Add grade item"
And I set the following fields to these values:
| Item name | Manual item 1 |
| Minimum grade | 0 |
| Maximum grade | 100 |
And I press "Save changes"
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"
Scenario: Change maximum number of points on a graded item.
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 "10.00" to the user "Student 1" for the grade item "Manual item 1"
And I give the grade "8.00" to the user "Student 2" for the grade item "Manual item 1"
And I press "Save changes"
When I navigate to "Gradebook setup" node in "Grade administration > Setup"
And I click on "Edit" "link" in the "Manual item 1" "table_row"
And I click on "Edit settings" "link" in the "Manual item 1" "table_row"
And I set the following fields to these values:
| Maximum grade | 10 |
| Rescale existing grades | No |
And I press "Save changes"
And I follow "User report"
And I select "Student 1" from the "Select all or one user" singleselect
Then the following should exist in the "user-grade" table:
| Grade item | Calculated weight | Grade | Contribution to course total |
| Manual item 1 | 100.00 % | 10.00 | 100.00 % |
And I select "Student 2" from the "Select all or one user" singleselect
And the following should exist in the "user-grade" table:
| Grade item | Calculated weight | Grade | Contribution to course total |
| Manual item 1 | 100.00 % | 8.00 | 80.00 % |
And I navigate to "Gradebook setup" node in "Grade administration > Setup"
And I click on "Edit" "link" in the "Manual item 1" "table_row"
And I click on "Edit settings" "link" in the "Manual item 1" "table_row"
And I set the following fields to these values:
| Maximum grade | 20 |
| Rescale existing grades | Yes |
And I press "Save changes"
And I follow "User report"
And I select "Student 1" from the "Select all or one user" singleselect
And the following should exist in the "user-grade" table:
| Grade item | Calculated weight | Grade | Contribution to course total |
| Manual item 1 | 100.00 % | 20.00 | 100.00 % |
And I select "Student 2" from the "Select all or one user" singleselect
And the following should exist in the "user-grade" table:
| Grade item | Calculated weight | Grade | Contribution to course total |
| Manual item 1 | 100.00 % | 16.00 | 80.00 % |