if (user_access('access content')) { // Count users active within the defined period. $interval = time() - variable_get('user_block_seconds_online', 900); // Perform database queries to gather online user lists. We use s.timestamp // rather than u.access because it is much faster. $anonymous_count = sess_count($interval); $authenticated_users = db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval); $authenticated_count = 0; $max_users = variable_get('user_block_max_list_count', 10); $items = array(); while ($account = db_fetch_object($authenticated_users)) { if ($max_users > 0) { $items[] = $account; $max_users--; } $authenticated_count++; } // Format the output with proper grammar. if ($anonymous_count == 1 && $authenticated_count == 1) { $output = t('There is currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', '@count users'), '%visitors' => format_plural($anonymous_count, '1 guest', '@count guests'))); } else { $output = t('There are currently %members and %visitors online.', array('%members' => format_plural($authenticated_count, '1 user', '@count users'), '%visitors' => format_plural($anonymous_count, '1 guest', '@count guests'))); } // Display a list of currently online users. $max_users = variable_get('user_block_max_list_count', 10); if ($authenticated_count && $max_users) { $output .= theme('user_list', $items, t('Online users')); } $block['subject'] = t('Who\'s online'); $block['content'] = $output; } return $block;