MDL-45283 restore: Prevent failure when user course grade exists
When we restore a course, the grade that a user has for the grade item of the course cannot be created twice. If we try to create it when it already exists, a database exception is raised because of index duplication. The safest way to proceed is certainly to ignore the grade information from the backup, otherwise we could potentially overwrite existing information. Though, this only applies to restore as merge, and it does not affect the update of the course grade.
This commit is contained in:
@@ -237,7 +237,13 @@ class restore_gradebook_structure_step extends restore_structure_step {
|
||||
$data->timecreated = $this->apply_date_offset($data->timecreated);
|
||||
$data->timemodified = $this->apply_date_offset($data->timemodified);
|
||||
|
||||
$newitemid = $DB->insert_record('grade_grades', $data);
|
||||
$gradeexists = $DB->record_exists('grade_grades', array('userid' => $data->userid, 'itemid' => $data->itemid));
|
||||
if ($gradeexists) {
|
||||
$message = "User id '{$data->userid}' already has a grade entry for grade item id '{$data->itemid}'";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
} else {
|
||||
$newitemid = $DB->insert_record('grade_grades', $data);
|
||||
}
|
||||
} else {
|
||||
$message = "Mapped user id not found for user id '{$olduserid}', grade item id '{$data->itemid}'";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
|
||||
Reference in New Issue
Block a user