Merge branch 'MDL-50757-28' of git://github.com/damyon/moodle into MOODLE_28_STABLE
This commit is contained in:
@@ -4061,6 +4061,8 @@ function xmldb_main_upgrade($oldversion) {
|
||||
if ($oldversion < 2014111000.00) {
|
||||
// Coming from 2.7 or older, we need to flag the step minmaxgrade to be ignored.
|
||||
set_config('upgrade_minmaxgradestepignored', 1);
|
||||
// Coming from 2.7 or older, we need to flag the step for changing calculated grades to be regraded.
|
||||
set_config('upgrade_calculatedgradeitemsonlyregrade', 1);
|
||||
|
||||
// Main savepoint reached.
|
||||
upgrade_main_savepoint(true, 2014111000.00);
|
||||
@@ -4126,6 +4128,8 @@ function xmldb_main_upgrade($oldversion) {
|
||||
|
||||
// To skip running the same script on the upgrade to the next major release.
|
||||
set_config('upgrade_calculatedgradeitemsignored', 1);
|
||||
// This config value is never used again.
|
||||
unset_config('upgrade_calculatedgradeitemsonlyregrade');
|
||||
}
|
||||
|
||||
// Main savepoint reached.
|
||||
|
||||
+13
-6
@@ -587,7 +587,10 @@ function upgrade_calculated_grade_items($courseid = null) {
|
||||
$singlecoursesql = "AND ns.id = :courseid";
|
||||
$params['courseid'] = $courseid;
|
||||
}
|
||||
$siteminmaxtouse = $CFG->grade_minmaxtouse;
|
||||
$siteminmaxtouse = 1;
|
||||
if (isset($CFG->grade_minmaxtouse)) {
|
||||
$siteminmaxtouse = $CFG->grade_minmaxtouse;
|
||||
}
|
||||
$courseidsql = "SELECT ns.id
|
||||
FROM (
|
||||
SELECT c.id, coalesce(" . $DB->sql_compare_text('gs.value') . ", :siteminmax) AS gradevalue
|
||||
@@ -653,11 +656,15 @@ function upgrade_calculated_grade_items($courseid = null) {
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($affectedcourses as $courseid) {
|
||||
// Check to see if the gradebook freeze is already in affect.
|
||||
$gradebookfreeze = get_config('core', 'gradebook_calculations_freeze_' . $courseid->courseid);
|
||||
if (!$gradebookfreeze) {
|
||||
set_config('gradebook_calculations_freeze_' . $courseid->courseid, 20150627);
|
||||
foreach ($affectedcourses as $affectedcourseid) {
|
||||
if (isset($CFG->upgrade_calculatedgradeitemsonlyregrade) && !($courseid)) {
|
||||
$DB->set_field('grade_items', 'needsupdate', 1, array('courseid' => $affectedcourseid->courseid));
|
||||
} else {
|
||||
// Check to see if the gradebook freeze is already in affect.
|
||||
$gradebookfreeze = get_config('core', 'gradebook_calculations_freeze_' . $affectedcourseid->courseid);
|
||||
if (!$gradebookfreeze) {
|
||||
set_config('gradebook_calculations_freeze_' . $affectedcourseid->courseid, 20150627);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -549,7 +549,7 @@ class core_upgradelib_testcase extends advanced_testcase {
|
||||
/**
|
||||
* Test the upgrade function for flagging courses with calculated grade item problems.
|
||||
*/
|
||||
public function test_upgrade_calculated_grade_items() {
|
||||
public function test_upgrade_calculated_grade_items_freeze() {
|
||||
global $DB, $CFG;
|
||||
$this->resetAfterTest();
|
||||
|
||||
@@ -676,4 +676,69 @@ class core_upgradelib_testcase extends advanced_testcase {
|
||||
$this->assertEquals(20150627, $CFG->{'gradebook_calculations_freeze_' . $course1->id});
|
||||
$this->assertEquals(20150627, $CFG->{'gradebook_calculations_freeze_' . $course2->id});
|
||||
}
|
||||
|
||||
function test_upgrade_calculated_grade_items_regrade() {
|
||||
global $DB, $CFG;
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Create a user.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Create a course.
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
|
||||
// Enrol the user in the course.
|
||||
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||
$maninstance1 = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual'), '*', MUST_EXIST);
|
||||
$manual = enrol_get_plugin('manual');
|
||||
$manual->enrol_user($maninstance1, $user->id, $studentrole->id);
|
||||
|
||||
set_config('upgrade_calculatedgradeitemsonlyregrade', 1);
|
||||
|
||||
// Creating a category for a grade item.
|
||||
$gradecategory = new grade_category();
|
||||
$gradecategory->fullname = 'calculated grade category';
|
||||
$gradecategory->courseid = $course->id;
|
||||
$gradecategory->insert();
|
||||
$gradecategoryid = $gradecategory->id;
|
||||
|
||||
// This is a manual grade item.
|
||||
$gradeitem = new grade_item();
|
||||
$gradeitem->itemname = 'grade item one';
|
||||
$gradeitem->itemtype = 'manual';
|
||||
$gradeitem->categoryid = $gradecategoryid;
|
||||
$gradeitem->courseid = $course->id;
|
||||
$gradeitem->idnumber = 'gi1';
|
||||
$gradeitem->insert();
|
||||
|
||||
// Changing the category into a calculated grade category.
|
||||
$gradecategoryitem = grade_item::fetch(array('iteminstance' => $gradecategory->id));
|
||||
$gradecategoryitem->calculation = '=##gi' . $gradeitem->id . '##/2';
|
||||
$gradecategoryitem->grademax = 50;
|
||||
$gradecategoryitem->grademin = 15;
|
||||
$gradecategoryitem->update();
|
||||
|
||||
// Setting a grade for the student.
|
||||
$grade = $gradeitem->get_grade($user->id, true);
|
||||
$grade->finalgrade = 50;
|
||||
$grade->update();
|
||||
|
||||
grade_regrade_final_grades($course->id);
|
||||
$grade = grade_grade::fetch(array('itemid' => $gradecategoryitem->id, 'userid' => $user->id));
|
||||
$grade->rawgrademax = 100;
|
||||
$grade->rawgrademin = 0;
|
||||
$grade->update();
|
||||
$this->assertNotEquals($gradecategoryitem->grademax, $grade->rawgrademax);
|
||||
$this->assertNotEquals($gradecategoryitem->grademin, $grade->rawgrademin);
|
||||
|
||||
// This is the function that we are testing. If we comment out this line, then the test fails because the grade items
|
||||
// are not flagged for regrading.
|
||||
upgrade_calculated_grade_items();
|
||||
grade_regrade_final_grades($course->id);
|
||||
|
||||
$grade = grade_grade::fetch(array('itemid' => $gradecategoryitem->id, 'userid' => $user->id));
|
||||
|
||||
$this->assertEquals($gradecategoryitem->grademax, $grade->rawgrademax);
|
||||
$this->assertEquals($gradecategoryitem->grademin, $grade->rawgrademin);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user