MDL-31914 Ensure that completion criteria are deleted when removing a course module

This commit is contained in:
Andrew Robert Nicols 2012-03-06 14:06:04 +00:00 committed by Eloy Lafuente (stronk7)
parent 8589241024
commit 8a28dbd4e1
2 changed files with 22 additions and 1 deletions

View file

@ -2856,6 +2856,8 @@ 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,
'criteriatype' => COMPLETION_CRITERIA_TYPE_ACTIVITY));
delete_context(CONTEXT_MODULE, $cm->id);
return $DB->delete_records('course_modules', array('id'=>$cm->id));

View file

@ -7030,6 +7030,25 @@ FROM
upgrade_main_savepoint(true, 2011120501.12);
}
return true;
if ($oldversion < 2011120502.07) {
require_once($CFG->libdir . '/completion/completion_criteria.php');
// 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 AND cc.criteriatype = ".COMPLETION_CRITERIA_TYPE_ACTIVITY;
} else {
$sql = "DELETE FROM {course_completion_criteria}
WHERE NOT EXISTS (
SELECT 'x' FROM {course_modules}
WHERE {course_modules}.id = {course_completion_criteria}.moduleinstance)
AND cc.criteriatype = ".COMPLETION_CRITERIA_TYPE_ACTIVITY;
}
$DB->execute($sql);
// Main savepoint reached
upgrade_main_savepoint(true, 2011120502.07);
}
return true;
}