Merge branch 'MDL-54771-master' of git://github.com/cameron1729/moodle
authorDavid Monllao <davidm@moodle.com>
Tue, 12 Jul 2016 12:53:32 +0000 (14:53 +0200)
committerDavid Monllao <davidm@moodle.com>
Tue, 12 Jul 2016 12:53:32 +0000 (14:53 +0200)
admin/tool/recyclebin/lib.php
admin/tool/recyclebin/tests/category_bin_test.php
backup/util/ui/restore_ui.class.php

index 39d451b..ee2eb74 100644 (file)
@@ -158,6 +158,12 @@ function tool_recyclebin_pre_course_module_delete($cm) {
  * @param \stdClass $course The course record.
  */
 function tool_recyclebin_pre_course_delete($course) {
+    // It is possible that the course deletion which triggered this hook
+    // was from an in progress course restore. In that case we do not want
+    // it in the recycle bin.
+    if (isset($course->deletesource) && $course->deletesource == 'restore') {
+        return;
+    }
     // Delete all the items in the course recycle bin, regardless if it enabled or not.
     // It may have been enabled, then disabled later on, so may still have content.
     $coursebin = new \tool_recyclebin\course_bin($course->id);
index 5e3f85d..22c7f21 100644 (file)
@@ -38,6 +38,11 @@ class tool_recyclebin_category_bin_tests extends advanced_testcase {
      */
     protected $course;
 
+    /**
+     * @var stdClass $coursebeingrestored
+     */
+    protected $coursebeingrestored;
+
     /**
      * Setup for each test.
      */
@@ -57,10 +62,16 @@ class tool_recyclebin_category_bin_tests extends advanced_testcase {
     public function test_pre_course_delete_hook() {
         global $DB;
 
+        // This simulates a temporary course being cleaned up by a course restore.
+        $this->coursebeingrestored = $this->getDataGenerator()->create_course();
+        $this->coursebeingrestored->deletesource = 'restore';
+
         // Should have nothing in the recycle bin.
         $this->assertEquals(0, $DB->count_records('tool_recyclebin_category'));
 
         delete_course($this->course, false);
+        // This should not be added to the recycle bin.
+        delete_course($this->coursebeingrestored, false);
 
         // Check the course is now in the recycle bin.
         $this->assertEquals(1, $DB->count_records('tool_recyclebin_category'));
index d0e2237..7c0de1b 100644 (file)
@@ -231,9 +231,11 @@ class restore_ui extends base_ui {
      * Delete course which is created by restore process
      */
     public function cleanup() {
+        global $DB;
         $courseid = $this->controller->get_courseid();
-        if ($this->is_temporary_course_created($courseid)) {
-            delete_course($courseid, false);
+        if ($this->is_temporary_course_created($courseid) && $course = $DB->get_record('course', array('id' => $courseid))) {
+            $course->deletesource = 'restore';
+            delete_course($course, false);
         }
     }