MDL-49746 course: sorting users by last access

This commit is contained in:
Marina Glancy 2015-08-11 16:15:58 +08:00
parent 57739a72cb
commit afc6a26938
3 changed files with 24 additions and 27 deletions

View File

@ -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;
}

View File

@ -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']);
}
}

View File

@ -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');
}
/**