diff options
author | Meik Sievertsen <acydburn@phpbb.com> | 2005-02-10 20:19:48 +0000 |
---|---|---|
committer | Meik Sievertsen <acydburn@phpbb.com> | 2005-02-10 20:19:48 +0000 |
commit | 4269b318a29f3cff9da6bdf2f7cff959dcb0c961 (patch) | |
tree | edd09aa26c4d05d65bec79e31e5e92aa458d4415 | |
parent | 9841f6145c88a30d1d337a4e250ac379ac9b2700 (diff) | |
download | forums-4269b318a29f3cff9da6bdf2f7cff959dcb0c961.tar forums-4269b318a29f3cff9da6bdf2f7cff959dcb0c961.tar.gz forums-4269b318a29f3cff9da6bdf2f7cff959dcb0c961.tar.bz2 forums-4269b318a29f3cff9da6bdf2f7cff959dcb0c961.tar.xz forums-4269b318a29f3cff9da6bdf2f7cff959dcb0c961.zip |
change viewonline page slightly.
Mental Note: Step away from using in_array in conjunction with huge arrays (and within a loop), might get slow. ;)
git-svn-id: file:///svn/phpbb/trunk@5091 89ea8834-ac86-4346-8a33-228a782c2dd0
-rw-r--r-- | phpBB/adm/admin_board.php | 3 | ||||
-rw-r--r-- | phpBB/includes/functions.php | 29 | ||||
-rw-r--r-- | phpBB/install/schemas/schema_data.sql | 1 | ||||
-rw-r--r-- | phpBB/language/en/admin.php | 2 | ||||
-rw-r--r-- | phpBB/language/en/common.php | 3 | ||||
-rw-r--r-- | phpBB/styles/subSilver/template/viewonline_body.html | 45 | ||||
-rw-r--r-- | phpBB/viewonline.php | 289 |
7 files changed, 218 insertions, 154 deletions
diff --git a/phpBB/adm/admin_board.php b/phpBB/adm/admin_board.php index e10a3b8ecf..2a2f2a53bc 100644 --- a/phpBB/adm/admin_board.php +++ b/phpBB/adm/admin_board.php @@ -95,6 +95,7 @@ $display_vars = array( 'load_db_track' => array('lang' => 'YES_POST_MARKING', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'type' => 'radio:yes_no', 'explain' => true), 'load_online' => array('lang' => 'YES_ONLINE', 'type' => 'radio:yes_no', 'explain' => true), + 'load_online_guests'=> array('lang' => 'YES_ONLINE_GUESTS', 'type' => 'radio:yes_no', 'explain' => true), 'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'type' => 'radio:yes_no', 'explain' => true), 'load_online_time' => array('lang' => 'ONLINE_LENGTH', 'type' => 'text:4:3', 'explain' => true), 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'type' => 'radio:yes_no', 'explain' => false), @@ -331,7 +332,7 @@ if ($mode == 'auth') if ($config_fields = $method($new)) { // Check if we need to create config fields for this plugin - foreach($config_fields as $field) + foreach ($config_fields as $field) { if (!isset($config[$field])) { diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index a8e7033a18..d887d76655 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -334,7 +334,7 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id FROM ' . FORUMS_TABLE . ' ORDER BY left_id ASC'; - $result = $db->sql_query($sql); + $result = $db->sql_query($sql, 600); $right = $padding = 0; $padding_store = array('0' => 0); @@ -1529,25 +1529,38 @@ function page_header($page_title = '') { $userlist_ary = $userlist_visible = array(); $logged_visible_online = $logged_hidden_online = $guests_online = $prev_user_id = 0; - $prev_user_ip = $prev_session_ip = $reading_sql = ''; + $prev_session_ip = $reading_sql = ''; if (!empty($_REQUEST['f'])) { $f = request_var('f', 0); - $reading_sql = "AND s.session_page LIKE '%f=$f%'"; + $reading_sql = " AND s.session_page LIKE '%f=$f%'"; + } + + // Get number of online guests + if (!$config['load_online_guests']) + { + $sql = 'SELECT COUNT(DISTINCT s.session_ip) as num_guests FROM ' . SESSIONS_TABLE . ' s + WHERE s.session_user_id = ' . ANONYMOUS . ' + AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) . + $reading_sql; + $result = $db->sql_query($sql); + $guests_online = (int) $db->sql_fetchfield('num_guests', 0, $result); + $db->sql_freeresult($result); } $sql = 'SELECT u.username, u.user_id, u.user_type, u.user_allow_viewonline, u.user_colour, s.session_ip, s.session_viewonline FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s - WHERE s.session_time >= ' . (time() - (intval($config['load_online_time']) * 60)) . " - $reading_sql - AND u.user_id = s.session_user_id - ORDER BY u.username ASC, s.session_ip ASC"; + WHERE s.session_time >= ' . (time() - (intval($config['load_online_time']) * 60)) . + $reading_sql . + ((!$config['load_online_guests']) ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . ' + AND u.user_id = s.session_user_id + ORDER BY u.username ASC, s.session_ip ASC'; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { - // User is logged in and therefor not a guest + // User is logged in and therefore not a guest if ($row['user_id'] != ANONYMOUS) { // Skip multiple sessions for one user diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 220fc30ff5..4d5c567e4e 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -70,6 +70,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('chg_passforce', '0 INSERT INTO phpbb_config (config_name, config_value) VALUES ('limit_load', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_online_time', '5'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_online', '1'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_online_guests', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_birthdays', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_moderators', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_jumpbox', '1'); diff --git a/phpBB/language/en/admin.php b/phpBB/language/en/admin.php index a8a27abda4..e8658a4e65 100644 --- a/phpBB/language/en/admin.php +++ b/phpBB/language/en/admin.php @@ -730,6 +730,8 @@ $lang += array( 'ONLINE_LENGTH_EXPLAIN' => 'Time in minutes after which inactive users will not appear in viewonline listings, lower equals less processing.', 'YES_ONLINE' => 'Enable online user listings', 'YES_ONLINE_EXPLAIN' => 'Display online user information on index, forum and topic pages.', + 'YES_ONLINE_GUESTS' => 'Enable online guest listings in viewonline', + 'YES_ONLINE_GUESTS_EXPLAIN' => 'Allow display of guest user informations in viewonline.', 'YES_ONLINE_TRACK' => 'Enable display of user online img', 'YES_ONLINE_TRACK_EXPLAIN' => 'Display online information for user in profiles and viewtopic.', 'YES_BIRTHDAYS' => 'Enable birthday listing', diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index daf9a9d41e..8d5b8777f1 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -92,6 +92,7 @@ $lang += array( 'DELETE_MARKED' => 'Delete Marked', 'DESCENDING' => 'Descending', 'DISABLED' => 'Disabled', + 'DISPLAY_GUESTS' => 'Display Guests', 'DISPLAY_MESSAGES' => 'Display messages from previous', 'DISPLAY_POSTS' => 'Display posts from previous', 'DISPLAY_TOPICS' => 'Display topics from previous', @@ -151,6 +152,7 @@ $lang += array( 'HIDDEN_USERS_ZERO_TOTAL' => '0 Hidden and ', 'HIDDEN_USER_ONLINE' => '%d Hidden user online', 'HIDDEN_USER_TOTAL' => '%d Hidden and ', + 'HIDE_GUESTS' => 'Hide Guests', 'HIDE_ME' => 'Hide my online status this session', 'HOURS' => 'Hours', @@ -404,6 +406,7 @@ $lang += array( 'VIEWING_FAQ' => 'Viewing FAQ', 'VIEWING_MEMBERS' => 'Viewing member details', 'VIEWING_ONLINE' => 'Viewing who is online', + 'VIEWING_UCP' => 'Viewing user control panel', 'VIEWS' => 'Views', 'VIEW_BOOKMARKS' => 'View bookmarks', 'VIEW_LATEST_POST' => 'View latest post', diff --git a/phpBB/styles/subSilver/template/viewonline_body.html b/phpBB/styles/subSilver/template/viewonline_body.html index be0b9f6895..7f98ddaed5 100644 --- a/phpBB/styles/subSilver/template/viewonline_body.html +++ b/phpBB/styles/subSilver/template/viewonline_body.html @@ -2,39 +2,48 @@ <!-- $Id$ --> + <h4>{TOTAL_REGISTERED_USERS_ONLINE}</h4> + <h4>{TOTAL_GUEST_USERS_ONLINE}<!-- IF S_SWITCH_GUEST_DISPLAY --> [ <a href="{U_SWITCH_GUEST_DISPLAY}">{L_SWITCH_GUEST_DISPLAY}</a> ]<!-- ENDIF --></h4> + <br /> + + <!-- IF PAGINATION --> + <table width="100%" cellspacing="1"> + <tr> + <td class="nav" valign="middle" nowrap="nowrap"> {PAGE_NUMBER}<br /></td> + <td class="gensmall" width="100%" align="right" nowrap="nowrap"><b><a href="javascript:jumpto();">{L_GOTO_PAGE}</a> <!-- IF PREVIOUS_PAGE --><a href="{PREVIOUS_PAGE}">{L_PREVIOUS}</a> <!-- ENDIF -->{PAGINATION}<!-- IF NEXT_PAGE --> <a href="{NEXT_PAGE}">{L_NEXT}</a><!-- ENDIF --></b></td> + </tr> + </table> + <!-- ENDIF --> + <table class="tablebg" width="100%" cellspacing="1"> <tr> <th width="40%"><a class="th" href="{U_SORT_USERNAME}">{L_USERNAME}</a></th> <th width="20%"><a class="th" href="{U_SORT_UPDATED}">{L_LAST_UPDATED}</a></th> <th width="40%"><a class="th" href="{U_SORT_LOCATION}">{L_FORUM_LOCATION}</a></th> </tr> - <tr> - <td class="cat" colspan="3"><h4>{TOTAL_REGISTERED_USERS_ONLINE}</h4></td> - </tr> - <!-- BEGIN reg_user_row --> + <!-- BEGIN user_row --> <tr> - <td class="row1"><p class="gen"><!-- IF reg_user_row.U_USER_PROFILE --><a href="{reg_user_row.U_USER_PROFILE}"><!-- ENDIF -->{reg_user_row.USERNAME}<!-- IF reg_user_row.U_USER_PROFILE --></a><!-- ENDIF --></p><!-- IF reg_user_row.USER_IP --><p class="gensmall">{L_IP}: <a href="{reg_user_row.U_USER_IP}">{reg_user_row.USER_IP}</a> » <a href="{reg_user_row.U_WHOIS}" onclick="popup('{reg_user_row.U_WHOIS}', 750, 500);return false">{L_WHOIS}</a></p><!-- ENDIF --></td> - <td class="row2" align="center" nowrap="nowrap"><p class="genmed"> {reg_user_row.LASTUPDATE}</p></td> - <td class="row1"><p class="genmed"><a href="{reg_user_row.U_FORUM_LOCATION}">{reg_user_row.FORUM_LOCATION}</a></p></td> + <td class="row1"><p class="gen"><!-- IF user_row.U_USER_PROFILE --><a href="{user_row.U_USER_PROFILE}"><!-- ENDIF -->{user_row.USERNAME}<!-- IF user_row.U_USER_PROFILE --></a><!-- ENDIF --></p><!-- IF user_row.USER_IP --><p class="gensmall">{L_IP}: <a href="{user_row.U_USER_IP}">{user_row.USER_IP}</a> » <a href="{user_row.U_WHOIS}" onclick="popup('{user_row.U_WHOIS}', 750, 500);return false">{L_WHOIS}</a></p><!-- ENDIF --></td> + <td class="row2" align="center" nowrap="nowrap"><p class="genmed"> {user_row.LASTUPDATE}</p></td> + <td class="row1"><p class="genmed"><a href="{user_row.U_FORUM_LOCATION}">{user_row.FORUM_LOCATION}</a></p></td> </tr> - <!-- END reg_user_row --> + <!-- END user_row --> <!-- IF LEGEND --> <tr> <td class="row1" colspan="3"><b class="gensmall">{L_LEGEND} :: {LEGEND}</b></td> </tr> <!-- ENDIF --> - <tr> - <td class="cat" colspan="3"><h4>{TOTAL_GUEST_USERS_ONLINE}</h4></td> - </tr> - <!-- BEGIN guest_user_row --> - <tr> - <td class="row1"><p class="gen">{guest_user_row.USERNAME}</p><!-- IF guest_user_row.USER_IP --><p class="gensmall">{L_IP}: <a href="{guest_user_row.U_USER_IP}">{guest_user_row.USER_IP}</a> » <a href="{guest_user_row.U_WHOIS}" onclick="popup('{guest_user_row.U_WHOIS}', 750, 500);return false">{L_WHOIS}</a></p><!-- ENDIF --></td> - <td class="row2" align="center" nowrap="nowrap"><p class="genmed">{guest_user_row.LASTUPDATE}</p></td> - <td class="row1"><p class="genmed"><a href="{guest_user_row.U_FORUM_LOCATION}">{guest_user_row.FORUM_LOCATION}</a></p></td> - </tr> - <!-- END guest_user_row --> </table> + <!-- IF PAGINATION --> + <table width="100%" cellspacing="1"> + <tr> + <td class="nav" valign="middle" nowrap="nowrap"> {PAGE_NUMBER}<br /></td> + <td class="gensmall" width="100%" align="right" nowrap="nowrap"><b><a href="javascript:jumpto();">{L_GOTO_PAGE}</a> <!-- IF PREVIOUS_PAGE --><a href="{PREVIOUS_PAGE}">{L_PREVIOUS}</a> <!-- ENDIF -->{PAGINATION}<!-- IF NEXT_PAGE --> <a href="{NEXT_PAGE}">{L_NEXT}</a><!-- ENDIF --></b></td> + </tr> + </table> + <!-- ENDIF --> + <div class="gensmall" align="right">{L_ONLINE_EXPLAIN}</div> <br clear="all" /> diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php index 98c47157bd..99ba2fa811 100644 --- a/phpBB/viewonline.php +++ b/phpBB/viewonline.php @@ -27,9 +27,10 @@ $session_id = request_var('s', ''); $start = request_var('start', 0); $sort_key = request_var('sk', 'b'); $sort_dir = request_var('sd', 'd'); +$show_guests= ($config['load_online_guests']) ? request_var('sg', 0) : 0; $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_LOCATION'], 'c' => $user->lang['SORT_JOINED']); -$sort_key_sql = array('a' => 'username', 'b' => 'session_time', 'c' => 'session_page'); +$sort_key_sql = array('a' => 'u.username', 'b' => 's.session_time', 'c' => 's.session_page'); // Sorting and order $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC'); @@ -37,12 +38,12 @@ $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC // Whois requested if ($mode == 'whois') { - include($phpbb_root_path.'includes/functions_user.'.$phpEx); + include($phpbb_root_path . 'includes/functions_user.' . $phpEx); $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip - FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s - WHERE s.session_id = '$session_id' - AND u.user_id = s.session_user_id"; + FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s + WHERE s.session_id = '" . $db->sql_escape($session_id) . "' + AND u.user_id = s.session_user_id"; $result = $db->sql_query($sql); if ($row = $db->sql_fetchrow($result)) @@ -81,28 +82,40 @@ while ($row = $db->sql_fetchrow($result)) } $db->sql_freeresult($result); +$guest_counter = 0; + +// Get number of online guests (if we do not display them) +if (!$show_guests) +{ + $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests FROM ' . SESSIONS_TABLE . ' + WHERE session_user_id = ' . ANONYMOUS . ' + AND session_time >= ' . (time() - ($config['load_online_time'] * 60)); + $result = $db->sql_query($sql); + $guest_counter = (int) $db->sql_fetchfield('num_guests', 0, $result); + $db->sql_freeresult($result); +} // Get user list $sql = 'SELECT u.user_id, u.username, u.user_type, u.user_allow_viewonline, u.user_colour, s.session_id, s.session_time, s.session_page, s.session_ip, s.session_viewonline FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s WHERE u.user_id = s.session_user_id - AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) . ' + AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) . + ((!$show_guests) ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . ' ORDER BY ' . $order_by; $result = $db->sql_query($sql); -$prev_ip = $prev_id = array(); -$logged_visible_online = $logged_hidden_online = $guests_online = $reg_counter = $guest_counter = 0; +$prev_id = $prev_ip = $user_list = array(); +$logged_visible_online = $logged_hidden_online = $counter = 0; + while ($row = $db->sql_fetchrow($result)) { - $view_online = false; - - if ($row['user_id'] != ANONYMOUS && !in_array($row['user_id'], $prev_id)) + if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']])) { - $username = $row['username']; - + $view_online = false; + if ($row['user_colour']) { - $username = '<b style="color:#' . $row['user_colour'] . '">' . $username . '</b>'; + $row['username'] = '<b style="color:#' . $row['user_colour'] . '">' . $row['username'] . '</b>'; } if (!$row['user_allow_viewonline'] || !$row['session_viewonline']) @@ -110,7 +123,7 @@ while ($row = $db->sql_fetchrow($result)) $view_online = ($auth->acl_get('u_viewonline')) ? true : false; $logged_hidden_online++; - $username = '<i>' . $username . '</i>'; + $row['username'] = '<i>' . $row['username'] . '</i>'; } else { @@ -118,131 +131,145 @@ while ($row = $db->sql_fetchrow($result)) $logged_visible_online++; } - $which_counter = 'reg_counter'; - $which_row = 'reg_user_row'; - $prev_id[] = $row['user_id']; + $prev_id[$row['user_id']] = 1; + + if ($view_online) + { + $counter++; + } + + if (!$view_online || $counter > $start + $config['topics_per_page'] || $counter <= $start) + { + continue; + } } - else if (!in_array($row['session_ip'], $prev_ip)) + else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']])) { - $username = $user->lang['GUEST']; - $view_online = true; - $guests_online++; + $prev_ip[$row['session_ip']] = 1; + $guest_counter++; + $counter++; - $which_counter = 'guest_counter'; - $which_row = 'guest_user_row'; - } + if ($counter > $start + $config['topics_per_page'] || $counter <= $start) + { + continue; + } - $prev_ip[] = $row['session_ip']; + $row['username'] = $user->lang['GUEST']; + } + else + { + continue; + } - if ($view_online) + preg_match('#^([a-z]+)#i', $row['session_page'], $on_page); + if (!sizeof($on_page)) { - preg_match('#^([a-z]+)#i', $row['session_page'], $on_page); + $on_page[1] = ''; + } - switch ($on_page[1]) - { - case 'index': - $location = $user->lang['INDEX']; - $location_url = "index.$phpEx$SID"; - break; + switch ($on_page[1]) + { + case 'index': + $location = $user->lang['INDEX']; + $location_url = "index.$phpEx$SID"; + break; - case 'posting': - case 'viewforum': - case 'viewtopic': - preg_match('#f=([0-9]+)#', $row['session_page'], $forum_id); - $forum_id = $forum_id[1]; + case 'posting': + case 'viewforum': + case 'viewtopic': + preg_match('#f=([0-9]+)#', $row['session_page'], $forum_id); + $forum_id = (sizeof($forum_id)) ? $forum_id[1] : 0; - if ($auth->acl_get('f_list', $forum_id)) - { - $location = ''; - switch ($on_page[1]) - { - case 'posting': - preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page); - - switch ($on_page[1]) - { - case 'reply': - $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]); - break; - default: - $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]); - break; - } - break; - - case 'viewtopic': - $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]); - break; - - case 'viewforum': - $location .= sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]); - break; - } - - $location_url = "viewforum.$phpEx$SID&f=$forum_id"; - } - else + if ($auth->acl_get('f_list', $forum_id)) + { + $location = ''; + switch ($on_page[1]) { - $location = $user->lang['INDEX']; - $location_url = "index.$phpEx$SID"; + case 'posting': + preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page); + + switch ($on_page[1]) + { + case 'reply': + $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]); + break; + default: + $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]); + break; + } + break; + + case 'viewtopic': + $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]); + break; + + case 'viewforum': + $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]); + break; } - break; - case 'search': - $location = $user->lang['SEARCHING_FORUMS']; - $location_url = "search.$phpEx$SID"; - break; - - case 'faq': - $location = $user->lang['VIEWING_FAQ']; - $location_url = "faq.$phpEx$SID"; - break; - - case 'viewonline': - $location = $user->lang['VIEWING_ONLINE']; - $location_url = "viewonline.$phpEx$SID"; - break; + $location_url = "viewforum.$phpEx$SID&f=$forum_id"; + } + else + { + $location = $user->lang['INDEX']; + $location_url = "index.$phpEx$SID"; + } + break; - case 'memberlist': - $location = $user->lang['VIEWING_MEMBERS']; - $location_url = "memberlist.$phpEx$SID"; - break; + case 'search': + $location = $user->lang['SEARCHING_FORUMS']; + $location_url = "search.$phpEx$SID"; + break; - case 'ucp': - $location = $user->lang['VIEWING_UCP']; - $location_url = ''; + case 'faq': + $location = $user->lang['VIEWING_FAQ']; + $location_url = "faq.$phpEx$SID"; + break; - default: - $location = $user->lang['INDEX']; - $location_url = "index.$phpEx$SID"; - break; - } + case 'viewonline': + $location = $user->lang['VIEWING_ONLINE']; + $location_url = "viewonline.$phpEx$SID"; + break; - $template->assign_block_vars($which_row, array( - 'USERNAME' => $username, - 'LASTUPDATE' => $user->format_date($row['session_time']), - 'FORUM_LOCATION'=> $location, - 'USER_IP' => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '', + case 'memberlist': + $location = $user->lang['VIEWING_MEMBERS']; + $location_url = "memberlist.$phpEx$SID"; + break; - 'U_USER_PROFILE' => ($row['user_type'] <> USER_IGNORE) ? "memberlist.$phpEx$SID&mode=viewprofile&u=" . $row['user_id'] : '', - 'U_USER_IP' => "viewonline.$phpEx$SID" . (($mode != 'lookup' || $row['session_id'] != $session_id) ? '&mode=lookup&s=' . $row['session_id'] : ''), - 'U_WHOIS' => "viewonline.$phpEx$SID&mode=whois&s=" . $row['session_id'], - 'U_FORUM_LOCATION' => $location_url) - ); + case 'ucp': + $location = $user->lang['VIEWING_UCP']; + $location_url = ''; - $$which_counter++; + default: + $location = $user->lang['INDEX']; + $location_url = "index.$phpEx$SID"; + break; } + + $template->assign_block_vars('user_row', array( + 'USERNAME' => $row['username'], + 'LASTUPDATE' => $user->format_date($row['session_time']), + 'FORUM_LOCATION'=> $location, + 'USER_IP' => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '', + + 'U_USER_PROFILE' => ($row['user_type'] != USER_IGNORE && $row['user_id'] != ANONYMOUS) ? "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u=" . $row['user_id'] : '', + 'U_USER_IP' => "{$phpbb_root_path}viewonline.$phpEx$SID" . (($mode != 'lookup' || $row['session_id'] != $session_id) ? '&s=' . $row['session_id'] : '') . "&mode=lookup&sg=$show_guests&start=$start&sk=$sort_key&sd=$sort_dir", + 'U_WHOIS' => "{$phpbb_root_path}viewonline.$phpEx$SID&mode=whois&s=" . $row['session_id'], + 'U_FORUM_LOCATION' => $phpbb_root_path . $location_url, + + 'S_GUEST' => ($row['user_id'] == ANONYMOUS) ? true : false, + 'S_USER_TYPE' => $row['user_type']) + ); } $db->sql_freeresult($result); -unset($prev_id); -unset($prev_ip); - +unset($prev_id, $prev_ip); // Generate reg/hidden/guest online text $vars_online = array( 'REG' => array('logged_visible_online', 'l_r_user_s'), 'HIDDEN'=> array('logged_hidden_online', 'l_h_user_s'), - 'GUEST' => array('guests_online', 'l_g_user_s') + 'GUEST' => array('guest_counter', 'l_g_user_s') ); foreach ($vars_online as $l_prefix => $var_ary) @@ -264,34 +291,42 @@ foreach ($vars_online as $l_prefix => $var_ary) } unset($vars_online); +$pagination = generate_pagination("{$phpbb_root_path}viewonline.$phpEx$SID&sg=$show_guests&sk=$sort_key&sd=$sort_dir", $counter, $config['topics_per_page'], $start); // Grab group details for legend display -$sql = 'SELECT group_name, group_colour, group_type - FROM ' . GROUPS_TABLE . " - WHERE group_colour <> '' - AND group_type NOT IN (" . GROUP_HIDDEN . ', ' . GROUP_SPECIAL . ')'; +$sql = 'SELECT group_id, group_name, group_colour, group_type + FROM ' . GROUPS_TABLE . ' + WHERE group_legend = 1'; $result = $db->sql_query($sql); $legend = ''; while ($row = $db->sql_fetchrow($result)) { - $legend .= (($legend != '') ? ', ' : '') . '<span style="color:#' . $row['group_colour'] . '">' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</span>'; + $legend .= (($legend != '') ? ', ' : '') . '<a style="color:#' . $row['group_colour'] . '" href="memberlist.' . $phpEx . $SID . '&mode=group&g=' . $row['group_id'] . '">' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</a>'; } $db->sql_freeresult($result); - // Send data to template $template->assign_vars(array( 'TOTAL_REGISTERED_USERS_ONLINE' => sprintf($l_r_user_s, $logged_visible_online) . sprintf($l_h_user_s, $logged_hidden_online), - 'TOTAL_GUEST_USERS_ONLINE' => sprintf($l_g_user_s, $guests_online), - 'LEGEND' => $legend, - 'META' => '<meta http-equiv="refresh" content="60; url=viewonline.' . $phpEx . $SID . '">', - - 'U_SORT_USERNAME' => "viewonline.$phpEx$SID&sk=a&sd=" . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a'), - 'U_SORT_UPDATED' => "viewonline.$phpEx$SID&sk=b&sd=" . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a'), - 'U_SORT_LOCATION' => "viewonline.$phpEx$SID&sk=c&sd=" . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a')) + 'TOTAL_GUEST_USERS_ONLINE' => sprintf($l_g_user_s, $guest_counter), + 'LEGEND' => $legend, + 'META' => '<meta http-equiv="refresh" content="60; url=viewonline.' . $phpEx . $SID . '">', + 'PAGINATION' => $pagination, + 'PAGE_NUMBER' => on_page($counter, $config['topics_per_page'], $start), + + 'U_SORT_USERNAME' => "{$phpbb_root_path}viewonline.$phpEx$SID&sk=a&sd=" . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a'), + 'U_SORT_UPDATED' => "{$phpbb_root_path}viewonline.$phpEx$SID&sk=b&sd=" . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a'), + 'U_SORT_LOCATION' => "{$phpbb_root_path}viewonline.$phpEx$SID&sk=c&sd=" . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a'), + + 'U_SWITCH_GUEST_DISPLAY' => "{$phpbb_root_path}viewonline.$phpEx$SID&sg=" . ((int) !$show_guests), + 'L_SWITCH_GUEST_DISPLAY' => ($show_guests) ? $user->lang['HIDE_GUESTS'] : $user->lang['DISPLAY_GUESTS'], + 'S_SWITCH_GUEST_DISPLAY' => ($config['load_online_guests']) ? true : false) ); +// We do not need to load the who is online box here. ;) +$config['load_online'] = false; + // Output the page page_header($user->lang['WHO_IS_ONLINE']); |