Completion MDL-23995 Completion, availability data not deleted with modules/course
authorSam Marshall <s.marshall@open.ac.uk>
Wed, 1 Sep 2010 17:02:56 +0000 (17:02 +0000)
committerSam Marshall <s.marshall@open.ac.uk>
Wed, 1 Sep 2010 17:02:56 +0000 (17:02 +0000)
course/lib.php
lib/moodlelib.php

index 94a0242..ca65cf7 100644 (file)
@@ -2637,6 +2637,11 @@ function delete_course_module($id) {
             $grade_item->delete('moddelete');
         }
     }
+    // Delete completion and availability data; it is better to do this even if the
+    // features are not turned on, in case they were turned on previously (these will be
+    // 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));
 
     delete_context(CONTEXT_MODULE, $cm->id);
     return $DB->delete_records('course_modules', array('id'=>$cm->id));
index cd129a2..bef795b 100644 (file)
@@ -4023,6 +4023,16 @@ function remove_course_contents($courseid, $showfeedback=true) {
     remove_course_grades($courseid, $showfeedback);
     remove_grade_letters($context, $showfeedback);
 
+/// 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));
+
 /// Delete every instance of every module
 
     if ($allmods = $DB->get_records('modules') ) {