Permalink
Browse files

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.
  • Loading branch information...
1 parent b3e26da commit e8cc54227e0d697f69e06f53e008fe30a07358c7 @sammarshallou sammarshallou committed with nebgor May 15, 2012
Showing with 14 additions and 9 deletions.
  1. +14 −9 lib/moodlelib.php
View
23 lib/moodlelib.php
@@ -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');
}

0 comments on commit e8cc542

Please sign in to comment.