mirror of
https://github.com/moodle/moodle.git
synced 2025-01-29 19:50:14 +01:00
MDL-49746 course: sorting users by last access
This commit is contained in:
parent
57739a72cb
commit
afc6a26938
@ -237,14 +237,14 @@ class course_enrolment_manager {
|
||||
$extrafields = get_extra_user_fields($this->get_context());
|
||||
$extrafields[] = 'lastaccess';
|
||||
$ufields = user_picture::fields('u', $extrafields);
|
||||
$sql = "SELECT DISTINCT $ufields, ul.timeaccess AS lastseen
|
||||
$sql = "SELECT DISTINCT $ufields, COALESCE(ul.timeaccess, 0) AS lastcourseaccess
|
||||
FROM {user} u
|
||||
JOIN {user_enrolments} ue ON (ue.userid = u.id AND ue.enrolid $instancessql)
|
||||
JOIN {enrol} e ON (e.id = ue.enrolid)
|
||||
LEFT JOIN {user_lastaccess} ul ON (ul.courseid = e.courseid AND ul.userid = u.id)
|
||||
LEFT JOIN {groups_members} gm ON u.id = gm.userid
|
||||
WHERE $filtersql
|
||||
ORDER BY u.$sort $direction";
|
||||
ORDER BY $sort $direction";
|
||||
$this->users[$key] = $DB->get_records_sql($sql, $params, $page*$perpage, $perpage);
|
||||
}
|
||||
return $this->users[$key];
|
||||
@ -334,20 +334,22 @@ class course_enrolment_manager {
|
||||
list($ctxcondition, $params) = $DB->get_in_or_equal($this->context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'ctx');
|
||||
$params['courseid'] = $this->course->id;
|
||||
$params['cid'] = $this->course->id;
|
||||
$sql = "SELECT ra.id as raid, ra.contextid, ra.component, ctx.contextlevel, ra.roleid, u.*, ue.lastseen
|
||||
$extrafields = get_extra_user_fields($this->get_context());
|
||||
$ufields = user_picture::fields('u', $extrafields);
|
||||
$sql = "SELECT ra.id as raid, ra.contextid, ra.component, ctx.contextlevel, ra.roleid, $ufields,
|
||||
coalesce(u.lastaccess,0) AS lastaccess
|
||||
FROM {role_assignments} ra
|
||||
JOIN {user} u ON u.id = ra.userid
|
||||
JOIN {context} ctx ON ra.contextid = ctx.id
|
||||
LEFT JOIN (
|
||||
SELECT ue.id, ue.userid, ul.timeaccess AS lastseen
|
||||
SELECT ue.id, ue.userid
|
||||
FROM {user_enrolments} ue
|
||||
LEFT JOIN {enrol} e ON e.id=ue.enrolid
|
||||
LEFT JOIN {user_lastaccess} ul ON (ul.courseid = e.courseid AND ul.userid = ue.userid)
|
||||
JOIN {enrol} e ON e.id = ue.enrolid
|
||||
WHERE e.courseid = :courseid
|
||||
) ue ON ue.userid=u.id
|
||||
WHERE ctx.id $ctxcondition AND
|
||||
ue.id IS NULL
|
||||
ORDER BY u.$sort $direction, ctx.depth DESC";
|
||||
ORDER BY $sort $direction, ctx.depth DESC";
|
||||
$this->otherusers[$key] = $DB->get_records_sql($sql, $params, $page*$perpage, $perpage);
|
||||
}
|
||||
return $this->otherusers[$key];
|
||||
@ -1091,7 +1093,7 @@ class course_enrolment_manager {
|
||||
* @param array $extrafields The list of fields as returned from get_extra_user_fields used to determine which
|
||||
* additional fields may be displayed
|
||||
* @param int $now The time used for lastaccess calculation
|
||||
* @return array The fields to be displayed including userid, courseid, picture, firstname, lastseen and any
|
||||
* @return array The fields to be displayed including userid, courseid, picture, firstname, lastcourseaccess, lastaccess and any
|
||||
* additional fields from $extrafields
|
||||
*/
|
||||
private function prepare_user_for_display($user, $extrafields, $now) {
|
||||
@ -1100,7 +1102,7 @@ class course_enrolment_manager {
|
||||
'courseid' => $this->get_course()->id,
|
||||
'picture' => new user_picture($user),
|
||||
'firstname' => fullname($user, has_capability('moodle/site:viewfullnames', $this->get_context())),
|
||||
'lastseen' => get_string('never'),
|
||||
'lastaccess' => get_string('never'),
|
||||
'lastcourseaccess' => get_string('never'),
|
||||
);
|
||||
foreach ($extrafields as $field) {
|
||||
@ -1108,13 +1110,13 @@ class course_enrolment_manager {
|
||||
}
|
||||
|
||||
// Last time user has accessed the site.
|
||||
if ($user->lastaccess) {
|
||||
$details['lastseen'] = format_time($now - $user->lastaccess);
|
||||
if (!empty($user->lastaccess)) {
|
||||
$details['lastaccess'] = format_time($now - $user->lastaccess);
|
||||
}
|
||||
|
||||
// Last time user has accessed the course.
|
||||
if ($user->lastseen) {
|
||||
$details['lastcourseaccess'] = format_time($now - $user->lastseen);
|
||||
if (!empty($user->lastcourseaccess)) {
|
||||
$details['lastcourseaccess'] = format_time($now - $user->lastcourseaccess);
|
||||
}
|
||||
return $details;
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ foreach ($extrafields as $field) {
|
||||
|
||||
$fields = array(
|
||||
'userdetails' => $userdetails,
|
||||
'lastseen' => get_string('lastaccess'),
|
||||
'lastaccess' => get_string('lastaccess'),
|
||||
'role' => get_string('roles', 'role')
|
||||
);
|
||||
|
||||
@ -68,7 +68,7 @@ $fields = array(
|
||||
if (!has_capability('moodle/course:viewhiddenuserfields', $context)) {
|
||||
$hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields));
|
||||
if (isset($hiddenfields['lastaccess'])) {
|
||||
unset($fields['lastseen']);
|
||||
unset($fields['lastaccess']);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -421,7 +421,7 @@ class course_enrolment_table extends html_table implements renderable {
|
||||
* @var array
|
||||
*/
|
||||
protected static $sortablefields = array('firstname', 'lastname', 'firstnamephonetic', 'lastnamephonetic', 'middlename',
|
||||
'alternatename', 'idnumber', 'email', 'phone1', 'phone2', 'institution', 'department' );
|
||||
'alternatename', 'idnumber', 'email', 'phone1', 'phone2', 'institution', 'department', 'lastaccess', 'lastcourseaccess' );
|
||||
|
||||
/**
|
||||
* Constructs the table
|
||||
@ -513,9 +513,10 @@ class course_enrolment_table extends html_table implements renderable {
|
||||
if (!in_array($n, self::$sortablefields)) {
|
||||
$bits[] = $l;
|
||||
} else {
|
||||
$link = html_writer::link(new moodle_url($url, array(self::SORTVAR=>$n)), $fields[$name][$n]);
|
||||
$sorturl = new moodle_url($url, array(self::SORTVAR => $n, self::SORTDIRECTIONVAR => $this->get_field_sort_direction($n)));
|
||||
$link = html_writer::link($sorturl, $fields[$name][$n]);
|
||||
if ($this->sort == $n) {
|
||||
$link .= html_writer::link(new moodle_url($url, array(self::SORTVAR=>$n, self::SORTDIRECTIONVAR=>$this->get_field_sort_direction($n))), $this->get_direction_icon($output, $n));
|
||||
$link .= $this->get_direction_icon($output, $n);
|
||||
}
|
||||
$bits[] = html_writer::tag('span', $link, array('class'=>'subheading_'.$n));
|
||||
|
||||
@ -526,9 +527,10 @@ class course_enrolment_table extends html_table implements renderable {
|
||||
if (!in_array($name, self::$sortablefields)) {
|
||||
$newlabel = $label;
|
||||
} else {
|
||||
$newlabel = html_writer::link(new moodle_url($url, array(self::SORTVAR=>$name)), $fields[$name]);
|
||||
$sorturl = new moodle_url($url, array(self::SORTVAR => $name, self::SORTDIRECTIONVAR => $this->get_field_sort_direction($name)));
|
||||
$newlabel = html_writer::link($sorturl, $fields[$name]);
|
||||
if ($this->sort == $name) {
|
||||
$newlabel .= html_writer::link(new moodle_url($url, array(self::SORTVAR=>$name, self::SORTDIRECTIONVAR=>$this->get_field_sort_direction($name))), $this->get_direction_icon($output, $name));
|
||||
$newlabel .= $this->get_direction_icon($output, $name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -704,13 +706,6 @@ class course_enrolment_table extends html_table implements renderable {
|
||||
*/
|
||||
class course_enrolment_users_table extends course_enrolment_table {
|
||||
|
||||
/**
|
||||
* An array of sortable fields
|
||||
* @static
|
||||
* @var array
|
||||
*/
|
||||
protected static $sortablefields = array('firstname', 'lastname', 'firstnamephonetic', 'lastnamephonetic', 'middlename',
|
||||
'alternatename', 'email', 'lastaccess');
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user