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.
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: 09.10.2024, 12:50 - Dateigröße: 15.56 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_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) ? '&amp;s=' . $row['session_id'] : '') . "&amp;sg=$show_guests&amp;start=$start&amp;sk=$sort_key&amp;sd=$sort_dir"),
 386          'U_WHOIS'            => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&amp;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&amp;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&amp;sk=$sort_key&amp;sd=$sort_dir&amp;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&amp;sk=$sort_key&amp;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&amp;sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a') . '&amp;sg=' . ((int) $show_guests)),
 465      '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)),
 466      '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)),
 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