diff --git a/lib/filelib.php b/lib/filelib.php index c112f9ae343..2aa0560cd73 100644 --- a/lib/filelib.php +++ b/lib/filelib.php @@ -2067,9 +2067,12 @@ function get_mimetype_description($obj, $capitalise=false) { */ function file_get_typegroup($element, $groups) { static $cached = array(); + + // Turn groups into a list. if (!is_array($groups)) { - $groups = array($groups); + $groups = preg_split('/[\s,;:"\']+/', $groups, -1, PREG_SPLIT_NO_EMPTY); } + if (!array_key_exists($element, $cached)) { $cached[$element] = array(); } diff --git a/lib/tests/filelib_test.php b/lib/tests/filelib_test.php index 32dc34535c9..d2fb2eaf1d6 100644 --- a/lib/tests/filelib_test.php +++ b/lib/tests/filelib_test.php @@ -2010,6 +2010,42 @@ EOF; ['noclean' => true, 'context' => $syscontext], $syscontext, 'core', 'some', 1); $this->assertSame($text, $result->some); } + + /** + * Tests for file_get_typegroup to check that both arrays, and string values are accepted. + * + * @dataProvider file_get_typegroup_provider + * @param string|array $group + * @param string $expected + */ + public function test_file_get_typegroup( + string|array $group, + string $expected, + ): void { + $result = file_get_typegroup('type', $group); + $this->assertContains($expected, $result); + } + + public static function file_get_typegroup_provider(): array { + return [ + 'Array of values' => [ + ['.html', '.htm'], + 'text/html', + ], + 'String of comma-separated values' => [ + '.html, .htm', + 'text/html', + ], + 'String of colon-separated values' => [ + '.html : .htm', + 'text/html', + ], + 'String of semi-colon-separated values' => [ + '.html ; .htm', + 'text/html', + ], + ]; + } } /**