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