Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
viewonline.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 /**
015 * @ignore
016 */
017 define('IN_PHPBB', true);
018 $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
019 $phpEx = substr(strrchr(__FILE__, '.'), 1);
020 include($phpbb_root_path . 'common.' . $phpEx);
021
022 // Start session management
023 $user->session_begin();
024 $auth->acl($user->data);
025 $user->setup('memberlist');
026
027 // Get and set some variables
028 $mode = $request->variable('mode', '');
029 $session_id = $request->variable('s', '');
030 $start = $request->variable('start', 0);
031 $sort_key = $request->variable('sk', 'b');
032 $sort_dir = $request->variable('sd', 'd');
033 $show_guests = ($config['load_online_guests']) ? $request->variable('sg', 0) : 0;
034
035 // Can this user view profiles/memberlist?
036 if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
037 {
038 if ($user->data['user_id'] != ANONYMOUS)
039 {
040 send_status_line(403, 'Forbidden');
041 trigger_error('NO_VIEW_USERS');
042 }
043
044 login_box('', $user->lang['LOGIN_EXPLAIN_VIEWONLINE']);
045 }
046
047 /* @var $pagination \phpbb\pagination */
048 $pagination = $phpbb_container->get('pagination');
049
050 /* @var $viewonline_helper \phpbb\viewonline_helper */
051 $viewonline_helper = $phpbb_container->get('viewonline_helper');
052
053 $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']);
054 $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
055
056 // Sorting and order
057 if (!isset($sort_key_text[$sort_key]))
058 {
059 $sort_key = 'b';
060 }
061
062 $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC');
063
064 // Whois requested
065 if ($mode == 'whois' && $auth->acl_get('a_') && $session_id)
066 {
067 if (!function_exists('user_get_id_name'))
068 {
069 include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
070 }
071
072 $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip
073 FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s
074 WHERE s.session_id = '" . $db->sql_escape($session_id) . "'
075 AND u.user_id = s.session_user_id";
076 $result = $db->sql_query($sql);
077
078 if ($row = $db->sql_fetchrow($result))
079 {
080 $template->assign_var('WHOIS', user_ipwhois($row['session_ip']));
081 }
082 $db->sql_freeresult($result);
083
084 // Output the page
085 page_header($user->lang['WHO_IS_ONLINE']);
086
087 $template->set_filenames(array(
088 'body' => 'viewonline_whois.html')
089 );
090 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
091
092 page_footer();
093 }
094
095 $user->update_session_infos();
096
097 // Forum info
098 $sql_ary = array(
099 '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();
532