From f635e0a44efea696ed7c30f822875fa990c32ce9 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Fri, 22 Dec 2023 17:25:59 +0000 Subject: [PATCH] MDL-73010 repository_filesystem: fix directory read comparison. Co-authored-by: Andrew Nicols --- repository/filesystem/lib.php | 3 +- .../tests/repository_filesystem_test.php | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 repository/filesystem/tests/repository_filesystem_test.php diff --git a/repository/filesystem/lib.php b/repository/filesystem/lib.php index 53770530b9e..137345ccc2c 100644 --- a/repository/filesystem/lib.php +++ b/repository/filesystem/lib.php @@ -99,7 +99,7 @@ class repository_filesystem extends repository { $fileslist = array(); $dirslist = array(); if ($dh = opendir($abspath)) { - while (($file = readdir($dh)) != false) { + while (false !== ($file = readdir($dh))) { if ($file != '.' and $file != '..') { if (is_file($abspath . $file)) { $fileslist[] = $file; @@ -108,6 +108,7 @@ class repository_filesystem extends repository { } } } + closedir($dh); } core_collator::asort($fileslist, core_collator::SORT_NATURAL); core_collator::asort($dirslist, core_collator::SORT_NATURAL); diff --git a/repository/filesystem/tests/repository_filesystem_test.php b/repository/filesystem/tests/repository_filesystem_test.php new file mode 100644 index 00000000000..f9a200364e2 --- /dev/null +++ b/repository/filesystem/tests/repository_filesystem_test.php @@ -0,0 +1,50 @@ +. + +/** + * Tests for the repository_filesystem plugin. + * + * @package repository_filesystem + * @copyright 2024 Andrew Lyons + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \repository_filesystem + */ +class repository_filesystem_test extends \advanced_testcase { + public function test_get_listing(): void { + global $CFG; + + $this->resetAfterTest(true); + + $user = get_admin(); + $this->setUser($user); + + $this->getDataGenerator()->create_repository_type('filesystem'); + + mkdir($CFG->dataroot . '/repository/test/0', recursive: true); + file_put_contents($CFG->dataroot . '/repository/test/0/test.txt', 'test'); + + $record = $this->getDataGenerator()->create_repository('filesystem', [ + 'fs_path' => 'test', + ]); + + /** @var repository_filesystem $repository */ + $repository = repository::get_repository_by_id($record->id, \core\context\user::instance($user->id)); + + $listing = $repository->get_listing(); + $this->assertCount(1, $listing['list']); + $this->assertEquals(['0'], array_column($listing['list'], 'title')); + } +}