[ Index ] |
PHP Cross Reference of phpBB-3.1.12-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * This file is part of the phpBB Forum Software package. 5 * 6 * @copyright (c) phpBB Limited <https://www.phpbb.com> 7 * @license GNU General Public License, version 2 (GPL-2.0) 8 * 9 * For full copyright and license information, please see 10 * the docs/CREDITS.txt file. 11 * 12 */ 13 14 /** 15 * @ignore 16 */ 17 define('IN_PHPBB', true); 18 $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; 19 $phpEx = substr(strrchr(__FILE__, '.'), 1); 20 include($phpbb_root_path . 'common.' . $phpEx); 21 22 // Start session management 23 $user->session_begin(); 24 $auth->acl($user->data); 25 $user->setup('memberlist'); 26 27 // Get and set some variables 28 $mode = request_var('mode', ''); 29 $session_id = request_var('s', ''); 30 $start = request_var('start', 0); 31 $sort_key = request_var('sk', 'b'); 32 $sort_dir = request_var('sd', 'd'); 33 $show_guests = ($config['load_online_guests']) ? request_var('sg', 0) : 0; 34 35 // Can this user view profiles/memberlist? 36 if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')) 37 { 38 if ($user->data['user_id'] != ANONYMOUS) 39 { 40 trigger_error('NO_VIEW_USERS'); 41 } 42 43 login_box('', $user->lang['LOGIN_EXPLAIN_VIEWONLINE']); 44 } 45 46 $pagination = $phpbb_container->get('pagination'); 47 $viewonline_helper = $phpbb_container->get('viewonline_helper'); 48 49 $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']); 50 $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page'); 51 52 // Sorting and order 53 if (!isset($sort_key_text[$sort_key])) 54 { 55 $sort_key = 'b'; 56 } 57 58 $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC'); 59 60 // Whois requested 61 if ($mode == 'whois' && $auth->acl_get('a_') && $session_id) 62 { 63 if (!function_exists('user_get_id_name')) 64 { 65 include($phpbb_root_path . 'includes/functions_user.' . $phpEx); 66 } 67 68 $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip 69 FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s 70 WHERE s.session_id = '" . $db->sql_escape($session_id) . "' 71 AND u.user_id = s.session_user_id"; 72 $result = $db->sql_query($sql); 73 74 if ($row = $db->sql_fetchrow($result)) 75 { 76 $template->assign_var('WHOIS', user_ipwhois($row['session_ip'])); 77 } 78 $db->sql_freeresult($result); 79 80 // Output the page 81 page_header($user->lang['WHO_IS_ONLINE']); 82 83 $template->set_filenames(array( 84 'body' => 'viewonline_whois.html') 85 ); 86 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx")); 87 88 page_footer(); 89 } 90 91 $user->update_session_infos(); 92 93 // Forum info 94 $sql_ary = array( 95 'SELECT' => 'f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.left_id, f.right_id', 96 'FROM' => array( 97 FORUMS_TABLE => 'f', 98 ), 99 'ORDER_BY' => 'f.left_id ASC', 100 ); 101 102 /** 103 * Modify the forum data SQL query for getting additional fields if needed 104 * 105 * @event core.viewonline_modify_forum_data_sql 106 * @var array sql_ary The SQL array 107 * @since 3.1.5-RC1 108 */ 109 $vars = array('sql_ary'); 110 extract($phpbb_dispatcher->trigger_event('core.viewonline_modify_forum_data_sql', compact($vars))); 111 112 $result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary), 600); 113 unset($sql_ary); 114 115 $forum_data = array(); 116 while ($row = $db->sql_fetchrow($result)) 117 { 118 $forum_data[$row['forum_id']] = $row; 119 } 120 $db->sql_freeresult($result); 121 122 $guest_counter = 0; 123 124 // Get number of online guests (if we do not display them) 125 if (!$show_guests) 126 { 127 switch ($db->get_sql_layer()) 128 { 129 case 'sqlite': 130 case 'sqlite3': 131 $sql = 'SELECT COUNT(session_ip) as num_guests 132 FROM ( 133 SELECT DISTINCT session_ip 134 FROM ' . SESSIONS_TABLE . ' 135 WHERE session_user_id = ' . ANONYMOUS . ' 136 AND session_time >= ' . (time() - ($config['load_online_time'] * 60)) . 137 ')'; 138 break; 139 140 default: 141 $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests 142 FROM ' . SESSIONS_TABLE . ' 143 WHERE session_user_id = ' . ANONYMOUS . ' 144 AND session_time >= ' . (time() - ($config['load_online_time'] * 60)); 145 break; 146 } 147 $result = $db->sql_query($sql); 148 $guest_counter = (int) $db->sql_fetchfield('num_guests'); 149 $db->sql_freeresult($result); 150 } 151 152 // Get user list 153 $sql_ary = array( 154 'SELECT' => 'u.user_id, u.username, u.username_clean, u.user_type, u.user_colour, s.session_id, s.session_time, s.session_page, s.session_ip, s.session_browser, s.session_viewonline, s.session_forum_id', 155 'FROM' => array( 156 USERS_TABLE => 'u', 157 SESSIONS_TABLE => 's', 158 ), 159 'WHERE' => 'u.user_id = s.session_user_id 160 AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) . 161 ((!$show_guests) ? ' AND s.session_user_id <> ' . ANONYMOUS : ''), 162 'ORDER_BY' => $order_by, 163 ); 164 165 /** 166 * Modify the SQL query for getting the user data to display viewonline list 167 * 168 * @event core.viewonline_modify_sql 169 * @var array sql_ary The SQL array 170 * @var bool show_guests Do we display guests in the list 171 * @var int guest_counter Number of guests displayed 172 * @var array forum_data Array with forum data 173 * @since 3.1.0-a1 174 * @changed 3.1.0-a2 Added vars guest_counter and forum_data 175 */ 176 $vars = array('sql_ary', 'show_guests', 'guest_counter', 'forum_data'); 177 extract($phpbb_dispatcher->trigger_event('core.viewonline_modify_sql', compact($vars))); 178 179 $result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary)); 180 181 $prev_id = $prev_ip = $user_list = array(); 182 $logged_visible_online = $logged_hidden_online = $counter = 0; 183 184 while ($row = $db->sql_fetchrow($result)) 185 { 186 if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']])) 187 { 188 $view_online = $s_user_hidden = false; 189 $user_colour = ($row['user_colour']) ? ' style="color:#' . $row['user_colour'] . '" class="username-coloured"' : ''; 190 191 $username_full = ($row['user_type'] != USER_IGNORE) ? get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']) : '<span' . $user_colour . '>' . $row['username'] . '</span>'; 192 193 if (!$row['session_viewonline']) 194 { 195 $view_online = ($auth->acl_get('u_viewonline') || $row['user_id'] === $user->data['user_id']) ? true : false; 196 $logged_hidden_online++; 197 198 $username_full = '<em>' . $username_full . '</em>'; 199 $s_user_hidden = true; 200 } 201 else 202 { 203 $view_online = true; 204 $logged_visible_online++; 205 } 206 207 $prev_id[$row['user_id']] = 1; 208 209 if ($view_online) 210 { 211 $counter++; 212 } 213 214 if (!$view_online || $counter > $start + $config['topics_per_page'] || $counter <= $start) 215 { 216 continue; 217 } 218 } 219 else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']])) 220 { 221 $prev_ip[$row['session_ip']] = 1; 222 $guest_counter++; 223 $counter++; 224 225 if ($counter > $start + $config['topics_per_page'] || $counter <= $start) 226 { 227 continue; 228 } 229 230 $s_user_hidden = false; 231 $username_full = get_username_string('full', $row['user_id'], $user->lang['GUEST']); 232 } 233 else 234 { 235 continue; 236 } 237 238 $on_page = $viewonline_helper->get_user_page($row['session_page']); 239 240 switch ($on_page[1]) 241 { 242 case 'index': 243 $location = $user->lang['INDEX']; 244 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 245 break; 246 247 case $phpbb_adm_relative_path . 'index': 248 $location = $user->lang['ACP']; 249 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 250 break; 251 252 case 'posting': 253 case 'viewforum': 254 case 'viewtopic': 255 $forum_id = $row['session_forum_id']; 256 257 if ($forum_id && $auth->acl_get('f_list', $forum_id)) 258 { 259 $location = ''; 260 $location_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id); 261 262 if ($forum_data[$forum_id]['forum_type'] == FORUM_LINK) 263 { 264 $location = sprintf($user->lang['READING_LINK'], $forum_data[$forum_id]['forum_name']); 265 break; 266 } 267 268 switch ($on_page[1]) 269 { 270 case 'posting': 271 preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page); 272 $posting_mode = (!empty($on_page[1])) ? $on_page[1] : ''; 273 274 switch ($posting_mode) 275 { 276 case 'reply': 277 case 'quote': 278 $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']); 279 break; 280 281 default: 282 $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]['forum_name']); 283 break; 284 } 285 break; 286 287 case 'viewtopic': 288 $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']); 289 break; 290 291 case 'viewforum': 292 $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]['forum_name']); 293 break; 294 } 295 } 296 else 297 { 298 $location = $user->lang['INDEX']; 299 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 300 } 301 break; 302 303 case 'search': 304 $location = $user->lang['SEARCHING_FORUMS']; 305 $location_url = append_sid("{$phpbb_root_path}search.$phpEx"); 306 break; 307 308 case 'faq': 309 $location = $user->lang['VIEWING_FAQ']; 310 $location_url = append_sid("{$phpbb_root_path}faq.$phpEx"); 311 break; 312 313 case 'viewonline': 314 $location = $user->lang['VIEWING_ONLINE']; 315 $location_url = append_sid("{$phpbb_root_path}viewonline.$phpEx"); 316 break; 317 318 case 'memberlist': 319 $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx"); 320 321 if (strpos($row['session_page'], 'mode=viewprofile') !== false) 322 { 323 $location = $user->lang['VIEWING_MEMBER_PROFILE']; 324 } 325 else if (strpos($row['session_page'], 'mode=contactadmin') !== false) 326 { 327 $location = $user->lang['VIEWING_CONTACT_ADMIN']; 328 $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contactadmin'); 329 } 330 else 331 { 332 $location = $user->lang['VIEWING_MEMBERS']; 333 } 334 break; 335 336 case 'mcp': 337 $location = $user->lang['VIEWING_MCP']; 338 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 339 break; 340 341 case 'ucp': 342 $location = $user->lang['VIEWING_UCP']; 343 344 // Grab some common modules 345 $url_params = array( 346 'mode=register' => 'VIEWING_REGISTER', 347 'i=pm&mode=compose' => 'POSTING_PRIVATE_MESSAGE', 348 'i=pm&' => 'VIEWING_PRIVATE_MESSAGES', 349 'i=profile&' => 'CHANGING_PROFILE', 350 'i=prefs&' => 'CHANGING_PREFERENCES', 351 ); 352 353 foreach ($url_params as $param => $lang) 354 { 355 if (strpos($row['session_page'], $param) !== false) 356 { 357 $location = $user->lang[$lang]; 358 break; 359 } 360 } 361 362 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 363 break; 364 365 case 'download/file': 366 $location = $user->lang['DOWNLOADING_FILE']; 367 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 368 break; 369 370 case 'report': 371 $location = $user->lang['REPORTING_POST']; 372 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 373 break; 374 375 default: 376 $location = $user->lang['INDEX']; 377 $location_url = append_sid("{$phpbb_root_path}index.$phpEx"); 378 break; 379 } 380 381 /** 382 * Overwrite the location's name and URL, which are displayed in the list 383 * 384 * @event core.viewonline_overwrite_location 385 * @var array on_page File name and query string 386 * @var array row Array with the users sql row 387 * @var string location Page name to displayed in the list 388 * @var string location_url Page url to displayed in the list 389 * @var array forum_data Array with forum data 390 * @since 3.1.0-a1 391 * @changed 3.1.0-a2 Added var forum_data 392 */ 393 $vars = array('on_page', 'row', 'location', 'location_url', 'forum_data'); 394 extract($phpbb_dispatcher->trigger_event('core.viewonline_overwrite_location', compact($vars))); 395 396 $template_row = array( 397 'USERNAME' => $row['username'], 398 'USERNAME_COLOUR' => $row['user_colour'], 399 'USERNAME_FULL' => $username_full, 400 'LASTUPDATE' => $user->format_date($row['session_time']), 401 'FORUM_LOCATION' => $location, 402 'USER_IP' => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '', 403 'USER_BROWSER' => ($auth->acl_get('a_user')) ? $row['session_browser'] : '', 404 405 'U_USER_PROFILE' => ($row['user_type'] != USER_IGNORE) ? get_username_string('profile', $row['user_id'], '') : '', 406 '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"), 407 'U_WHOIS' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&s=' . $row['session_id']), 408 'U_FORUM_LOCATION' => $location_url, 409 410 'S_USER_HIDDEN' => $s_user_hidden, 411 'S_GUEST' => ($row['user_id'] == ANONYMOUS) ? true : false, 412 'S_USER_TYPE' => $row['user_type'], 413 ); 414 415 /** 416 * Modify viewonline template data before it is displayed in the list 417 * 418 * @event core.viewonline_modify_user_row 419 * @var array on_page File name and query string 420 * @var array row Array with the users sql row 421 * @var array forum_data Array with forum data 422 * @var array template_row Array with template variables for the user row 423 * @since 3.1.0-RC4 424 */ 425 $vars = array('on_page', 'row', 'forum_data', 'template_row'); 426 extract($phpbb_dispatcher->trigger_event('core.viewonline_modify_user_row', compact($vars))); 427 428 $template->assign_block_vars('user_row', $template_row); 429 } 430 $db->sql_freeresult($result); 431 unset($prev_id, $prev_ip); 432 433 $order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; 434 // Grab group details for legend display 435 if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) 436 { 437 $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend 438 FROM ' . GROUPS_TABLE . ' 439 WHERE group_legend > 0 440 ORDER BY ' . $order_legend . ' ASC'; 441 } 442 else 443 { 444 $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type, g.group_legend 445 FROM ' . GROUPS_TABLE . ' g 446 LEFT JOIN ' . USER_GROUP_TABLE . ' ug 447 ON ( 448 g.group_id = ug.group_id 449 AND ug.user_id = ' . $user->data['user_id'] . ' 450 AND ug.user_pending = 0 451 ) 452 WHERE g.group_legend > 0 453 AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ') 454 ORDER BY g.' . $order_legend . ' ASC'; 455 } 456 $result = $db->sql_query($sql); 457 458 $legend = ''; 459 while ($row = $db->sql_fetchrow($result)) 460 { 461 if ($row['group_name'] == 'BOTS') 462 { 463 $legend .= (($legend != '') ? ', ' : '') . '<span style="color:#' . $row['group_colour'] . '">' . $user->lang['G_BOTS'] . '</span>'; 464 } 465 else 466 { 467 $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>'; 468 } 469 } 470 $db->sql_freeresult($result); 471 472 // Refreshing the page every 60 seconds... 473 meta_refresh(60, append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir&start=$start")); 474 475 $start = $pagination->validate_start($start, $config['topics_per_page'], $counter); 476 $base_url = append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir"); 477 $pagination->generate_template_pagination($base_url, 'pagination', 'start', $counter, $config['topics_per_page'], $start); 478 479 // Send data to template 480 $template->assign_vars(array( 481 'TOTAL_REGISTERED_USERS_ONLINE' => $user->lang('REG_USERS_ONLINE', (int) $logged_visible_online, $user->lang('HIDDEN_USERS_ONLINE', (int) $logged_hidden_online)), 482 'TOTAL_GUEST_USERS_ONLINE' => $user->lang('GUEST_USERS_ONLINE', (int) $guest_counter), 483 'LEGEND' => $legend, 484 485 'U_SORT_USERNAME' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=a&sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a') . '&sg=' . ((int) $show_guests)), 486 'U_SORT_UPDATED' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=b&sd=' . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a') . '&sg=' . ((int) $show_guests)), 487 'U_SORT_LOCATION' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=c&sd=' . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a') . '&sg=' . ((int) $show_guests)), 488 489 'U_SWITCH_GUEST_DISPLAY' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sg=' . ((int) !$show_guests)), 490 'L_SWITCH_GUEST_DISPLAY' => ($show_guests) ? $user->lang['HIDE_GUESTS'] : $user->lang['DISPLAY_GUESTS'], 491 'S_SWITCH_GUEST_DISPLAY' => ($config['load_online_guests']) ? true : false, 492 'S_VIEWONLINE' => true, 493 )); 494 495 // We do not need to load the who is online box here. ;) 496 $config['load_online'] = false; 497 498 // Output the page 499 page_header($user->lang['WHO_IS_ONLINE']); 500 501 $template->set_filenames(array( 502 'body' => 'viewonline_body.html') 503 ); 504 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx")); 505 506 page_footer();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Jan 11 00:25:41 2018 | Cross-referenced by PHPXref 0.7.1 |