Verzeichnisstruktur phpBB-3.1.0
- Veröffentlicht
- 27.10.2014
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_var('mode', '');
029 $session_id = request_var('s', '');
030 $start = request_var('start', 0);
031 $sort_key = request_var('sk', 'b');
032 $sort_dir = request_var('sd', 'd');
033 $show_guests = ($config['load_online_guests']) ? request_var('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 trigger_error('NO_VIEW_USERS');
041 }
042
043 login_box('', $user->lang['LOGIN_EXPLAIN_VIEWONLINE']);
044 }
045
046 $pagination = $phpbb_container->get('pagination');
047 $viewonline_helper = $phpbb_container->get('viewonline_helper');
048
049 $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']);
050 $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
051
052 // Sorting and order
053 if (!isset($sort_key_text[$sort_key]))
054 {
055 $sort_key = 'b';
056 }
057
058 $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC');
059
060 // Whois requested
061 if ($mode == 'whois' && $auth->acl_get('a_') && $session_id)
062 {
063 include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
064
065 $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip
066 FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s
067 WHERE s.session_id = '" . $db->sql_escape($session_id) . "'
068 AND u.user_id = s.session_user_id";
069 $result = $db->sql_query($sql);
070
071 if ($row = $db->sql_fetchrow($result))
072 {
073 $template->assign_var('WHOIS', user_ipwhois($row['session_ip']));
074 }
075 $db->sql_freeresult($result);
076
077 // Output the page
078 page_header($user->lang['WHO_IS_ONLINE']);
079
080 $template->set_filenames(array(
081 'body' => 'viewonline_whois.html')
082 );
083 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
084
085 page_footer();
086 }
087
088 // Forum info
089 $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id
090 FROM ' . FORUMS_TABLE . '
091 ORDER BY left_id ASC';
092 $result = $db->sql_query($sql, 600);
093
094 $forum_data = array();
095 while ($row = $db->sql_fetchrow($result))
096 {
097 $forum_data[$row['forum_id']] = $row;
098 }
099 $db->sql_freeresult($result);
100
101 $guest_counter = 0;
102
103 // Get number of online guests (if we do not display them)
104 if (!$show_guests)
105 {
106 switch ($db->get_sql_layer())
107 {
108 case 'sqlite':
109 case 'sqlite3':
110 $sql = 'SELECT COUNT(session_ip) as num_guests
111 FROM (
112 SELECT DISTINCT session_ip
113 FROM ' . SESSIONS_TABLE . '
114 WHERE session_user_id = ' . ANONYMOUS . '
115 AND session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
116 ')';
117 break;
118
119 default:
120 $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests
121 FROM ' . SESSIONS_TABLE . '
122 WHERE session_user_id = ' . ANONYMOUS . '
123 AND session_time >= ' . (time() - ($config['load_online_time'] * 60));
124 break;
125 }
126 $result = $db->sql_query($sql);
127 $guest_counter = (int) $db->sql_fetchfield('num_guests');
128 $db->sql_freeresult($result);
129 }
130
131 // Get user list
132 $sql_ary = array(
133 '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',
134 'FROM' => array(
135 USERS_TABLE => 'u',
136 SESSIONS_TABLE => 's',
137 ),
138 'WHERE' => 'u.user_id = s.session_user_id
139 AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
140 ((!$show_guests) ? ' AND s.session_user_id <> ' . ANONYMOUS : ''),
141 'ORDER_BY' => $order_by,
142 );
143
144 /**
145 * Modify the SQL query for getting the user data to display viewonline list
146 *
147 * @event core.viewonline_modify_sql
148 * @var array sql_ary The SQL array
149 * @var bool show_guests Do we display guests in the list
150 * @var int guest_counter Number of guests displayed
151 * @var array forum_data Array with forum data
152 * @since 3.1.0-a1
153 * @change 3.1.0-a2 Added vars guest_counter and forum_data
154 */
155 $vars = array('sql_ary', 'show_guests', 'guest_counter', 'forum_data');
156 extract($phpbb_dispatcher->trigger_event('core.viewonline_modify_sql', compact($vars)));
157
158 $result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary));
159
160 $prev_id = $prev_ip = $user_list = array();
161 $logged_visible_online = $logged_hidden_online = $counter = 0;
162
163 while ($row = $db->sql_fetchrow($result))
164 {
165 if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']]))
166 {
167 $view_online = $s_user_hidden = false;
168 $user_colour = ($row['user_colour']) ? ' style="color:#' . $row['user_colour'] . '" class="username-coloured"' : '';
169
170 $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>';
171
172 if (!$row['session_viewonline'])
173 {
174 $view_online = ($auth->acl_get('u_viewonline')) ? true : false;
175 $logged_hidden_online++;
176
177 $username_full = '<em>' . $username_full . '</em>';
178 $s_user_hidden = true;
179 }
180 else
181 {
182 $view_online = true;
183 $logged_visible_online++;
184 }
185
186 $prev_id[$row['user_id']] = 1;
187
188 if ($view_online)
189 {
190 $counter++;
191 }
192
193 if (!$view_online || $counter > $start + $config['topics_per_page'] || $counter <= $start)
194 {
195 continue;
196 }
197 }
198 else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']]))
199 {
200 $prev_ip[$row['session_ip']] = 1;
201 $guest_counter++;
202 $counter++;
203
204 if ($counter > $start + $config['topics_per_page'] || $counter <= $start)
205 {
206 continue;
207 }
208
209 $s_user_hidden = false;
210 $username_full = get_username_string('full', $row['user_id'], $user->lang['GUEST']);
211 }
212 else
213 {
214 continue;
215 }
216
217 $on_page = $viewonline_helper->get_user_page($row['session_page']);
218
219 switch ($on_page[1])
220 {
221 case 'index':
222 $location = $user->lang['INDEX'];
223 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
224 break;
225
226 case $phpbb_adm_relative_path . 'index':
227 $location = $user->lang['ACP'];
228 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
229 break;
230
231 case 'posting':
232 case 'viewforum':
233 case 'viewtopic':
234 $forum_id = $row['session_forum_id'];
235
236 if ($forum_id && $auth->acl_get('f_list', $forum_id))
237 {
238 $location = '';
239 $location_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
240
241 if ($forum_data[$forum_id]['forum_type'] == FORUM_LINK)
242 {
243 $location = sprintf($user->lang['READING_LINK'], $forum_data[$forum_id]['forum_name']);
244 break;
245 }
246
247 switch ($on_page[1])
248 {
249 case 'posting':
250 preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page);
251 $posting_mode = (!empty($on_page[1])) ? $on_page[1] : '';
252
253 switch ($posting_mode)
254 {
255 case 'reply':
256 case 'quote':
257 $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
258 break;
259
260 default:
261 $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
262 break;
263 }
264 break;
265
266 case 'viewtopic':
267 $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
268 break;
269
270 case 'viewforum':
271 $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]['forum_name']);
272 break;
273 }
274 }
275 else
276 {
277 $location = $user->lang['INDEX'];
278 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
279 }
280 break;
281
282 case 'search':
283 $location = $user->lang['SEARCHING_FORUMS'];
284 $location_url = append_sid("{$phpbb_root_path}search.$phpEx");
285 break;
286
287 case 'faq':
288 $location = $user->lang['VIEWING_FAQ'];
289 $location_url = append_sid("{$phpbb_root_path}faq.$phpEx");
290 break;
291
292 case 'viewonline':
293 $location = $user->lang['VIEWING_ONLINE'];
294 $location_url = append_sid("{$phpbb_root_path}viewonline.$phpEx");
295 break;
296
297 case 'memberlist':
298 $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx");
299
300 if (strpos($row['session_page'], 'mode=viewprofile') !== false)
301 {
302 $location = $user->lang['VIEWING_MEMBER_PROFILE'];
303 }
304 else if (strpos($row['session_page'], 'mode=contactadmin') !== false)
305 {
306 $location = $user->lang['VIEWING_CONTACT_ADMIN'];
307 $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=contactadmin');
308 }
309 else
310 {
311 $location = $user->lang['VIEWING_MEMBERS'];
312 }
313 break;
314
315 case 'mcp':
316 $location = $user->lang['VIEWING_MCP'];
317 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
318 break;
319
320 case 'ucp':
321 $location = $user->lang['VIEWING_UCP'];
322
323 // Grab some common modules
324 $url_params = array(
325 'mode=register' => 'VIEWING_REGISTER',
326 'i=pm&mode=compose' => 'POSTING_PRIVATE_MESSAGE',
327 'i=pm&' => 'VIEWING_PRIVATE_MESSAGES',
328 'i=profile&' => 'CHANGING_PROFILE',
329 'i=prefs&' => 'CHANGING_PREFERENCES',
330 );
331
332 foreach ($url_params as $param => $lang)
333 {
334 if (strpos($row['session_page'], $param) !== false)
335 {
336 $location = $user->lang[$lang];
337 break;
338 }
339 }
340
341 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
342 break;
343
344 case 'download/file':
345 $location = $user->lang['DOWNLOADING_FILE'];
346 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
347 break;
348
349 case 'report':
350 $location = $user->lang['REPORTING_POST'];
351 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
352 break;
353
354 default:
355 $location = $user->lang['INDEX'];
356 $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
357 break;
358 }
359
360 /**
361 * Overwrite the location's name and URL, which are displayed in the list
362 *
363 * @event core.viewonline_overwrite_location
364 * @var array on_page File name and query string
365 * @var array row Array with the users sql row
366 * @var string location Page name to displayed in the list
367 * @var string location_url Page url to displayed in the list
368 * @var array forum_data Array with forum data
369 * @since 3.1.0-a1
370 * @change 3.1.0-a2 Added var forum_data
371 */
372 $vars = array('on_page', 'row', 'location', 'location_url', 'forum_data');
373 extract($phpbb_dispatcher->trigger_event('core.viewonline_overwrite_location', compact($vars)));
374
375 $template_row = array(
376 'USERNAME' => $row['username'],
377 'USERNAME_COLOUR' => $row['user_colour'],
378 'USERNAME_FULL' => $username_full,
379 'LASTUPDATE' => $user->format_date($row['session_time']),
380 'FORUM_LOCATION' => $location,
381 'USER_IP' => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '',
382 'USER_BROWSER' => ($auth->acl_get('a_user')) ? $row['session_browser'] : '',
383
384 'U_USER_PROFILE' => ($row['user_type'] != USER_IGNORE) ? get_username_string('profile', $row['user_id'], '') : '',
385 '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"),
386 'U_WHOIS' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&s=' . $row['session_id']),
387 'U_FORUM_LOCATION' => $location_url,
388
389 'S_USER_HIDDEN' => $s_user_hidden,
390 'S_GUEST' => ($row['user_id'] == ANONYMOUS) ? true : false,
391 'S_USER_TYPE' => $row['user_type'],
392 );
393
394 /**
395 * Modify viewonline template data before it is displayed in the list
396 *
397 * @event core.viewonline_modify_user_row
398 * @var array on_page File name and query string
399 * @var array row Array with the users sql row
400 * @var array forum_data Array with forum data
401 * @var array template_row Array with template variables for the user row
402 * @since 3.1.0-RC4
403 */
404 $vars = array('on_page', 'row', 'forum_data', 'template_row');
405 extract($phpbb_dispatcher->trigger_event('core.viewonline_modify_user_row', compact($vars)));
406
407 $template->assign_block_vars('user_row', $template_row);
408 }
409 $db->sql_freeresult($result);
410 unset($prev_id, $prev_ip);
411
412 $order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend';
413 // Grab group details for legend display
414 if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
415 {
416 $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend
417 FROM ' . GROUPS_TABLE . '
418 WHERE group_legend > 0
419 ORDER BY ' . $order_legend . ' ASC';
420 }
421 else
422 {
423 $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type, g.group_legend
424 FROM ' . GROUPS_TABLE . ' g
425 LEFT JOIN ' . USER_GROUP_TABLE . ' ug
426 ON (
427 g.group_id = ug.group_id
428 AND ug.user_id = ' . $user->data['user_id'] . '
429 AND ug.user_pending = 0
430 )
431 WHERE g.group_legend > 0
432 AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')
433 ORDER BY g.' . $order_legend . ' ASC';
434 }
435 $result = $db->sql_query($sql);
436
437 $legend = '';
438 while ($row = $db->sql_fetchrow($result))
439 {
440 if ($row['group_name'] == 'BOTS')
441 {
442 $legend .= (($legend != '') ? ', ' : '') . '<span style="color:#' . $row['group_colour'] . '">' . $user->lang['G_BOTS'] . '</span>';
443 }
444 else
445 {
446 $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>';
447 }
448 }
449 $db->sql_freeresult($result);
450
451 // Refreshing the page every 60 seconds...
452 meta_refresh(60, append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir&start=$start"));
453
454 $start = $pagination->validate_start($start, $config['topics_per_page'], $counter);
455 $base_url = append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir");
456 $pagination->generate_template_pagination($base_url, 'pagination', 'start', $counter, $config['topics_per_page'], $start);
457
458 // Send data to template
459 $template->assign_vars(array(
460 'TOTAL_REGISTERED_USERS_ONLINE' => $user->lang('REG_USERS_ONLINE', (int) $logged_visible_online, $user->lang('HIDDEN_USERS_ONLINE', (int) $logged_hidden_online)),
461 'TOTAL_GUEST_USERS_ONLINE' => $user->lang('GUEST_USERS_ONLINE', (int) $guest_counter),
462 'LEGEND' => $legend,
463
464 '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)),
465 '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)),
466 '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)),
467
468 'U_SWITCH_GUEST_DISPLAY' => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sg=' . ((int) !$show_guests)),
469 'L_SWITCH_GUEST_DISPLAY' => ($show_guests) ? $user->lang['HIDE_GUESTS'] : $user->lang['DISPLAY_GUESTS'],
470 'S_SWITCH_GUEST_DISPLAY' => ($config['load_online_guests']) ? true : false,
471 'S_VIEWONLINE' => true,
472 ));
473
474 // We do not need to load the who is online box here. ;)
475 $config['load_online'] = false;
476
477 // Output the page
478 page_header($user->lang['WHO_IS_ONLINE']);
479
480 $template->set_filenames(array(
481 'body' => 'viewonline_body.html')
482 );
483 make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
484
485 page_footer();
486