mirror of
https://github.com/moodle/moodle.git
synced 2025-08-11 03:46:42 +02:00
MDL-81327 report_loglive: Apply the same fixes to loglive
* Additional fix: take into account selected group (filter)
This commit is contained in:
parent
a1ee9cdbdb
commit
59e63c2081
2 changed files with 35 additions and 24 deletions
|
@ -47,6 +47,9 @@ class report_loglive_table_log extends table_sql {
|
||||||
/** @var stdClass filters parameters */
|
/** @var stdClass filters parameters */
|
||||||
protected $filterparams;
|
protected $filterparams;
|
||||||
|
|
||||||
|
/** @var int[] A list of users to filter by */
|
||||||
|
private ?array $lateuseridfilter = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up the table_log parameters.
|
* Sets up the table_log parameters.
|
||||||
*
|
*
|
||||||
|
@ -298,33 +301,23 @@ class report_loglive_table_log extends table_sql {
|
||||||
* @param bool $useinitialsbar do you want to use the initials bar.
|
* @param bool $useinitialsbar do you want to use the initials bar.
|
||||||
*/
|
*/
|
||||||
public function query_db($pagesize, $useinitialsbar = true) {
|
public function query_db($pagesize, $useinitialsbar = true) {
|
||||||
global $USER;
|
$joins = [];
|
||||||
$joins = array();
|
$params = [];
|
||||||
$params = array();
|
|
||||||
|
|
||||||
// Set up filtering.
|
|
||||||
if (!empty($this->filterparams->courseid)) {
|
if (!empty($this->filterparams->courseid)) {
|
||||||
$joins[] = "courseid = :courseid";
|
$joins[] = "courseid = :courseid";
|
||||||
$params['courseid'] = $this->filterparams->courseid;
|
$params['courseid'] = $this->filterparams->courseid;
|
||||||
// If we are in a course, then let's check what logs we can see.
|
|
||||||
$course = get_course($this->filterparams->courseid);
|
|
||||||
$groupmode = groups_get_course_groupmode($course);
|
|
||||||
$context = context_course::instance($this->filterparams->courseid);
|
|
||||||
$userid = 0;
|
|
||||||
if ($groupmode == SEPARATEGROUPS && !has_capability('moodle/site:accessallgroups', $context)) {
|
|
||||||
$userid = $USER->id;
|
|
||||||
}
|
|
||||||
$cgroups = groups_get_all_groups($this->filterparams->courseid, $userid);
|
|
||||||
$cgroups = array_keys($cgroups);
|
|
||||||
if ($groupmode != SEPARATEGROUPS || has_capability('moodle/site:accessallgroups', $context) || empty($cgroups)) {
|
|
||||||
$cgroups[] = USERSWITHOUTGROUP;
|
|
||||||
}
|
|
||||||
// If that's the case, limit the users to be in the groups only, defined by the filter.
|
|
||||||
[$groupmembersql, $groupmemberparams] = groups_get_members_ids_sql($cgroups, $context);
|
|
||||||
$joins[] = "userid IN ($groupmembersql)";
|
|
||||||
$params = array_merge($params, $groupmemberparams);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Getting all members of a group.
|
||||||
|
[
|
||||||
|
'joins' => $groupjoins,
|
||||||
|
'params' => $groupparams,
|
||||||
|
'useridfilter' => $this->lateuseridfilter,
|
||||||
|
] = \core\report_helper::get_group_filter($this->filterparams);
|
||||||
|
$joins = array_merge($joins, $groupjoins);
|
||||||
|
$params = array_merge($params, $groupparams);
|
||||||
|
|
||||||
if (!empty($this->filterparams->date)) {
|
if (!empty($this->filterparams->date)) {
|
||||||
$joins[] = "timecreated > :date";
|
$joins[] = "timecreated > :date";
|
||||||
$params['date'] = $this->filterparams->date;
|
$params['date'] = $this->filterparams->date;
|
||||||
|
@ -339,8 +332,23 @@ class report_loglive_table_log extends table_sql {
|
||||||
|
|
||||||
$total = $this->filterparams->logreader->get_events_select_count($selector, $params);
|
$total = $this->filterparams->logreader->get_events_select_count($selector, $params);
|
||||||
$this->pagesize($pagesize, $total);
|
$this->pagesize($pagesize, $total);
|
||||||
$this->rawdata = $this->filterparams->logreader->get_events_select($selector, $params, $this->filterparams->orderby,
|
|
||||||
$this->get_page_start(), $this->get_page_size());
|
$this->rawdata =
|
||||||
|
array_filter(
|
||||||
|
$this->filterparams->logreader->get_events_select(
|
||||||
|
$selector,
|
||||||
|
$params,
|
||||||
|
$this->filterparams->orderby,
|
||||||
|
$this->get_page_start(),
|
||||||
|
$this->get_page_size(),
|
||||||
|
),
|
||||||
|
function($event) {
|
||||||
|
if ($this->lateuseridfilter === null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return isset($this->lateuseridfilter[$event->userid]);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
// Set initial bars.
|
// Set initial bars.
|
||||||
if ($useinitialsbar) {
|
if ($useinitialsbar) {
|
||||||
|
|
|
@ -303,7 +303,10 @@ class table_log_test extends advanced_testcase {
|
||||||
$this->setUser($currentuser->id);
|
$this->setUser($currentuser->id);
|
||||||
$store->flush();
|
$store->flush();
|
||||||
$table->query_db(100);
|
$table->query_db(100);
|
||||||
$filteredevents = array_filter($table->rawdata, fn($event) => get_class($event) === \core\event\course_viewed::class);
|
$filteredevents =
|
||||||
|
array_filter(
|
||||||
|
$table->rawdata, fn($event) => get_class($event) === \core\event\course_viewed::class
|
||||||
|
);
|
||||||
$usernames = array_map(
|
$usernames = array_map(
|
||||||
function($event) {
|
function($event) {
|
||||||
$user = core_user::get_user($event->userid, '*', MUST_EXIST);
|
$user = core_user::get_user($event->userid, '*', MUST_EXIST);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue