MDL-72133 report_loglive: Display logs filtered by deleted course ids

This commit is contained in:
Benjamin Walker
2024-09-19 10:49:31 +10:00
parent eb0634d489
commit b3e2e81b0d
5 changed files with 79 additions and 16 deletions
+16 -3
View File
@@ -64,6 +64,9 @@ class report_loglive_renderable implements renderable {
/** @var int group id */
public $groupid;
/** @var int forces the use of a course filter in site context */
public $sitecoursefilter;
/** @var report_loglive_table_log table log which will be used for rendering logs */
public $tablelog;
@@ -80,11 +83,12 @@ class report_loglive_renderable implements renderable {
* @param int $page (optional) page number.
* @param int $perpage (optional) number of records to show per page.
* @param string $order (optional) sortorder of fetched records
* @param int $sitecoursefilter (optional) use a course filter in site context.
*/
public function __construct($logreader = "", $course = 0, $url = "", $date = 0, $page = 0, $perpage = 100,
$order = "timecreated DESC") {
$order = "timecreated DESC", $sitecoursefilter = 0) {
global $PAGE;
global $PAGE, $SITE;
// Use first reader as selected reader, if not passed.
if (empty($logreader)) {
@@ -108,7 +112,14 @@ class report_loglive_renderable implements renderable {
// Use site course id, if course is empty.
if (!empty($course) && is_int($course)) {
$course = get_course($course);
$courseid = $course;
try {
$course = get_course($courseid);
} catch (dml_missing_record_exception) {
// Missing courses may have be deleted, so display them in site context.
$course = 0;
$sitecoursefilter = $courseid;
}
}
$this->course = $course;
@@ -120,6 +131,7 @@ class report_loglive_renderable implements renderable {
$this->page = $page;
$this->perpage = $perpage;
$this->order = $order;
$this->sitecoursefilter = $sitecoursefilter;
$this->set_refresh_rate();
}
@@ -184,6 +196,7 @@ class report_loglive_renderable implements renderable {
$filter->logreader = $readers[$this->selectedlogreader];
$filter->date = $this->date;
$filter->orderby = $this->order;
$filter->sitecoursefilter = $this->sitecoursefilter;
return $filter;
}
+6
View File
@@ -308,6 +308,12 @@ class report_loglive_table_log extends table_sql {
$params['courseid'] = $this->filterparams->courseid;
}
// Add filters for missing/deleted courses in site context.
if (!empty($this->filterparams->sitecoursefilter)) {
$joins[] = "courseid = :courseid";
$params['courseid'] = $this->filterparams->sitecoursefilter;
}
// Getting all members of a group.
[
'joins' => $groupjoins,
+13 -8
View File
@@ -34,15 +34,20 @@ $id = optional_param('id', 0, PARAM_INT);
$page = optional_param('page', 0, PARAM_INT);
$logreader = optional_param('logreader', '', PARAM_COMPONENT); // Reader which will be used for displaying logs.
if (empty($id)) {
admin_externalpage_setup('reportloglive', '', null, '', array('pagelayout' => 'report'));
// Get course details.
if (!empty($id)) {
$course = $DB->get_record('course', ['id' => $id], '*');
if ($course) {
require_login($course);
$context = context_course::instance($course->id);
$coursename = format_string($course->fullname, true, ['context' => $context]);
}
}
if (empty($course)) {
admin_externalpage_setup('reportloglive', '', null, '', ['pagelayout' => 'report']);
$context = context_system::instance();
$coursename = format_string($SITE->fullname, true, array('context' => $context));
} else {
$course = get_course($id);
require_login($course);
$context = context_course::instance($course->id);
$coursename = format_string($course->fullname, true, array('context' => $context));
$coursename = format_string($SITE->fullname, true, ['context' => $context]);
}
require_capability('report/loglive:view', $context);
+9 -5
View File
@@ -33,14 +33,18 @@ $logreader = optional_param('logreader', '', PARAM_COMPONENT); // Reader which w
$PAGE->set_url('/report/loglive/loglive_ajax.php');
// Capability checks.
if (empty($id)) {
if (!empty($id)) {
$course = $DB->get_record('course', ['id' => $id], '*');
if ($course) {
require_login($course);
$context = context_course::instance($course->id);
}
}
if (empty($course)) {
require_login();
$context = context_system::instance();
$PAGE->set_context($context);
} else {
$course = get_course($id);
require_login($course);
$context = context_course::instance($course->id);
}
require_capability('report/loglive:view', $context);
+35
View File
@@ -318,4 +318,39 @@ final class table_log_test extends advanced_testcase {
sort($usernames);
$this->assertEquals($expectedusers, $usernames);
}
/**
* Test getting logs for deleted courses.
*
* @covers \report_loglive_renderable::get_table
* @return void
*/
public function test_get_deleted_course_logs(): void {
global $DB, $PAGE;
$this->preventResetByRollback(); // Ensure events can be recorded in log store.
// Configure log store and user.
$manager = get_log_manager();
$stores = $manager->get_readers();
$store = $stores['logstore_standard'];
$this->setUser(get_admin());
// Set and delete course.
$course = reset($this->courses);
$deletedcourseid = $course->id;
delete_course($course, false);
$this->assertFalse($DB->record_exists('course', ['id' => $deletedcourseid]));
// Test rendering.
$PAGE->set_url('/report/loglive/index.php?id=' . $deletedcourseid);
$renderable = new \report_loglive_renderable('', (int) $deletedcourseid);
$table = $renderable->get_table();
$store->flush();
$table->query_db(100);
// Confirm we have logs for the course deletion and that the filtering is correct.
$this->assertNotEmpty($table->totalrows);
$expectedrows = count($DB->get_records('logstore_standard_log', ['courseid' => $deletedcourseid]));
$this->assertEquals($expectedrows, $table->totalrows);
}
}