This commit is contained in:
Huong Nguyen
2025-07-15 10:42:05 +07:00
13 changed files with 138 additions and 158 deletions
@@ -93,7 +93,7 @@ class role extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->add_fields("{$rolealias}.name, {$rolealias}.shortname, {$rolealias}.id, {$contextalias}.id AS contextid")
->add_fields("{$rolealias}.name, {$rolealias}.shortname, {$rolealias}.id")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
// The sorting is on name, unless empty then we use shortname.
->set_is_sortable(true, [
@@ -103,12 +103,12 @@ class role extends base {
END",
])
->add_callback(static function(?string $name, stdClass $role): string {
if ($name === null) {
if ($name === null || $role->ctxid === null) {
return '';
}
context_helper::preload_from_record($role);
$context = context::instance_by_id($role->contextid);
context_helper::preload_from_record(clone $role);
$context = context::instance_by_id($role->ctxid);
return role_get_name($role, $context, ROLENAME_BOTH);
});
@@ -18,9 +18,8 @@ declare(strict_types=1);
namespace core_badges\reportbuilder\local\entities;
use context_course;
use context_helper;
use context_system;
use core\{context, context_helper};
use core\context\system;
use html_writer;
use lang_string;
use moodle_url;
@@ -158,6 +157,8 @@ class badge extends base {
if (empty($badge->criteria)) {
return '<span class="no-criteria-set d-none"></span>';
}
/** @var \core_badges_renderer $renderer */
$renderer = $PAGE->get_renderer('core_badges');
return $renderer->print_badge_criteria($badge, 'short');
});
@@ -172,17 +173,17 @@ class badge extends base {
->add_join("LEFT JOIN {context} {$contextalias}
ON {$contextalias}.contextlevel = " . CONTEXT_COURSE . "
AND {$contextalias}.instanceid = {$badgealias}.courseid")
->add_fields("{$badgealias}.id, {$badgealias}.type, {$badgealias}.courseid, {$badgealias}.imagecaption")
->add_fields("{$badgealias}.id, {$badgealias}.type, {$badgealias}.imagecaption")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->add_callback(static function($value, stdClass $badge): string {
if ($badge->id === null) {
if ($value === null) {
return '';
}
if ($badge->type == BADGE_TYPE_SITE) {
$context = context_system::instance();
$context = system::instance();
} else {
context_helper::preload_from_record($badge);
$context = context_course::instance($badge->courseid);
context_helper::preload_from_record(clone $badge);
$context = context::instance_by_id($badge->ctxid);
}
$badgeimage = moodle_url::make_pluginfile_url($context->id, 'badges', 'badgeimage', $badge->id, '/', 'f2');
@@ -18,11 +18,10 @@ declare(strict_types=1);
namespace core_cohort\reportbuilder\local\entities;
use context;
use context_helper;
use lang_string;
use stdClass;
use theme_config;
use core\{context, context_helper};
use core_reportbuilder\local\entities\base;
use core_reportbuilder\local\filters\boolean_select;
use core_reportbuilder\local\filters\cohort as cohort_filter;
@@ -113,16 +112,17 @@ class cohort extends base {
))
->add_joins($this->get_joins())
->add_join($this->get_context_join())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.contextid, " . context_helper::get_preload_record_columns_sql($contextalias))
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->add_callback(static function($contextid, stdClass $cohort): string {
if ($contextid === null) {
if ($cohort->ctxid === null) {
return '';
}
context_helper::preload_from_record($cohort);
return context::instance_by_id($cohort->contextid)->get_context_name(false);
context_helper::preload_from_record(clone $cohort);
$context = context::instance_by_id($cohort->ctxid);
return $context->get_context_name(false);
});
// Name column.
@@ -132,7 +132,6 @@ class cohort extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.name")
->set_is_sortable(true);
@@ -143,7 +142,6 @@ class cohort extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.idnumber")
->set_is_sortable(true);
@@ -156,24 +154,24 @@ class cohort extends base {
->add_joins($this->get_joins())
->add_join($this->get_context_join())
->set_type(column::TYPE_LONGTEXT)
->add_fields("{$tablealias}.description, {$tablealias}.descriptionformat, {$tablealias}.id, {$tablealias}.contextid")
->add_fields("{$tablealias}.description, {$tablealias}.descriptionformat, {$tablealias}.id")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->add_callback(static function(?string $description, stdClass $cohort): string {
global $CFG;
require_once("{$CFG->libdir}/filelib.php");
if ($description === null) {
if ($description === null || $cohort->ctxid === null) {
return '';
}
context_helper::preload_from_record($cohort);
$context = context::instance_by_id($cohort->contextid);
context_helper::preload_from_record(clone $cohort);
$context = context::instance_by_id($cohort->ctxid);
$description = file_rewrite_pluginfile_urls($description, 'pluginfile.php', $context->id, 'cohort',
'description', $cohort->id);
return format_text($description, $cohort->descriptionformat, ['context' => $context->id]);
return format_text($description, $cohort->descriptionformat, ['context' => $context]);
});
// Visible column.
@@ -219,7 +217,6 @@ class cohort extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.component")
->set_is_sortable(true)
->add_callback(static function(?string $component): string {
@@ -239,7 +236,6 @@ class cohort extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.theme")
->set_is_sortable(true)
->add_callback(static function (?string $theme): string {
@@ -286,16 +282,16 @@ class cohort extends base {
// Load all contexts in which there are cohorts.
$ctxfields = context_helper::get_preload_record_columns_sql('ctx');
$contexts = $DB->get_records_sql("
SELECT DISTINCT {$ctxfields}, c.contextid
SELECT DISTINCT {$ctxfields}
FROM {context} ctx
JOIN {cohort} c ON c.contextid = ctx.id");
// Transform context record into it's name (used as the filter options).
return array_map(static function(stdClass $contextrecord): string {
context_helper::preload_from_record($contextrecord);
return array_map(static function(stdClass $context): string {
context_helper::preload_from_record(clone $context);
$context = context::instance_by_id($context->ctxid);
return context::instance_by_id($contextrecord->contextid)
->get_context_name(false);
return $context->get_context_name(false);
}, $contexts);
});
@@ -112,10 +112,10 @@ class cohorts extends system_report {
if ($this->get_context() instanceof context_system && $this->get_parameter('showall', false, PARAM_BOOL)) {
$this->add_column_from_entity('cohort:context')
->add_callback(static function(string $value, stdClass $cohort): string {
$context = context::instance_by_id($cohort->contextid);
$context = context::instance_by_id($cohort->ctxid);
if ($context instanceof context_coursecat) {
return html_writer::link(new moodle_url('/cohort/index.php',
['contextid' => $cohort->contextid]), $value);
['contextid' => $context->id]), $value);
}
return $value;
@@ -18,14 +18,13 @@ declare(strict_types=1);
namespace core_comment\reportbuilder\local\entities;
use context;
use context_helper;
use lang_string;
use stdClass;
use core\{context, context_helper};
use core\lang_string;
use core_reportbuilder\local\entities\base;
use core_reportbuilder\local\filters\{date, text};
use core_reportbuilder\local\helpers\format;
use core_reportbuilder\local\report\{column, filter};
use stdClass;
/**
* Comment entity
@@ -97,16 +96,16 @@ class comment extends base {
->add_joins($this->get_joins())
->set_type(column::TYPE_LONGTEXT)
->add_join($this->get_context_join())
->add_fields("{$commentalias}.content, {$commentalias}.format, {$commentalias}.contextid")
->add_fields("{$commentalias}.content, {$commentalias}.format")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->add_callback(static function($content, stdClass $comment): string {
if ($content === null) {
->add_callback(static function(?string $content, stdClass $comment): string {
if ($content === null || $comment->ctxid === null) {
return '';
}
context_helper::preload_from_record($comment);
$context = context::instance_by_id($comment->contextid);
context_helper::preload_from_record(clone $comment);
$context = context::instance_by_id($comment->ctxid);
return format_text($content, $comment->format, ['context' => $context]);
});
@@ -118,7 +117,6 @@ class comment extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$commentalias}.component")
->set_is_sortable(true);
@@ -129,7 +127,6 @@ class comment extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$commentalias}.commentarea")
->set_is_sortable(true);
@@ -110,14 +110,14 @@ class competency extends base {
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->add_callback(static function(?string $description, stdClass $competency): string {
if ($description === null) {
if ($description === null || $competency->ctxid === null) {
return '';
}
context_helper::preload_from_record(clone $competency);
$context = context::instance_by_id($competency->ctxid);
return format_text($description, $competency->descriptionformat, ['context' => $context->id]);
return format_text($description, $competency->descriptionformat, ['context' => $context]);
});
// ID number.
@@ -110,14 +110,14 @@ class framework extends base {
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->add_callback(static function(?string $description, stdClass $framework): string {
if ($description === null) {
if ($description === null || $framework->ctxid === null) {
return '';
}
context_helper::preload_from_record(clone $framework);
$context = context::instance_by_id($framework->ctxid);
return format_text($description, $framework->descriptionformat, ['context' => $context->id]);
return format_text($description, $framework->descriptionformat, ['context' => $context]);
});
// ID number.
@@ -18,11 +18,10 @@ declare(strict_types=1);
namespace core_course\reportbuilder\local\entities;
use context_coursecat;
use context_helper;
use core\{context, context_helper};
use core\url;
use html_writer;
use lang_string;
use moodle_url;
use stdClass;
use theme_config;
use core_course_category;
@@ -100,18 +99,17 @@ class course_category extends base {
))
->add_joins($this->get_joins())
->add_join($this->get_context_join())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.name, {$tablealias}.id")
->add_field("{$tablealias}.name")
->add_fields(context_helper::get_preload_record_columns_sql($tablealiascontext))
->add_callback(static function(?string $name, stdClass $category): string {
if (empty($category->id)) {
if ($name === null || $category->ctxid === null) {
return '';
}
context_helper::preload_from_record($category);
$context = context_coursecat::instance($category->id);
context_helper::preload_from_record(clone $category);
$context = context::instance_by_id($category->ctxid);
return format_string($category->name, true, ['context' => $context]);
return format_string($name, true, ['context' => $context]);
})
->set_is_sortable(true);
@@ -123,18 +121,20 @@ class course_category extends base {
))
->add_joins($this->get_joins())
->add_join($this->get_context_join())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.name, {$tablealias}.id")
->add_field("{$tablealias}.name")
->add_fields(context_helper::get_preload_record_columns_sql($tablealiascontext))
->add_callback(static function(?string $name, stdClass $category): string {
if (empty($category->id)) {
if ($name === null || $category->ctxid === null) {
return '';
}
context_helper::preload_from_record($category);
$context = context_coursecat::instance($category->id);
$url = new moodle_url('/course/management.php', ['categoryid' => $category->id]);
return html_writer::link($url,
format_string($category->name, true, ['context' => $context]));
context_helper::preload_from_record(clone $category);
$context = context::instance_by_id($category->ctxid);
return html_writer::link(
new url('/course/management.php', ['categoryid' => $context->instanceid]),
format_string($name, true, ['context' => $context]),
);
})
->set_is_sortable(true);
@@ -145,7 +145,6 @@ class course_category extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.name, {$tablealias}.id")
->add_callback(static function(?string $name, stdClass $category): string {
return empty($category->id) ? '' :
@@ -161,7 +160,6 @@ class course_category extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.idnumber")
->set_is_sortable(true);
@@ -174,24 +172,24 @@ class course_category extends base {
->add_joins($this->get_joins())
->add_join($this->get_context_join())
->set_type(column::TYPE_LONGTEXT)
->add_fields("{$tablealias}.description, {$tablealias}.descriptionformat, {$tablealias}.id")
->add_fields("{$tablealias}.description, {$tablealias}.descriptionformat")
->add_fields(context_helper::get_preload_record_columns_sql($tablealiascontext))
->set_is_sortable(true)
->add_callback(static function(?string $description, stdClass $category): string {
global $CFG;
require_once("{$CFG->libdir}/filelib.php");
if ($description === null) {
if ($description === null || $category->ctxid === null) {
return '';
}
context_helper::preload_from_record($category);
$context = context_coursecat::instance($category->id);
context_helper::preload_from_record(clone $category);
$context = context::instance_by_id($category->ctxid);
$description = file_rewrite_pluginfile_urls($description, 'pluginfile.php', $context->id, 'coursecat',
'description', null);
return format_text($description, $category->descriptionformat, ['context' => $context->id]);
return format_text($description, $category->descriptionformat, ['context' => $context]);
});
// Theme column.
@@ -201,7 +199,6 @@ class course_category extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.theme")
->set_is_sortable(true)
->add_callback(static function (?string $theme): string {
@@ -18,8 +18,7 @@ declare(strict_types=1);
namespace core_group\reportbuilder\local\entities;
use context_course;
use context_helper;
use core\{context, context_helper};
use html_writer;
use lang_string;
use moodle_url;
@@ -112,19 +111,18 @@ class group extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$groupsalias}.name, {$groupsalias}.courseid")
->add_field("{$groupsalias}.name")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->set_callback(static function($name, stdClass $group): string {
if ($name === null) {
->set_callback(static function(?string $name, stdClass $group): string {
if ($name === null || $group->ctxid === null) {
return '';
}
context_helper::preload_from_record($group);
$context = context_course::instance($group->courseid);
context_helper::preload_from_record(clone $group);
$context = context::instance_by_id($group->ctxid);
return format_string($group->name, true, ['context' => $context]);
return format_string($name, true, ['context' => $context]);
});
// ID number column.
@@ -134,7 +132,6 @@ class group extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$groupsalias}.idnumber")
->set_is_sortable(true);
@@ -146,20 +143,20 @@ class group extends base {
))
->add_joins($this->get_joins())
->set_type(column::TYPE_LONGTEXT)
->add_fields("{$groupsalias}.description, {$groupsalias}.descriptionformat, {$groupsalias}.id, {$groupsalias}.courseid")
->add_fields("{$groupsalias}.description, {$groupsalias}.descriptionformat, {$groupsalias}.id")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->set_callback(static function(?string $description, stdClass $group): string {
global $CFG;
if ($description === null) {
if ($description === null || $group->ctxid === null) {
return '';
}
require_once("{$CFG->libdir}/filelib.php");
context_helper::preload_from_record($group);
$context = context_course::instance($group->courseid);
context_helper::preload_from_record(clone $group);
$context = context::instance_by_id($group->ctxid);
$description = file_rewrite_pluginfile_urls($description, 'pluginfile.php', $context->id, 'group',
'description', $group->id);
@@ -174,7 +171,6 @@ class group extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$groupsalias}.enrolmentkey")
->set_is_sortable(true);
@@ -18,8 +18,7 @@ declare(strict_types=1);
namespace core_group\reportbuilder\local\entities;
use context_course;
use context_helper;
use core\{context, context_helper};
use lang_string;
use stdClass;
use core_reportbuilder\local\entities\base;
@@ -105,19 +104,18 @@ class grouping extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$groupingsalias}.name, {$groupingsalias}.courseid")
->add_field("{$groupingsalias}.name")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->set_callback(static function($name, stdClass $grouping): string {
if ($name === null) {
->set_callback(static function(?string $name, stdClass $grouping): string {
if ($name === null || $grouping->ctxid === null) {
return '';
}
context_helper::preload_from_record($grouping);
$context = context_course::instance($grouping->courseid);
context_helper::preload_from_record(clone $grouping);
$context = context::instance_by_id($grouping->ctxid);
return format_string($grouping->name, true, ['context' => $context]);
return format_string($name, true, ['context' => $context]);
});
// ID number column.
@@ -127,7 +125,6 @@ class grouping extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields("{$groupingsalias}.idnumber")
->set_is_sortable(true);
@@ -139,21 +136,20 @@ class grouping extends base {
))
->add_joins($this->get_joins())
->set_type(column::TYPE_LONGTEXT)
->add_field("{$groupingsalias}.description")
->add_fields("{$groupingsalias}.descriptionformat, {$groupingsalias}.id, {$groupingsalias}.courseid")
->add_fields("{$groupingsalias}.description, {$groupingsalias}.descriptionformat, {$groupingsalias}.id")
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
->set_is_sortable(true)
->set_callback(static function(?string $description, stdClass $grouping): string {
global $CFG;
if ($description === null) {
if ($description === null || $grouping->ctxid === null) {
return '';
}
require_once("{$CFG->libdir}/filelib.php");
context_helper::preload_from_record($grouping);
$context = context_course::instance($grouping->courseid);
context_helper::preload_from_record(clone $grouping);
$context = context::instance_by_id($grouping->ctxid);
$description = file_rewrite_pluginfile_urls($description, 'pluginfile.php', $context->id, 'grouping',
'description', $grouping->id);
@@ -19,11 +19,11 @@ declare(strict_types=1);
namespace core\reportbuilder\local\entities;
use core\context_helper;
use core\lang_string;
use core\output\html_writer;
use core_reportbuilder\local\entities\base;
use core_reportbuilder\local\filters\{select, text};
use core_reportbuilder\local\report\{column, filter};
use html_writer;
use lang_string;
use stdClass;
/**
@@ -94,17 +94,18 @@ class context extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
// Sorting may not order alphabetically, but will at least group contexts together.
->set_is_sortable(true)
->add_callback(static function($contextid, stdClass $context): string {
if ($contextid === null) {
if ($context->ctxid === null) {
return '';
}
context_helper::preload_from_record($context);
return context_helper::instance_by_id($contextid)->get_context_name();
context_helper::preload_from_record(clone $context);
$context = context_helper::instance_by_id($context->ctxid);
return $context->get_context_name();
});
// Link.
@@ -114,17 +115,16 @@ class context extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
// Sorting may not order alphabetically, but will at least group contexts together.
->set_is_sortable(true)
->add_callback(static function($contextid, stdClass $context): string {
if ($contextid === null) {
if ($context->ctxid === null) {
return '';
}
context_helper::preload_from_record($context);
$context = context_helper::instance_by_id($contextid);
context_helper::preload_from_record(clone $context);
$context = context_helper::instance_by_id($context->ctxid);
return html_writer::link($context->get_url(), $context->get_context_name());
});
@@ -153,7 +153,6 @@ class context extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$contextalias}.path")
->set_is_sortable(true);
@@ -164,7 +163,6 @@ class context extends base {
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
// The "path" column looks like "/1/2/3", for context ID 3. In order to select/group by the parent context, we
// concatenate a trailing slash (to prevent partial matches, e.g. "/1/2/31"), then replace "/3/" with empty string.
->add_field("
@@ -18,8 +18,7 @@ declare(strict_types=1);
namespace core_reportbuilder\local\entities;
use context_course;
use context_helper;
use core\{context, context_helper};
use core_reportbuilder\local\filters\boolean_select;
use core_reportbuilder\local\filters\course_selector;
use core_reportbuilder\local\filters\date;
@@ -215,33 +214,30 @@ class course extends base {
'courseidnumberewithlink' => 'idnumber',
];
foreach ($fields as $key => $field) {
$column = (new column(
$columns[] = (new column(
$key,
new lang_string($key, 'core_reportbuilder'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->add_join($this->get_context_join())
->set_type(column::TYPE_TEXT)
->add_fields("{$tablealias}.{$field} as $key, {$tablealias}.id")
->add_field("{$tablealias}.{$field}")
->add_fields(context_helper::get_preload_record_columns_sql($contexttablealias))
->set_is_sortable(true)
->add_callback(static function(?string $value, stdClass $row): string {
if ($value === null) {
->add_callback(static function(?string $value, stdClass $course): string {
if ($value === null || $course->ctxid === null) {
return '';
}
context_helper::preload_from_record($row);
context_helper::preload_from_record(clone $course);
$context = context::instance_by_id($course->ctxid);
return html_writer::link(course_get_url($row->id),
format_string($value, true, ['context' => context_course::instance($row->id)]));
return html_writer::link(
course_get_url($context->instanceid),
format_string($value, true, ['context' => $context],
));
});
// Join on the context table so that we can use it for formatting these columns later.
if ($key === 'coursefullnamewithlink') {
$column->add_join($this->get_context_join())
->add_fields(context_helper::get_preload_record_columns_sql($contexttablealias));
}
$columns[] = $column;
}
foreach ($coursefields as $coursefield => $coursefieldlang) {
@@ -261,10 +257,13 @@ class course extends base {
// Join on the context table so that we can use it for formatting these columns later.
if ($coursefield === 'summary' || $coursefield === 'shortname' || $coursefield === 'fullname') {
$column->add_join($this->get_context_join())
->add_field("{$tablealias}.id", 'courseid')
->add_fields(context_helper::get_preload_record_columns_sql($contexttablealias));
}
if ($coursefield === 'summary') {
$column->add_field("{$tablealias}.summaryformat");
}
$columns[] = $column;
}
@@ -428,22 +427,26 @@ class course extends base {
}
if (in_array($fieldname, ['fullname', 'shortname'])) {
if (!$row->courseid) {
if ($value === null || $row->ctxid === null) {
return '';
}
context_helper::preload_from_record($row);
$context = context_course::instance($row->courseid);
return format_string($value, true, ['context' => $context->id, 'escape' => false]);
context_helper::preload_from_record(clone $row);
$context = context::instance_by_id($row->ctxid);
return format_string($value, true, ['context' => $context, 'escape' => false]);
}
if (in_array($fieldname, ['summary'])) {
if (!$row->courseid) {
if ($value === null || $row->ctxid === null) {
return '';
}
context_helper::preload_from_record($row);
$context = context_course::instance($row->courseid);
$summary = file_rewrite_pluginfile_urls($row->summary, 'pluginfile.php', $context->id, 'course', 'summary', null);
return format_text($summary);
context_helper::preload_from_record(clone $row);
$context = context::instance_by_id($row->ctxid);
$summary = file_rewrite_pluginfile_urls($value, 'pluginfile.php', $context->id, 'course', 'summary', null);
return format_text($summary, $row->summaryformat, ['context' => $context]);
}
return s($value);
@@ -18,10 +18,8 @@ declare(strict_types=1);
namespace core_reportbuilder\local\entities;
use context_helper;
use context_system;
use context_user;
use core\context;
use core\{context, context_helper};
use core\context\system;
use core_component;
use core_date;
use core_user;
@@ -178,8 +176,6 @@ class user extends base {
* @return column[]
*/
protected function get_all_columns(): array {
global $DB;
$usertablealias = $this->get_table_alias('user');
$contexttablealias = $this->get_table_alias('context');
@@ -187,7 +183,7 @@ class user extends base {
$fullnamesort = explode(', ', $fullnameselect);
$userpictureselect = fields::for_userpic()->get_sql($usertablealias, false, '', '', false)->selects;
$viewfullnames = has_capability('moodle/site:viewfullnames', context_system::instance());
$viewfullnames = has_capability('moodle/site:viewfullnames', system::instance());
// Fullname column.
$columns[] = (new column(
@@ -305,7 +301,7 @@ class user extends base {
->add_join("LEFT JOIN {context} {$contexttablealias}
ON {$contexttablealias}.contextlevel = " . CONTEXT_USER . "
AND {$contexttablealias}.instanceid = {$usertablealias}.id")
->add_fields("{$usertablealias}.descriptionformat, {$usertablealias}.id")
->add_field("{$usertablealias}.descriptionformat")
->add_fields(context_helper::get_preload_record_columns_sql($contexttablealias));
}
@@ -341,17 +337,17 @@ class user extends base {
}
if ($fieldname === 'description') {
if (empty($row->id)) {
if ($value === null || $row->ctxid === null) {
return '';
}
require_once("{$CFG->libdir}/filelib.php");
context_helper::preload_from_record($row);
$context = context_user::instance($row->id);
context_helper::preload_from_record(clone $row);
$context = context::instance_by_id($row->ctxid);
$description = file_rewrite_pluginfile_urls($value, 'pluginfile.php', $context->id, 'user', 'profile', null);
return format_text($description, $row->descriptionformat, ['context' => $context->id]);
return format_text($description, $row->descriptionformat, ['context' => $context]);
}
return s($value);
@@ -369,7 +365,7 @@ class user extends base {
$namefields = fields::get_name_fields(true);
$viewfullnames = has_capability('moodle/site:viewfullnames', context_system::instance());
$viewfullnames = has_capability('moodle/site:viewfullnames', system::instance());
$dummyfullname = core_user::get_dummy_fullname(null, ['override' => $viewfullnames]);
// Extract any name fields from the fullname format in the order that they appear.
@@ -463,7 +459,7 @@ class user extends base {
$tablealias = $this->get_table_alias('user');
// Fullname filter.
$canviewfullnames = has_capability('moodle/site:viewfullnames', context_system::instance());
$canviewfullnames = has_capability('moodle/site:viewfullnames', system::instance());
[$fullnamesql, $fullnameparams] = fields::get_sql_fullname($tablealias, $canviewfullnames);
$filters[] = (new filter(
text::class,