diff --git a/lib/filelib.php b/lib/filelib.php index 93edcb21a72..73f4f3b7feb 100644 --- a/lib/filelib.php +++ b/lib/filelib.php @@ -2068,9 +2068,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 d5c7a43467b..9685e9a3db3 100644 --- a/lib/tests/filelib_test.php +++ b/lib/tests/filelib_test.php @@ -1985,6 +1985,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( + $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', + ], + ]; + } } /**