mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-49247 question restore: avoid unique key errors from old bad data
Several tables have had unique keys added to enforce a constraint that should always have been there. It is possible for old sites to have data that violate the constraints, and sometimes people want to backup data from those old sites, and restore them into a new Moodle. Therefore, we need to guard agains the unique key violation errors.
This commit is contained in:
parent
95751e81ac
commit
8def548b8d
4 changed files with 28 additions and 14 deletions
|
@ -104,8 +104,13 @@ class restore_qtype_match_plugin extends restore_qtype_plugin {
|
|||
|
||||
// Adjust some columns.
|
||||
$data->questionid = $newquestionid;
|
||||
$newitemid = $DB->insert_record('qtype_match_options', $data);
|
||||
$this->set_mapping('qtype_match_options', $oldid, $newitemid);
|
||||
|
||||
// It is possible for old backup files to contain unique key violations.
|
||||
// We need to check to avoid that.
|
||||
if (!$DB->record_exists('qtype_match_options', array('questionid' => $data->questionid))) {
|
||||
$newitemid = $DB->insert_record('qtype_match_options', $data);
|
||||
$this->set_mapping('qtype_match_options', $oldid, $newitemid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -70,12 +70,14 @@ class restore_qtype_multichoice_plugin extends restore_qtype_plugin {
|
|||
// If the question has been created by restore, we need to create its
|
||||
// qtype_multichoice_options too.
|
||||
if ($questioncreated) {
|
||||
// Adjust some columns.
|
||||
$data->questionid = $newquestionid;
|
||||
// Insert record.
|
||||
$newitemid = $DB->insert_record('qtype_multichoice_options', $data);
|
||||
// Create mapping (needed for decoding links).
|
||||
$this->set_mapping('qtype_multichoice_options', $oldid, $newitemid);
|
||||
|
||||
// It is possible for old backup files to contain unique key violations.
|
||||
// We need to check to avoid that.
|
||||
if (!$DB->record_exists('qtype_multichoice_options', array('questionid' => $data->questionid))) {
|
||||
$newitemid = $DB->insert_record('qtype_multichoice_options', $data);
|
||||
$this->set_mapping('qtype_multichoice_options', $oldid, $newitemid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,12 +86,14 @@ class restore_qtype_randomsamatch_plugin extends restore_qtype_plugin {
|
|||
if (!isset($data->shownumcorrect)) {
|
||||
$data->shownumcorrect = 0;
|
||||
}
|
||||
// Adjust some columns.
|
||||
$data->questionid = $newquestionid;
|
||||
// Insert record.
|
||||
$newitemid = $DB->insert_record('qtype_randomsamatch_options', $data);
|
||||
// Create mapping.
|
||||
$this->set_mapping('qtype_randomsamatch_options', $oldid, $newitemid);
|
||||
|
||||
// It is possible for old backup files to contain unique key violations.
|
||||
// We need to check to avoid that.
|
||||
if (!$DB->record_exists('qtype_randomsamatch_options', array('questionid' => $data->questionid))) {
|
||||
$newitemid = $DB->insert_record('qtype_randomsamatch_options', $data);
|
||||
$this->set_mapping('qtype_randomsamatch_options', $oldid, $newitemid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,8 +71,13 @@ class restore_qtype_shortanswer_plugin extends restore_qtype_plugin {
|
|||
// qtype_shortanswer_options too, if they are defined (the gui should ensure this).
|
||||
if ($questioncreated) {
|
||||
$data->questionid = $newquestionid;
|
||||
$newitemid = $DB->insert_record('qtype_shortanswer_options', $data);
|
||||
$this->set_mapping('qtype_shortanswer_options', $oldid, $newitemid);
|
||||
|
||||
// It is possible for old backup files to contain unique key violations.
|
||||
// We need to check to avoid that.
|
||||
if (!$DB->record_exists('qtype_shortanswer_options', array('questionid' => $data->questionid))) {
|
||||
$newitemid = $DB->insert_record('qtype_shortanswer_options', $data);
|
||||
$this->set_mapping('qtype_shortanswer_options', $oldid, $newitemid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue