diff --git a/reportbuilder/classes/local/helpers/custom_fields.php b/reportbuilder/classes/local/helpers/custom_fields.php index 616d114f80a..0f39a1c59ca 100644 --- a/reportbuilder/classes/local/helpers/custom_fields.php +++ b/reportbuilder/classes/local/helpers/custom_fields.php @@ -179,9 +179,13 @@ class custom_fields { ->add_join($this->get_table_join($field)) ->add_field($datafieldsql, $datafield) ->add_fields($selectfields) + ->add_field($this->tablefieldalias, 'tablefieldalias') ->set_type($columntype) ->set_is_sortable($columntype !== column::TYPE_LONGTEXT) ->add_callback(static function($value, stdClass $row, field_controller $field): string { + if ($row->tablefieldalias === null) { + return ''; + } return (string) data_controller::create(0, $row, $field)->export_value(); }, $field) // Important. If the handler implements can_view() function, it will be called with parameter $instanceid=0. diff --git a/reportbuilder/tests/local/helpers/custom_fields_test.php b/reportbuilder/tests/local/helpers/custom_fields_test.php index ae38b8ddb59..477f3d02474 100644 --- a/reportbuilder/tests/local/helpers/custom_fields_test.php +++ b/reportbuilder/tests/local/helpers/custom_fields_test.php @@ -28,7 +28,7 @@ use core_reportbuilder\local\filters\select; use core_reportbuilder\local\filters\text; use core_reportbuilder\local\report\column; use core_reportbuilder\local\report\filter; -use core_course\reportbuilder\datasource\courses; +use core_course\reportbuilder\datasource\{categories, courses}; defined('MOODLE_INTERNAL') || die(); @@ -177,7 +177,7 @@ class custom_fields_test extends core_reportbuilder_testcase { $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder'); $report = $generator->create_report(['name' => 'Courses', 'source' => courses::class, 'default' => 0]); - // Add user profile field columns to the report. + // Add custom field columns to the report. $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_text']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_textarea']); @@ -197,6 +197,34 @@ class custom_fields_test extends core_reportbuilder_testcase { ], array_values($content[0])); } + /** + * Test that adding custom field columns to report returns expected default values for fields + */ + public function test_custom_report_content_column_defaults(): void { + $this->resetAfterTest(); + + $this->generate_customfields(); + + $category = $this->getDataGenerator()->create_category(['name' => 'Zebras']); + $course = $this->getDataGenerator()->create_course(['category' => $category->id]); + + /** @var core_reportbuilder_generator $generator */ + $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder'); + $report = $generator->create_report(['name' => 'Categories', 'source' => categories::class, 'default' => 0]); + + // Add custom field columns to the report. + $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:name', + 'sortenabled' => 1]); + $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']); + $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']); + + $content = $this->get_custom_report_content($report->get('id')); + $this->assertEquals([ + ['Category 1', '', ''], + [$category->name, $course->fullname, 'Cat'], + ], array_map('array_values', $content)); + } + /** * Data provider for {@see test_custom_report_filter} *