diff --git a/report/log/classes/helper.php b/report/log/classes/helper.php new file mode 100644 index 00000000000..efa2e1051da --- /dev/null +++ b/report/log/classes/helper.php @@ -0,0 +1,60 @@ +. + +namespace report_log; + +/** + * Helper class for displaying logs. + * + * @package report_log + * @copyright 2024 Benjamin Walker + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class helper { + + /** + * Returns a string that attempts to infer event context display when context no longer exists. + * This can be used to show a minimum amount of info in log tables, but ideally this would + * be a last resort as log display should not change. + * + * @param \core\event\base|\stdClass $event + * @return string inferred context display, or an empty string. + */ + public static function get_context_fallback(\core\event\base|\stdClass $event): string { + if (empty($event) || empty($event->contextlevel) || empty($event->component)) { + return ''; + } + + $name = \context_helper::get_level_name($event->contextlevel); + $instanceid = $event->contextinstanceid ?? ''; + + // Use the plugin name for modules and blocks. + if ($event->contextlevel == CONTEXT_MODULE || $event->contextlevel == CONTEXT_BLOCK) { + // Some events list the component as core and store the modulename in other. + $component = !empty($event->other['modulename']) ? 'mod_' . $event->other['modulename'] : $event->component; + + // Use module name to keep names consistent. Making component human readable is a close approximation. + $modulename = preg_replace('/^(mod_|block_)/', '', $component); + $name = str_replace('_', ' ', $modulename); + } + + // Can't access context get_url methods, so don't bother showing a url. + return get_string('missingcontext', 'report_log', [ + 'name' => strtolower($name), + 'instanceid' => $instanceid, + ]); + } +} diff --git a/report/log/classes/table_log.php b/report/log/classes/table_log.php index 2ac9f436124..4b59c1b217b 100644 --- a/report/log/classes/table_log.php +++ b/report/log/classes/table_log.php @@ -248,7 +248,7 @@ class report_log_table_log extends table_sql { if (empty($this->download) && $url = $context->get_url()) { $contextname = html_writer::link($url, $contextname); } - } else { + } else if (!$contextname = \report_log\helper::get_context_fallback($event)) { $contextname = get_string('other'); } } diff --git a/report/log/lang/en/report_log.php b/report/log/lang/en/report_log.php index 18bb9ad9dcb..b1d3365fe17 100644 --- a/report/log/lang/en/report_log.php +++ b/report/log/lang/en/report_log.php @@ -37,6 +37,7 @@ $string['log:view'] = 'View course logs'; $string['log:viewtoday'] = 'View today\'s logs'; $string['page'] = 'Page {$a}'; $string['logsformat'] = 'Logs format'; +$string['missingcontext'] = 'Deleted {$a->name} (id \'{$a->instanceid}\')'; $string['missingcourse'] = 'Missing course (id \'{$a->instanceid}\')'; $string['nocapability'] = 'Can not access user log report'; $string['nologreaderenabled'] = 'No log reader enabled'; diff --git a/report/loglive/classes/table_log.php b/report/loglive/classes/table_log.php index 1337bbe7808..ae2cb2ebcbc 100644 --- a/report/loglive/classes/table_log.php +++ b/report/loglive/classes/table_log.php @@ -196,7 +196,7 @@ class report_loglive_table_log extends table_sql { if ($url = $context->get_url()) { $contextname = html_writer::link($url, $contextname); } - } else { + } else if (!$contextname = \report_log\helper::get_context_fallback($event)) { $contextname = get_string('other'); } }