From 4bb042c3525b93f961216bd97851ee54e932a951 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 2 Aug 2022 18:26:37 +0200 Subject: [PATCH] MDL-75358 reportbuilder: display nulls as empty cells in aggregation --- reportbuilder/classes/local/aggregation/avg.php | 3 +++ reportbuilder/classes/local/aggregation/groupconcat.php | 7 ++++++- reportbuilder/classes/local/aggregation/percent.php | 3 +++ reportbuilder/classes/local/aggregation/sum.php | 6 +++++- reportbuilder/tests/local/helpers/user_profile_fields_test.php | 2 +- 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/reportbuilder/classes/local/aggregation/avg.php b/reportbuilder/classes/local/aggregation/avg.php index 26d02751e66..c397640ecf6 100644 --- a/reportbuilder/classes/local/aggregation/avg.php +++ b/reportbuilder/classes/local/aggregation/avg.php @@ -76,6 +76,9 @@ class avg extends base { * @return mixed */ public static function format_value($value, array $values, array $callbacks, int $columntype) { + if (reset($values) === null) { + return null; + } if ($columntype === column::TYPE_BOOLEAN || empty($callbacks)) { return format_float((float) reset($values), 1); } diff --git a/reportbuilder/classes/local/aggregation/groupconcat.php b/reportbuilder/classes/local/aggregation/groupconcat.php index 4cd07b47aba..7c12591c8ef 100644 --- a/reportbuilder/classes/local/aggregation/groupconcat.php +++ b/reportbuilder/classes/local/aggregation/groupconcat.php @@ -111,6 +111,11 @@ class groupconcat extends base { * @return mixed */ public static function format_value($value, array $values, array $callbacks, int $columntype) { + $firstvalue = reset($values); + if ($firstvalue === null) { + return ''; + } + $formattedvalues = []; // Store original names of all values that would be present without aggregation. @@ -118,7 +123,7 @@ class groupconcat extends base { $valuenamescount = count($valuenames); // Loop over each extracted value from the concatenated string. - $values = explode(self::FIELD_VALUE_DELIMETER, (string) reset($values)); + $values = explode(self::FIELD_VALUE_DELIMETER, (string)$firstvalue); foreach ($values as $value) { // Ensure we have equal number of value names/data, account for truncation by DB. diff --git a/reportbuilder/classes/local/aggregation/percent.php b/reportbuilder/classes/local/aggregation/percent.php index de10bfa00d0..3d052fcfff4 100644 --- a/reportbuilder/classes/local/aggregation/percent.php +++ b/reportbuilder/classes/local/aggregation/percent.php @@ -73,6 +73,9 @@ class percent extends base { * @return string */ public static function format_value($value, array $values, array $callbacks, int $columntype): string { + if (reset($values) === null) { + return ''; + } return format::percent((float) reset($values)); } } diff --git a/reportbuilder/classes/local/aggregation/sum.php b/reportbuilder/classes/local/aggregation/sum.php index ea7d547f409..42b1a91c206 100644 --- a/reportbuilder/classes/local/aggregation/sum.php +++ b/reportbuilder/classes/local/aggregation/sum.php @@ -76,9 +76,13 @@ class sum extends base { * @return mixed */ public static function format_value($value, array $values, array $callbacks, int $columntype) { + $firstvalue = reset($values); + if ($firstvalue === null) { + return null; + } if ($columntype === column::TYPE_BOOLEAN || empty($callbacks)) { $decimalpoints = (int) ($columntype === column::TYPE_FLOAT); - return format_float((float) reset($values), $decimalpoints); + return format_float((float) $firstvalue, $decimalpoints); } return parent::format_value($value, $values, $callbacks, $columntype); diff --git a/reportbuilder/tests/local/helpers/user_profile_fields_test.php b/reportbuilder/tests/local/helpers/user_profile_fields_test.php index 4cbe2f2725e..5b7d1480ce4 100644 --- a/reportbuilder/tests/local/helpers/user_profile_fields_test.php +++ b/reportbuilder/tests/local/helpers/user_profile_fields_test.php @@ -206,7 +206,7 @@ class user_profile_fields_test extends core_reportbuilder_testcase { $this->assertEquals([ [ 'c0_firstname' => 'Admin', - 'c1_data' => 'No', + 'c1_data' => '', 'c2_data' => 'Not set', 'c3_data' => '', 'c4_data' => '', -- 2.11.4.GIT