From fc2cfd8695980e72232af2222273af6b74df7790 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 30 Mar 2023 20:40:24 +0100 Subject: [PATCH] MDL-77807 files: normalise file entity size/type column fields. The `filename` field was only used by each to determine whether the file was itself a directory, and it's presence meant that aggregation of each column wasn't working properly. --- .../reportbuilder/local/entities/file.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/files/classes/reportbuilder/local/entities/file.php b/files/classes/reportbuilder/local/entities/file.php index 53687f98550..1795ef5b4e3 100644 --- a/files/classes/reportbuilder/local/entities/file.php +++ b/files/classes/reportbuilder/local/entities/file.php @@ -109,11 +109,12 @@ class file extends base { )) ->add_joins($this->get_joins()) ->set_type(column::TYPE_INTEGER) - ->add_fields("{$filesalias}.filesize, {$filesalias}.filename") + ->add_field("{$filesalias}.filesize") + ->add_field("CASE WHEN {$filesalias}.filename = '.' THEN 1 ELSE 0 END", 'directory') ->set_is_sortable(true) ->add_callback(static function($filesize, stdClass $fileinfo): string { // Absent file size and/or directory should not return output. - if ($fileinfo->filesize === null || $fileinfo->filename === '.') { + if ($fileinfo->filesize === null || $fileinfo->directory) { return ''; } return display_size($fileinfo->filesize); @@ -138,20 +139,21 @@ class file extends base { )) ->add_joins($this->get_joins()) ->set_type(column::TYPE_TEXT) - ->add_fields("{$filesalias}.mimetype, {$filesalias}.filename") + ->add_field("{$filesalias}.mimetype") + ->add_field("CASE WHEN {$filesalias}.filename = '.' THEN 1 ELSE 0 END", 'directory') ->set_is_sortable(true) ->add_callback(static function($mimetype, stdClass $fileinfo): string { global $CFG; require_once("{$CFG->libdir}/filelib.php"); // Absent mime type and/or directory has pre-determined output. - if ($fileinfo->filename === '.') { - return get_string('directory'); - } else if ($fileinfo->mimetype === null) { + if ($fileinfo->mimetype === null && !$fileinfo->directory) { return ''; + } else if ($fileinfo->directory) { + return get_string('directory'); } - return get_mimetype_description($fileinfo, true); + return get_mimetype_description($fileinfo->mimetype); }); // Author.