diff --git a/blocks/online_users/block_online_users.php b/blocks/online_users/block_online_users.php index 135d5874fec..caa25307e7b 100644 --- a/blocks/online_users/block_online_users.php +++ b/blocks/online_users/block_online_users.php @@ -8,7 +8,7 @@ class block_online_users extends block_base { function init() { $this->title = get_string('blockname','block_online_users'); - $this->version = 2007101509; + $this->version = 2007101510; } function has_config() {return true;} @@ -23,7 +23,7 @@ class block_online_users extends block_base { $this->content = new stdClass; $this->content->text = ''; $this->content->footer = ''; - + if (empty($this->instance)) { return $this->content; } @@ -37,8 +37,14 @@ class block_online_users extends block_base { // Get context so we can check capabilities. $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); + if (empty($this->instance->pinned)) { + $blockcontext = get_context_instance(CONTEXT_BLOCK, $this->instance->id); + } else { + $blockcontext = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context + } + //Calculate if we are in separate groups - $isseparategroups = ($COURSE->groupmode == SEPARATEGROUPS + $isseparategroups = ($COURSE->groupmode == SEPARATEGROUPS && $COURSE->groupmodeforce && !has_capability('moodle/site:accessallgroups', $context)); @@ -46,7 +52,9 @@ class block_online_users extends block_base { $currentgroup = $isseparategroups ? groups_get_course_group($COURSE) : NULL; $groupmembers = ""; - $groupselect = ""; + $groupselect = ""; + $rafrom = ""; + $rawhere = ""; $params = array(); //Add this to the SQL to show only group users @@ -63,52 +71,68 @@ class block_online_users extends block_base { $groupselect GROUP BY u.id, u.username, u.firstname, u.lastname, u.picture ORDER BY lastaccess DESC "; - + + $csql = "SELECT COUNT(u.id), u.id + FROM {user} u $groupmembers + WHERE u.lastaccess > $timefrom + $groupselect + GROUP BY u.id"; + } else { // Course-level + if (!has_capability('moodle/role:viewhiddenassigns', $context)) { + $pcontext = get_related_contexts_string($context); + $rafrom = ", {role_assignments} ra"; + $rawhere = " AND ra.userid = u.id AND ra.contextid $pcontext AND ra.hidden = 0"; + } + $sql = "SELECT u.id, u.username, u.firstname, u.lastname, u.picture, MAX(ul.timeaccess) AS lastaccess - FROM {user_lastaccess} ul, {user} u $groupmembers + FROM {user_lastaccess} ul, {user} u $groupmembers $rafrom WHERE ul.timeaccess > $timefrom AND u.id = ul.userid AND ul.courseid = :courseid - $groupselect + $groupselect $rawhere GROUP BY u.id, u.username, u.firstname, u.lastname, u.picture ORDER BY lastaccess DESC"; + + $csql = "SELECT u.id + FROM {user_lastaccess} ul, {user} u $groupmembers $rafrom + WHERE ul.timeaccess > $timefrom + AND u.id = ul.userid + AND ul.courseid = :courseid + $groupselect $rawhere + GROUP BY u.id"; + $params['courseid'] = $COURSE->id; } - - $users = array(); - $pcontext = get_related_contexts_string($context); - - if ($pusers = $DB->get_records_sql($sql, $params, 0, 50)) { // We'll just take the most recent 50 maximum - $hidden = false; - if (!has_capability('moodle/role:viewhiddenassigns', $context)) { - // if current user can't view hidden role assignment in this context and - // user has a hidden role assigned at this context or any parent contexts, - // ignore this user - $userids = array_keys($pusers); - $userids = implode(',', $userids); - $sql = "SELECT userid - FROM {role_assignments} - WHERE userid IN ($userids) AND contextid $pcontext AND hidden = 1 - GROUP BY userid"; - $hidden = $DB->get_records_sql($sql); - } - - foreach ($pusers as $puser) { - if ($hidden and isset($hidden[$puser->id])) { - continue; - } - - $puser->fullname = fullname($puser); - $users[$puser->id] = $puser; - } - } - //Calculate minutes $minutes = floor($timetoshowusers/60); - $this->content->text = "