From fc73d9e7b4ae7b9cd981b56cb86ca9bbd256b82d Mon Sep 17 00:00:00 2001 From: Henning Bostelmann Date: Tue, 13 Sep 2011 01:11:19 +0100 Subject: [PATCH] MDL-29350 Prevent duplication of groupings when copying activities This patch also includes a database upgrade to correct data produced as a result of this bug. --- backup/moodle2/restore_stepslib.php | 9 ++++++++- lib/db/upgrade.php | 15 +++++++++++++++ version.php | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/backup/moodle2/restore_stepslib.php b/backup/moodle2/restore_stepslib.php index 500343dc28b..154d884ac2c 100644 --- a/backup/moodle2/restore_stepslib.php +++ b/backup/moodle2/restore_stepslib.php @@ -792,7 +792,14 @@ class restore_groups_structure_step extends restore_structure_step { $data->groupingid = $this->get_new_parentid('grouping'); // Use new parentid $data->groupid = $this->get_mappingid('group', $data->groupid); // Get from mappings - $DB->insert_record('groupings_groups', $data); // No need to set this mapping (no child info nor files) + + $params = array(); + $params['groupingid'] = $data->groupingid; + $params['groupid'] = $data->groupid; + + if (!$DB->record_exists('groupings_groups', $params)) { + $DB->insert_record('groupings_groups', $data); // No need to set this mapping (no child info nor files) + } } protected function after_execute() { diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 0335494665b..6a332a2bd22 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -6160,6 +6160,21 @@ FROM upgrade_main_savepoint(true, 2011033004.09); } + if ($oldversion < 2011033005.07) { + // Remove duplicate entries from groupings_groups table + $sql = 'SELECT MIN(id) AS firstid, groupingid, groupid FROM {groupings_groups} '. + 'GROUP BY groupingid, groupid HAVING COUNT(id)>1'; + $badrecs = $DB->get_records_sql($sql); + foreach ($badrecs as $badrec) { + $where = 'groupingid = ? and groupid = ? and id > ?'; + $params = array($badrec->groupingid, $badrec->groupid, $badrec->firstid); + $DB->delete_records_select('groupings_groups', $where, $params); + } + + // Main savepoint reached + upgrade_main_savepoint(true, 2011033005.07); + } + return true; } diff --git a/version.php b/version.php index 897a0ca95b3..12e02f2108c 100644 --- a/version.php +++ b/version.php @@ -30,7 +30,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2011033005.06; // 20110330 = branching date YYYYMMDD - do not modify! +$version = 2011033005.07; // 20110330 = branching date YYYYMMDD - do not modify! // RR = release version - do not change in weeklies // .XX = incremental changes