MDL-32988 Lib: Course delete does availability/completion in wrong order
authorsam marshall <s.marshall@open.ac.uk>
Tue, 15 May 2012 10:38:03 +0000 (11:38 +0100)
committersam marshall <s.marshall@open.ac.uk>
Tue, 15 May 2012 11:02:00 +0000 (12:02 +0100)
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.

lib/moodlelib.php

index d781292..aeb89f1 100644 (file)
@@ -4528,7 +4528,20 @@ function remove_course_contents($courseid, $showfeedback = true, array $options
             // Ooops, this module is not properly installed, force-delete it in the next block
         }
     }
             // 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
     // 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))) {
     $cms = $DB->get_records('course_modules', array('course'=>$course->id));
     foreach ($cms as $cm) {
         if ($module = $DB->get_record('modules', array('id'=>$cm->module))) {
@@ -4541,15 +4554,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));
     }
         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');
     }
     if ($showfeedback) {
         echo $OUTPUT->notification($strdeleted.get_string('type_mod_plural', 'plugin'), 'notifysuccess');
     }