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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

viewonline.php

Zuletzt modifiziert: 02.04.2025, 15:01 - Dateigröße: 16.95 KiB


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) ? '&amp;s=' . $row['session_id'] : '') . "&amp;sg=$show_guests&amp;start=$start&amp;sk=$sort_key&amp;sd=$sort_dir"),
423          'U_WHOIS'            => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&amp;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&amp;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&amp;sk=$sort_key&amp;sd=$sort_dir&amp;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&amp;sk=$sort_key&amp;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&amp;sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;sg=' . ((int) $show_guests)),
511      'U_SORT_UPDATED'        => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=b&amp;sd=' . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;sg=' . ((int) $show_guests)),
512      'U_SORT_LOCATION'        => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sk=c&amp;sd=' . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;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