From 546b88641635fc1f213e4d9ce90d275be8ef606a Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20Mudr=C3=A1k?= Date: Wed, 10 Apr 2013 13:20:02 +0200 Subject: [PATCH] MDL-39087 Delete all component files in uninstall_plugin() --- lib/adminlib.php | 4 ++++ lib/filestorage/file_storage.php | 15 +++++++++++++++ lib/filestorage/tests/file_storage_test.php | 11 +++++++++++ 3 files changed, 30 insertions(+) diff --git a/lib/adminlib.php b/lib/adminlib.php index 89fa8e8f9d4..cf5af72c457 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -321,6 +321,10 @@ function uninstall_plugin($type, $name) { // remove event handlers and dequeue pending events events_uninstall($component); + // Delete all remaining files in the filepool owned by the component. + $fs = get_file_storage(); + $fs->delete_component_files($component); + // Finally purge all caches. purge_all_caches(); diff --git a/lib/filestorage/file_storage.php b/lib/filestorage/file_storage.php index de8be240dfe..f22635fc5bd 100644 --- a/lib/filestorage/file_storage.php +++ b/lib/filestorage/file_storage.php @@ -743,6 +743,21 @@ class file_storage { $filerecords->close(); } + /** + * Delete all files associated with the given component. + * + * @param string $component the component owning the file + */ + public function delete_component_files($component) { + global $DB; + + $filerecords = $DB->get_recordset('files', array('component' => $component)); + foreach ($filerecords as $filerecord) { + $this->get_file_instance($filerecord)->delete(); + } + $filerecords->close(); + } + /** * Move all the files in a file area from one context to another. * diff --git a/lib/filestorage/tests/file_storage_test.php b/lib/filestorage/tests/file_storage_test.php index 38e0eb1f59f..b895e578bb5 100644 --- a/lib/filestorage/tests/file_storage_test.php +++ b/lib/filestorage/tests/file_storage_test.php @@ -688,6 +688,17 @@ class filestoragelib_testcase extends advanced_testcase { $this->assertEquals(0, count($areafiles)); } + public function test_delete_component_files() { + $user = $this->setup_three_private_files(); + $fs = get_file_storage(); + + $areafiles = $fs->get_area_files($user->ctxid, 'user', 'private'); + $this->assertEquals(4, count($areafiles)); + $fs->delete_component_files('user'); + $areafiles = $fs->get_area_files($user->ctxid, 'user', 'private'); + $this->assertEquals(0, count($areafiles)); + } + public function test_create_file_from_url() { $this->resetAfterTest(true); -- 2.36.1