MDL-32988 Lib: Course delete does availability/completion in wrong order

When deleting modules that failed to delete using normal method, it deleted
the course-modules table first and then the availability/completion,
which depend on the entries in course-modules table. This commit switches
the order.
This commit is contained in:
sam marshall
2012-05-16 14:04:13 +08:00
committed by Aparup Banerjee
parent b3e26da9d9
commit e8cc54227e
+14 -9
View File
@@ -4446,7 +4446,20 @@ function remove_course_contents($courseid, $showfeedback = true, array $options
// Ooops, this module is not properly installed, force-delete it in the next block
}
}
// We have tried to delete everything the nice way - now let's force-delete any remaining module data
// Remove all data from availability and completion tables that is associated
// with course-modules belonging to this course. Note this is done even if the
// features are not enabled now, in case they were enabled previously.
$DB->delete_records_select('course_modules_completion',
'coursemoduleid IN (SELECT id from {course_modules} WHERE course=?)',
array($courseid));
$DB->delete_records_select('course_modules_availability',
'coursemoduleid IN (SELECT id from {course_modules} WHERE course=?)',
array($courseid));
// Remove course-module data.
$cms = $DB->get_records('course_modules', array('course'=>$course->id));
foreach ($cms as $cm) {
if ($module = $DB->get_record('modules', array('id'=>$cm->module))) {
@@ -4459,15 +4472,7 @@ function remove_course_contents($courseid, $showfeedback = true, array $options
context_helper::delete_instance(CONTEXT_MODULE, $cm->id);
$DB->delete_records('course_modules', array('id'=>$cm->id));
}
// Remove all data from availability and completion tables that is associated
// with course-modules belonging to this course. Note this is done even if the
// features are not enabled now, in case they were enabled previously
$DB->delete_records_select('course_modules_completion',
'coursemoduleid IN (SELECT id from {course_modules} WHERE course=?)',
array($courseid));
$DB->delete_records_select('course_modules_availability',
'coursemoduleid IN (SELECT id from {course_modules} WHERE course=?)',
array($courseid));
if ($showfeedback) {
echo $OUTPUT->notification($strdeleted.get_string('type_mod_plural', 'plugin'), 'notifysuccess');
}