Drupal 4.7
$number = db_result(db_query('SELECT COUNT(uid) AS number FROM {users} WHERE status=1'));
if (user_access('access content')) {
// Count users with activity in the past defined period.
$time_period = variable_get('user_block_seconds_online', 900);
// 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 uid, name, access FROM {users} WHERE access >= %d AND uid != 0 ORDER BY access DESC', time() - $time_period);
$total_users = db_num_rows($users);
// Format the output with proper grammar.
echo "Out of $number registered users ";
if ($total_users == 1 && $guests->count == 1) {
$output = t('%members and %visitors online.', array('%members' => format_plural($total_users, 'there is currently 1 user', 'there are currently %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 ($total_users && $max_users) {
$items = array();
while ($max_users-- && $account = db_fetch_object($users)) {
$items[] = $account;
}
$output .= theme('user_list', $items, t('Online users'));
}
}
return $output;
?>
>Variation: Most Users Ever Online
Right before
}
return $output;
?>
add:
$total_users_online = $total_users + $guests->count;
if (variable_get('most_users_online_ever', '') < $total_users_online) {
variable_set('most_users_online_ever', $total_users_online);
variable_set('most_users_online_ever_time', time());
}
$output .= "Most users ever online was " . variable_get('most_users_online_ever', '');
$output .= " on " . format_date(variable_get('most_users_online_ever_time', ''), 'medium', '');
?>
It will print something like:
Most users ever online was 66 on 01/24/2008 - 02:00
Tested in Drupal 5.6.
You can change "<" to "<=" if you'd like to show the most recent date.
Variation - showing IP and domain of guest
This doesn't call on the theming functions, so it includes some html formatting that might need to be change.
$number = db_result(db_query('SELECT COUNT(uid) AS number FROM {users} WHERE status=1'));
if (user_access('access content')) {
// Count users with activity in the past defined period.
$time_period = variable_get('user_block_seconds_online', 900);
// 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));
$guests_hostname = db_query('SELECT hostname FROM {sessions} WHERE timestamp >= %d AND uid = 0', time() - $time_period);
$total_guests = db_num_rows($guests_hostname);
$users = db_query('SELECT uid, name, access FROM {users} WHERE access >= %d AND uid != 0 ORDER BY access DESC', time() - $time_period);
$total_users = db_num_rows($users);
// Display a list of currently online users.
$max_users = variable_get('user_block_max_list_count', 10);
if ($total_users && $max_users) {
$items = array();
while ($max_users-- && $account = db_fetch_object($users)) {
$items[] = $account;
}
$output.="
$output .= theme('user_list', $items, NULL);
}
// Display a list of currently online guests.
if ($total_guests) {
$output.="
- hostname\">$account->hostname
hostname)."\">".gethostbyaddr($account->hostname)." ";
}
$output.="
$guestitems = array();
while ($guests-- && $account = db_fetch_object($guests_hostname)) {
$guestitems[] = $account->hostname;
$output.="
}
}
return $output;
?>
which gives as result:
Who is online
Users
* administrator
Guests
* 192.168.0.50 Saturnus
of course the 192.. Ip will change to any guests IP looking at your site.