From 5bc8335c6faa14e3fe04692b02391045d0f01ac7 Mon Sep 17 00:00:00 2001 From: Justin Filip Date: Fri, 2 Dec 2011 14:55:27 -0500 Subject: [PATCH 1/2] MDL-29598 backup Check whether a grade_letters record exists before trying to insert a new record --- backup/moodle2/restore_stepslib.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backup/moodle2/restore_stepslib.php b/backup/moodle2/restore_stepslib.php index 3677d7bee02..255808f28fa 100644 --- a/backup/moodle2/restore_stepslib.php +++ b/backup/moodle2/restore_stepslib.php @@ -270,7 +270,15 @@ class restore_gradebook_structure_step extends restore_structure_step { $data->contextid = context_course::instance($this->get_courseid())->id; - $newitemid = $DB->insert_record('grade_letters', $data); + // MDL-29598 - Don't insert a duplicate record if this grade letter already exists + $gltest = (array)$data; + unset($gltest['id']); + if (!$DB->record_exists('grade_letters', $gltest)) { + $newitemid = $DB->insert_record('grade_letters', $data); + } else { + $newitemid = $data->id; + } + $this->set_mapping('grade_letter', $oldid, $newitemid); } protected function process_grade_setting($data) { From 67d4424a6b85243f3cfa8c504e4641dc234c2bdf Mon Sep 17 00:00:00 2001 From: David Monllao Date: Fri, 17 Aug 2012 10:18:20 +0800 Subject: [PATCH 2/2] MDL-29598 backup Avoid possible future duplicate grade letters More info in restore_activity_grades_structure_step->process_grade_letter() comments --- backup/moodle2/restore_stepslib.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/backup/moodle2/restore_stepslib.php b/backup/moodle2/restore_stepslib.php index 255808f28fa..6b398521774 100644 --- a/backup/moodle2/restore_stepslib.php +++ b/backup/moodle2/restore_stepslib.php @@ -270,10 +270,9 @@ class restore_gradebook_structure_step extends restore_structure_step { $data->contextid = context_course::instance($this->get_courseid())->id; - // MDL-29598 - Don't insert a duplicate record if this grade letter already exists - $gltest = (array)$data; - unset($gltest['id']); - if (!$DB->record_exists('grade_letters', $gltest)) { + $gradeletter = (array)$data; + unset($gradeletter['id']); + if (!$DB->record_exists('grade_letters', $gradeletter)) { $newitemid = $DB->insert_record('grade_letters', $data); } else { $newitemid = $data->id; @@ -2407,17 +2406,21 @@ class restore_activity_grades_structure_step extends restore_structure_step { /** * process activity grade_letters. Note that, while these are possible, - * because grade_letters are contextid based, in proctice, only course + * because grade_letters are contextid based, in practice, only course * context letters can be defined. So we keep here this method knowing * it won't be executed ever. gradebook restore will restore course letters. */ protected function process_grade_letter($data) { global $DB; - $data = (object)$data; + $data['contextid'] = $this->task->get_contextid(); + $gradeletter = (object)$data; - $data->contextid = $this->task->get_contextid(); - $newitemid = $DB->insert_record('grade_letters', $data); + // Check if it exists before adding it + unset($data['id']); + if (!$DB->record_exists('grade_letters', $data)) { + $newitemid = $DB->insert_record('grade_letters', $gradeletter); + } // no need to save any grade_letter mapping } }