From 4dcca1b084a7f568ee7ae11f9e56b6dc951c6ed9 Mon Sep 17 00:00:00 2001 From: sam marshall Date: Mon, 19 Oct 2020 10:14:09 +0100 Subject: [PATCH] MDL-69687 Course: remove_course_contents orphaned completion data The remove_course_contents function did not delete data from course_module_completion table in most cases, resulting in large quantities of orphaned data. --- lib/db/upgrade.php | 11 +++++++++++ lib/moodlelib.php | 1 + version.php | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 412f94b1be8..1eb9c959b4e 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2782,5 +2782,16 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2021052500.24); } + if ($oldversion < 2021052500.26) { + // Delete orphaned course_modules_completion rows; these were not deleted properly + // by remove_course_contents function. + $DB->delete_records_subquery('course_modules_completion', 'id', 'id', + "SELECT cmc.id + FROM {course_modules_completion} cmc + LEFT JOIN {course_modules} cm ON cm.id = cmc.coursemoduleid + WHERE cm.id IS NULL"); + upgrade_main_savepoint(true, 2021052500.26); + } + return true; } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index fde434dc843..b571bb731a5 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -5306,6 +5306,7 @@ function remove_course_contents($courseid, $showfeedback = true, array $options if ($cm->id) { // Delete cm and its context - orphaned contexts are purged in cron in case of any race condition. context_helper::delete_instance(CONTEXT_MODULE, $cm->id); + $DB->delete_records('course_modules_completion', ['coursemoduleid' => $cm->id]); $DB->delete_records('course_modules', array('id' => $cm->id)); rebuild_course_cache($cm->course, true); } diff --git a/version.php b/version.php index d65f2ffd0e4..eab1c5f7209 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2021052500.25; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2021052500.26; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.0dev (Build: 20201016)'; // Human-friendly version name -- 2.43.0