I put this bit of code as a block:
<?php
if (user_access('access content')) {
// Count users with activity in the past defined period.
$time_period = variable_get('user_block_seconds_online', 2700);
// Perform database queries to gather online user lists.
$guests = db_fetch_object(db_query('SELECT COUNT(sid) AS count FROM {sessions} WHERE timestamp >= %d AND uid = 0', time() - $time_period));
$users = db_query('SELECT DISTINCT(uid), MAX(timestamp) AS max_timestamp FROM {sessions} WHERE timestamp >= %d AND uid != 0 GROUP BY uid ORDER BY max_timestamp DESC', time() - $time_period);
$total_users = db_num_rows($users);
// Format the output with proper grammar.
if ($total_users == 1 && $guests->count == 1) {
$output = t('There is currently %members and %visitors online.', array (
'%members' => format_plural($total_users,
'1 user',
'%count users'
), '%visitors' => format_plural($guests->count, '1 guest', '%count guests')));
}
else {
$output = t('There are currently %members and %visitors online.', array (
'%members' => format_plural($total_users, '1 user', '%count users' ),
'%visitors' => format_plural($guests->count, '1 guest', '%count guests'))
);
}
// Display a list of currently online users.
$max_users = variable_get('user_block_max_list_count', 10);
if ($max_users) {
$items = array ();