MDL-37757 repositories: Deleting a repository deletes files.
authorAdrian Greeve <adrian@moodle.com>
Thu, 16 Nov 2017 03:02:55 +0000 (11:02 +0800)
committerAdrian Greeve <adrian@moodle.com>
Thu, 16 Nov 2017 06:46:40 +0000 (14:46 +0800)
If the user decides to remove a repository all of the linked
files are now deleted along with file references. This was causing
problems such as the course page displaying an error with no recourse
to fix the problem.

repository/lib.php

index 6f6759c..9597665 100644 (file)
@@ -2004,6 +2004,8 @@ abstract class repository implements cacheable_object {
         global $DB;
         if ($downloadcontents) {
             $this->convert_references_to_local();
+        } else {
+            $this->remove_files();
         }
         cache::make('core', 'repositories')->purge();
         try {
@@ -2668,6 +2670,17 @@ abstract class repository implements cacheable_object {
         }
     }
 
+    /**
+     * Find all external files linked to this repository and delete them.
+     */
+    public function remove_files() {
+        $fs = get_file_storage();
+        $files = $fs->get_external_files($this->id);
+        foreach ($files as $storedfile) {
+            $storedfile->delete();
+        }
+    }
+
     /**
      * Function repository::reset_caches() is deprecated, cache is handled by MUC now.
      * @deprecated since Moodle 2.6 MDL-42016 - please do not use this function any more.