From a8a076708eb44a16f27ad9afe95574e97acea3e2 Mon Sep 17 00:00:00 2001 From: Andrew Robert Nicols Date: Tue, 6 Mar 2012 14:06:04 +0000 Subject: [PATCH] MDL-31914 Ensure that completion criteria are deleted when removing a course module Conflicts: lib/db/upgrade.php version.php Conflicts: version.php --- course/lib.php | 1 + lib/db/upgrade.php | 19 +++++++++++++++++++ version.php | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/course/lib.php b/course/lib.php index 91c28e8b784..d424a247aac 100644 --- a/course/lib.php +++ b/course/lib.php @@ -2836,6 +2836,7 @@ function delete_course_module($id) { // very quick on an empty table) $DB->delete_records('course_modules_completion', array('coursemoduleid' => $cm->id)); $DB->delete_records('course_modules_availability', array('coursemoduleid'=> $cm->id)); + $DB->delete_records('course_completion_criteria', array('moduleinstance'=> $cm->id)); delete_context(CONTEXT_MODULE, $cm->id); return $DB->delete_records('course_modules', array('id'=>$cm->id)); diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 3211b0f4914..bf7d4873572 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -6762,6 +6762,25 @@ FROM upgrade_main_savepoint(true, 2011070104.12); } + if ($oldversion < 2011070105.03) { + // Delete orphaned criteria which were left when modules were removed + if ($DB->get_dbfamily() === 'mysql') { + $sql = "DELETE cc FROM {course_completion_criteria} cc + LEFT JOIN {course_modules} cm ON cm.id = cc.moduleinstance + WHERE cm.id IS NULL"; + } else { + $sql = "DELETE FROM {course_completion_criteria} + WHERE NOT EXISTS ( + SELECT 'x' FROM {course_modules} + WHERE {course_modules}.id = {course_completion_criteria}.moduleinstance)"; + } + $DB->execute($sql); + + // Main savepoint reached + upgrade_main_savepoint(true, 2011070105.03); + } + + return true; } diff --git a/version.php b/version.php index 52a6cfc1b3b..9fcca5d507d 100644 --- a/version.php +++ b/version.php @@ -30,7 +30,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2011070105.02; // 20110701 = branching date YYYYMMDD - do not modify! +$version = 2011070105.03; // 20110701 = branching date YYYYMMDD - do not modify! // RR = release increments - 00 in DEV branches // .XX = incremental changes