From afc6a26938bf528b96f4701db386bb8e191f912e Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 11 Aug 2015 16:15:58 +0800 Subject: [PATCH] MDL-49746 course: sorting users by last access --- enrol/locallib.php | 28 +++++++++++++++------------- enrol/otherusers.php | 4 ++-- enrol/renderer.php | 19 +++++++------------ 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/enrol/locallib.php b/enrol/locallib.php index 2115b15de84..8ea4d24c815 100644 --- a/enrol/locallib.php +++ b/enrol/locallib.php @@ -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; } diff --git a/enrol/otherusers.php b/enrol/otherusers.php index 50c2bcb2e2e..188c9d590f0 100644 --- a/enrol/otherusers.php +++ b/enrol/otherusers.php @@ -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']); } } diff --git a/enrol/renderer.php b/enrol/renderer.php index 72b0cb20d25..c0c3ac85718 100644 --- a/enrol/renderer.php +++ b/enrol/renderer.php @@ -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'); } /**