From f550239e78c4d30b43b14901fbbc5e1e1eec1325 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 30 Aug 2022 18:14:13 +0100 Subject: [PATCH] MDL-75177 reportbuilder: preload context data for column callback. Improve performance/reduce query count by requesting all necessary data as part of initial column SQL. See also dc60fe66. --- .../reportbuilder/local/entities/course_category.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/course/classes/reportbuilder/local/entities/course_category.php b/course/classes/reportbuilder/local/entities/course_category.php index 85a0bf28c94..6b2d6360aee 100644 --- a/course/classes/reportbuilder/local/entities/course_category.php +++ b/course/classes/reportbuilder/local/entities/course_category.php @@ -100,11 +100,19 @@ class course_category extends base { $this->get_entity_name() )) ->add_joins($this->get_joins()) + ->add_join($this->get_context_join()) ->set_type(column::TYPE_TEXT) ->add_fields("{$tablealias}.name, {$tablealias}.id") + ->add_fields(context_helper::get_preload_record_columns_sql($tablealiascontext)) ->add_callback(static function(?string $name, stdClass $category): string { - return empty($category->id) ? '' : - core_course_category::get($category->id, MUST_EXIST, true)->get_formatted_name(); + if (empty($category->id)) { + return ''; + } + + context_helper::preload_from_record($category); + $context = context_coursecat::instance($category->id); + + return format_string($category->name, true, ['context' => $context]); }) ->set_is_sortable(true);