[ Index ] |
PHP Cross Reference of phpBB 3.0 Beta 3 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package phpBB3 5 * @version $Id: viewonline.php,v 1.110 2006/10/30 16:20:11 acydburn Exp $ 6 * @copyright (c) 2005 phpBB Group 7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License 8 * 9 */ 10 11 /** 12 * @ignore 13 */ 14 define('IN_PHPBB', true); 15 $phpbb_root_path = './'; 16 $phpEx = substr(strrchr(__FILE__, '.'), 1); 17 include($phpbb_root_path . 'common.' . $phpEx); 18 19 // Start session management 20 $user->session_begin(); 21 $auth->acl($user->data); 22 $user->setup(); 23 24 // Get and set some variables 25 $mode = request_var('mode', ''); 26 $session_id = request_var('s', ''); 27 $start = request_var('start', 0); 28 $sort_key = request_var('sk', 'b'); 29 $sort_dir = request_var('sd', 'd'); 30 $show_guests= ($config['load_online_guests']) ? request_var('sg', 0) : 0; 31 32 $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_LOCATION'], 'c' => $user->lang['SORT_JOINED']); 33 $sort_key_sql = array('a' => 'u.username', 'b' => 's.session_time', 'c' => 's.session_page'); 34 35 // Sorting and order 36 if (!isset($sort_key_text[$sort_key])) 37 { 38 $sort_key = 'b'; 39 } 40 41 $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC'); 42 43 // Whois requested 44 if ($mode == 'whois') 45 { 46 include($phpbb_root_path . 'includes/functions_user.' . $phpEx); 47 48 $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip 49 FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s 50 WHERE s.session_id = '" . $db->sql_escape($session_id) . "' 51 AND u.user_id = s.session_user_id"; 52 $result = $db->sql_query($sql); 53 54 if ($row = $db->sql_fetchrow($result)) 55 { 56 $whois = user_ipwhois($row['session_ip']); 57 58 $whois = preg_replace('#(\s)([\w\-\._\+]+@[\w\-\.]+)(\s)#', '\1<a href="mailto:\2">\2</a>\3', $whois); 59 $whois = preg_replace('#(\s)(http:/{2}[^\s]*)(\s)#', '\1<a href="\2">\2</a>\3', $whois); 60 61 $template->assign_vars(array( 62 'WHOIS' => trim($whois)) 63 ); 64 } 65 $db->sql_freeresult($result); 66 67 // Output the page 68 page_header($user->lang['WHO_IS_ONLINE']); 69 70 $template->set_filenames(array( 71 'body' => 'viewonline_whois.html') 72 ); 73 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx")); 74 75 page_footer(); 76 } 77 78 // Forum info 79 $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id 80 FROM ' . FORUMS_TABLE . ' 81 ORDER BY left_id ASC'; 82 $result = $db->sql_query($sql, 600); 83 84 while ($row = $db->sql_fetchrow($result)) 85 { 86 $forum_data[$row['forum_id']] = $row['forum_name']; 87 } 88 $db->sql_freeresult($result); 89 90 $guest_counter = 0; 91 92 // Get number of online guests (if we do not display them) 93 if (!$show_guests) 94 { 95 switch ($db->sql_layer) 96 { 97 case 'sqlite': 98 $sql = 'SELECT COUNT(session_ip) as num_guests 99 FROM ( 100 SELECT DISTINCT session_ip 101 FROM ' . SESSIONS_TABLE . ' 102 WHERE session_user_id = ' . ANONYMOUS . ' 103 AND session_time >= ' . (time() - ($config['load_online_time'] * 60)) . 104 ')'; 105 break; 106 107 default: 108 $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests 109 FROM ' . SESSIONS_TABLE . ' 110 WHERE session_user_id = ' . ANONYMOUS . ' 111 AND session_time >= ' . (time() - ($config['load_online_time'] * 60)); 112 break; 113 } 114 $result = $db->sql_query($sql); 115 $guest_counter = (int) $db->sql_fetchfield('num_guests'); 116 $db->sql_freeresult($result); 117 } 118 119 // Get user list 120 $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 121 FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s 122 WHERE u.user_id = s.session_user_id 123 AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) . 124 ((!$show_guests) ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . ' 125 ORDER BY ' . $order_by; 126 $result = $db->sql_query($sql); 127 128 $prev_id = $prev_ip = $user_list = array(); 129 $logged_visible_online = $logged_hidden_online = $counter = 0; 130 131 while ($row = $db->sql_fetchrow($result)) 132 { 133 if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']])) 134 { 135 $view_online = false; 136 137 if ($row['user_colour']) 138 { 139 $row['username'] = '<b style="color:#' . $row['user_colour'] . '">' . $row['username'] . '</b>'; 140 } 141 142 if (!$row['user_allow_viewonline'] || !$row['session_viewonline']) 143 { 144 $view_online = ($auth->acl_get('u_viewonline')) ? true : false; 145 $logged_hidden_online++; 146 147 $row['username'] = '<i>' . $row['username'] . '</i>'; 148 } 149 else 150 { 151 $view_online = true; 152 $logged_visible_online++; 153 } 154 155 $prev_id[$row['user_id']] = 1; 156 157 if ($view_online) 158 { 159 $counter++; 160 } 161 162 if (!$view_online || $counter > $start + $config['topics_per_page'] || $counter <= $start) 163 { 164 continue; 165 } 166 } 167 else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']])) 168 { 169 $prev_ip[$row['session_ip']] = 1; 170 $guest_counter++; 171 $counter++; 172 173 if ($counter > $start + $config['topics_per_page'] || $counter <= $start) 174 { 175 continue; 176 } 177 178 $row['username'] = $user->lang['GUEST']; 179 } 180 else 181 { 182 continue; 183 } 184 185 preg_match('#^([a-z/]+)#i', $row['session_page'], $on_page); 186 if (!sizeof($on_page)) 187 { 188 $on_page[1] = ''; 189 } 190 191 switch ($on_page[1]) 192 { 193 case 'index': 194 $location = $user->lang['INDEX']; 195 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 196 break; 197 198 case 'adm/index': 199 $location = $user->lang['ACP']; 200 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 201 break; 202 203 case 'posting': 204 case 'viewforum': 205 case 'viewtopic': 206 preg_match('#f=([0-9]+)#', $row['session_page'], $forum_id); 207 $forum_id = (sizeof($forum_id)) ? (int) $forum_id[1] : 0; 208 209 if ($forum_id && $auth->acl_get('f_list', $forum_id)) 210 { 211 $location = ''; 212 switch ($on_page[1]) 213 { 214 case 'posting': 215 preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page); 216 217 switch ($on_page[1]) 218 { 219 case 'reply': 220 $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]); 221 break; 222 223 default: 224 $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]); 225 break; 226 } 227 break; 228 229 case 'viewtopic': 230 $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]); 231 break; 232 233 case 'viewforum': 234 $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]); 235 break; 236 } 237 238 $location_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id); 239 } 240 else 241 { 242 $location = $user->lang['INDEX']; 243 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 244 } 245 break; 246 247 case 'search': 248 $location = $user->lang['SEARCHING_FORUMS']; 249 $location_url = append_sid("{$phpbb_root_path}search.$phpEx"); 250 break; 251 252 case 'faq': 253 $location = $user->lang['VIEWING_FAQ']; 254 $location_url = append_sid("{$phpbb_root_path}faq.$phpEx"); 255 break; 256 257 case 'viewonline': 258 $location = $user->lang['VIEWING_ONLINE']; 259 $location_url = append_sid("{$phpbb_root_path}viewonline.$phpEx"); 260 break; 261 262 case 'memberlist': 263 $location = (strpos($row['session_page'], 'mode=viewprofile') !== false) ? $user->lang['VIEWING_MEMBER_PROFILE'] : $user->lang['VIEWING_MEMBERS']; 264 $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx"); 265 break; 266 267 case 'mcp': 268 case 'ucp': 269 $location = $user->lang['VIEWING_UCP']; 270 271 /** 272 * @todo getting module/mode for ucp and mcp 273 */ 274 /* if (strpos($row['session_page'], 'i=pm&mode=compose') !== false) 275 { 276 $location = 'Composing PM'; 277 }*/ 278 279 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 280 break; 281 282 case 'download': 283 $location = $user->lang['DOWNLOADING_FILE']; 284 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 285 break; 286 287 case 'report': 288 $location = $user->lang['REPORTING_POST']; 289 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 290 break; 291 292 default: 293 $location = $user->lang['INDEX']; 294 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 295 break; 296 } 297 298 $template->assign_block_vars('user_row', array( 299 'USERNAME' => $row['username'], 300 'LASTUPDATE' => $user->format_date($row['session_time']), 301 'FORUM_LOCATION' => $location, 302 'USER_IP' => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '', 303 304 'U_USER_PROFILE' => (($row['user_type'] == USER_NORMAL || $row['user_type'] == USER_FOUNDER) && $row['user_id'] != ANONYMOUS) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $row['user_id']) : '', 305 'U_USER_IP' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=lookup' . (($mode != 'lookup' || $row['session_id'] != $session_id) ? '&s=' . $row['session_id'] : '') . "&sg=$show_guests&start=$start&sk=$sort_key&sd=$sort_dir"), 306 'U_WHOIS' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&s=' . $row['session_id']), 307 'U_FORUM_LOCATION' => $location_url, 308 309 'S_GUEST' => ($row['user_id'] == ANONYMOUS) ? true : false, 310 'S_USER_TYPE' => $row['user_type']) 311 ); 312 } 313 $db->sql_freeresult($result); 314 unset($prev_id, $prev_ip); 315 316 // Generate reg/hidden/guest online text 317 $vars_online = array( 318 'REG' => array('logged_visible_online', 'l_r_user_s'), 319 'HIDDEN'=> array('logged_hidden_online', 'l_h_user_s'), 320 'GUEST' => array('guest_counter', 'l_g_user_s') 321 ); 322 323 foreach ($vars_online as $l_prefix => $var_ary) 324 { 325 switch ($$var_ary[0]) 326 { 327 case 0: 328 $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ZERO_ONLINE']; 329 break; 330 331 case 1: 332 $$var_ary[1] = $user->lang[$l_prefix . '_USER_ONLINE']; 333 break; 334 335 default: 336 $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ONLINE']; 337 break; 338 } 339 } 340 unset($vars_online); 341 342 $pagination = generate_pagination(append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir"), $counter, $config['topics_per_page'], $start); 343 344 // Grab group details for legend display 345 $sql = 'SELECT group_id, group_name, group_colour, group_type 346 FROM ' . GROUPS_TABLE . ' 347 WHERE group_legend = 1 348 AND group_type <> ' . GROUP_HIDDEN . ' 349 ORDER BY group_name ASC'; 350 $result = $db->sql_query($sql); 351 352 $legend = ''; 353 while ($row = $db->sql_fetchrow($result)) 354 { 355 if ($row['group_name'] == 'BOTS') 356 { 357 $legend .= (($legend != '') ? ', ' : '') . '<span style="color:#' . $row['group_colour'] . '">' . $user->lang['G_BOTS'] . '</span>'; 358 } 359 else 360 { 361 $legend .= (($legend != '') ? ', ' : '') . '<a style="color:#' . $row['group_colour'] . '" href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $row['group_id']) . '">' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</a>'; 362 } 363 } 364 $db->sql_freeresult($result); 365 366 // Refreshing the page every 60 seconds... 367 meta_refresh(60, append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir&start=$start")); 368 369 // Send data to template 370 $template->assign_vars(array( 371 'TOTAL_REGISTERED_USERS_ONLINE' => sprintf($l_r_user_s, $logged_visible_online) . sprintf($l_h_user_s, $logged_hidden_online), 372 'TOTAL_GUEST_USERS_ONLINE' => sprintf($l_g_user_s, $guest_counter), 373 'LEGEND' => $legend, 374 'PAGINATION' => $pagination, 375 'PAGE_NUMBER' => on_page($counter, $config['topics_per_page'], $start), 376 377 'U_SORT_USERNAME' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=a&sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a')), 378 'U_SORT_UPDATED' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=b&sd=' . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a')), 379 'U_SORT_LOCATION' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=c&sd=' . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a')), 380 381 'U_SWITCH_GUEST_DISPLAY' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sg=' . ((int) !$show_guests)), 382 'L_SWITCH_GUEST_DISPLAY' => ($show_guests) ? $user->lang['HIDE_GUESTS'] : $user->lang['DISPLAY_GUESTS'], 383 'S_SWITCH_GUEST_DISPLAY' => ($config['load_online_guests']) ? true : false) 384 ); 385 386 // We do not need to load the who is online box here. ;) 387 $config['load_online'] = false; 388 389 // Output the page 390 page_header($user->lang['WHO_IS_ONLINE']); 391 392 $template->set_filenames(array( 393 'body' => 'viewonline_body.html') 394 ); 395 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx")); 396 397 page_footer(); 398 399 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 22 00:35:05 2006 | Cross-referenced by PHPXref 0.6 |