Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

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: 13.59 KiB


 001  <?php
 002  /**
 003  *
 004  * @package phpBB3
 005  * @version $Id$
 006  * @copyright (c) 2005 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**
 012  * @ignore
 013  */
 014  define('IN_PHPBB', true);
 015  $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
 016  $phpEx = substr(strrchr(__FILE__, '.'), 1);
 017  include($phpbb_root_path . 'common.' . $phpEx);
 018   
 019  // Start session management
 020  $user->session_begin();
 021  $auth->acl($user->data);
 022  $user->setup('memberlist');
 023   
 024  // Get and set some variables
 025  $mode        = request_var('mode', '');
 026  $session_id    = request_var('s', '');
 027  $start        = request_var('start', 0);
 028  $sort_key    = request_var('sk', 'b');
 029  $sort_dir    = request_var('sd', 'd');
 030  $show_guests= ($config['load_online_guests']) ? request_var('sg', 0) : 0;
 031   
 032  // Can this user view profiles/memberlist?
 033  if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
 034  {
 035      if ($user->data['user_id'] != ANONYMOUS)
 036      {
 037          trigger_error('NO_VIEW_USERS');
 038      }
 039   
 040      login_box('', $user->lang['LOGIN_EXPLAIN_VIEWONLINE']);
 041  }
 042   
 043  $sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']);
 044  $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
 045   
 046  // Sorting and order
 047  if (!isset($sort_key_text[$sort_key]))
 048  {
 049      $sort_key = 'b';
 050  }
 051   
 052  $order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC');
 053   
 054  // Whois requested
 055  if ($mode == 'whois' && $auth->acl_get('a_') && $session_id)
 056  {
 057      include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
 058   
 059      $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip
 060          FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s
 061          WHERE s.session_id = '" . $db->sql_escape($session_id) . "'
 062              AND    u.user_id = s.session_user_id";
 063      $result = $db->sql_query($sql);
 064   
 065      if ($row = $db->sql_fetchrow($result))
 066      {
 067          $template->assign_var('WHOIS', user_ipwhois($row['session_ip']));
 068      }
 069      $db->sql_freeresult($result);
 070   
 071      // Output the page
 072      page_header($user->lang['WHO_IS_ONLINE']);
 073   
 074      $template->set_filenames(array(
 075          'body' => 'viewonline_whois.html')
 076      );
 077      make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
 078   
 079      page_footer();
 080  }
 081   
 082  // Forum info
 083  $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id
 084      FROM ' . FORUMS_TABLE . '
 085      ORDER BY left_id ASC';
 086  $result = $db->sql_query($sql, 600);
 087   
 088  $forum_data = array();
 089  while ($row = $db->sql_fetchrow($result))
 090  {
 091      $forum_data[$row['forum_id']] = $row;
 092  }
 093  $db->sql_freeresult($result);
 094   
 095  $guest_counter = 0;
 096   
 097  // Get number of online guests (if we do not display them)
 098  if (!$show_guests)
 099  {
 100      switch ($db->sql_layer)
 101      {
 102          case 'sqlite':
 103              $sql = 'SELECT COUNT(session_ip) as num_guests
 104                  FROM (
 105                      SELECT DISTINCT session_ip
 106                          FROM ' . SESSIONS_TABLE . '
 107                          WHERE session_user_id = ' . ANONYMOUS . '
 108                              AND session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
 109                  ')';
 110          break;
 111   
 112          default:
 113              $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests
 114                  FROM ' . SESSIONS_TABLE . '
 115                  WHERE session_user_id = ' . ANONYMOUS . '
 116                      AND session_time >= ' . (time() - ($config['load_online_time'] * 60));
 117          break;
 118      }
 119      $result = $db->sql_query($sql);
 120      $guest_counter = (int) $db->sql_fetchfield('num_guests');
 121      $db->sql_freeresult($result);
 122  }
 123   
 124  // Get user list
 125  $sql = '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
 126      FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s
 127      WHERE u.user_id = s.session_user_id
 128          AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
 129          ((!$show_guests) ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . '
 130      ORDER BY ' . $order_by;
 131  $result = $db->sql_query($sql);
 132   
 133  $prev_id = $prev_ip = $user_list = array();
 134  $logged_visible_online = $logged_hidden_online = $counter = 0;
 135   
 136  while ($row = $db->sql_fetchrow($result))
 137  {
 138      if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']]))
 139      {
 140          $view_online = $s_user_hidden = false;
 141          $user_colour = ($row['user_colour']) ? ' style="color:#' . $row['user_colour'] . '" class="username-coloured"' : '';
 142          
 143          $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>';
 144   
 145          if (!$row['session_viewonline'])
 146          {
 147              $view_online = ($auth->acl_get('u_viewonline')) ? true : false;
 148              $logged_hidden_online++;
 149   
 150              $username_full = '<em>' . $username_full . '</em>';
 151              $s_user_hidden = true;
 152          }
 153          else
 154          {
 155              $view_online = true;
 156              $logged_visible_online++;
 157          }
 158   
 159          $prev_id[$row['user_id']] = 1;
 160   
 161          if ($view_online)
 162          {
 163              $counter++;
 164          }
 165   
 166          if (!$view_online || $counter > $start + $config['topics_per_page'] || $counter <= $start)
 167          {
 168              continue;
 169          }
 170      }
 171      else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']]))
 172      {
 173          $prev_ip[$row['session_ip']] = 1;
 174          $guest_counter++;
 175          $counter++;
 176   
 177          if ($counter > $start + $config['topics_per_page'] || $counter <= $start)
 178          {
 179              continue;
 180          }
 181   
 182          $s_user_hidden = false;
 183          $username_full = get_username_string('full', $row['user_id'], $user->lang['GUEST']);
 184      }
 185      else
 186      {
 187          continue;
 188      }
 189   
 190      preg_match('#^([a-z/]+)#i', $row['session_page'], $on_page);
 191      if (!sizeof($on_page))
 192      {
 193          $on_page[1] = '';
 194      }
 195   
 196      switch ($on_page[1])
 197      {
 198          case 'index':
 199              $location = $user->lang['INDEX'];
 200              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 201          break;
 202   
 203          case 'adm/index':
 204              $location = $user->lang['ACP'];
 205              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 206          break;
 207   
 208          case 'posting':
 209          case 'viewforum':
 210          case 'viewtopic':
 211              preg_match('#_f_=([0-9]+)x#i', $row['session_page'], $forum_id);
 212              $forum_id = (sizeof($forum_id)) ? (int) $forum_id[1] : 0;
 213   
 214              if ($forum_id && $auth->acl_get('f_list', $forum_id))
 215              {
 216                  $location = '';
 217                  $location_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
 218   
 219                  if ($forum_data[$forum_id]['forum_type'] == FORUM_LINK)
 220                  {
 221                      $location = sprintf($user->lang['READING_LINK'], $forum_data[$forum_id]['forum_name']);
 222                      break;
 223                  }
 224   
 225                  switch ($on_page[1])
 226                  {
 227                      case 'posting':
 228                          preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page);
 229   
 230                          switch ($on_page[1])
 231                          {
 232                              case 'reply':
 233                              case 'quote':
 234                                  $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
 235                              break;
 236   
 237                              default:
 238                                  $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
 239                              break;
 240                          }
 241                      break;
 242   
 243                      case 'viewtopic':
 244                          $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
 245                      break;
 246   
 247                      case 'viewforum':
 248                          $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]['forum_name']);
 249                      break;
 250                  }
 251              }
 252              else
 253              {
 254                  $location = $user->lang['INDEX'];
 255                  $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 256              }
 257          break;
 258   
 259          case 'search':
 260              $location = $user->lang['SEARCHING_FORUMS'];
 261              $location_url = append_sid("{$phpbb_root_path}search.$phpEx");
 262          break;
 263   
 264          case 'faq':
 265              $location = $user->lang['VIEWING_FAQ'];
 266              $location_url = append_sid("{$phpbb_root_path}faq.$phpEx");
 267          break;
 268   
 269          case 'viewonline':
 270              $location = $user->lang['VIEWING_ONLINE'];
 271              $location_url = append_sid("{$phpbb_root_path}viewonline.$phpEx");
 272          break;
 273   
 274          case 'memberlist':
 275              $location = (strpos($row['session_page'], 'mode=viewprofile') !== false) ? $user->lang['VIEWING_MEMBER_PROFILE'] : $user->lang['VIEWING_MEMBERS'];
 276              $location_url = append_sid("{$phpbb_root_path}memberlist.$phpEx");
 277          break;
 278   
 279          case 'mcp':
 280              $location = $user->lang['VIEWING_MCP'];
 281              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 282          break;
 283   
 284          case 'ucp':
 285              $location = $user->lang['VIEWING_UCP'];
 286   
 287              // Grab some common modules
 288              $url_params = array(
 289                  'mode=register'        => 'VIEWING_REGISTER',
 290                  'i=pm&mode=compose'    => 'POSTING_PRIVATE_MESSAGE',
 291                  'i=pm&'                => 'VIEWING_PRIVATE_MESSAGES',
 292                  'i=profile&'        => 'CHANGING_PROFILE',
 293                  'i=prefs&'            => 'CHANGING_PREFERENCES',
 294              );
 295   
 296              foreach ($url_params as $param => $lang)
 297              {
 298                  if (strpos($row['session_page'], $param) !== false)
 299                  {
 300                      $location = $user->lang[$lang];
 301                      break;
 302                  }
 303              }
 304   
 305              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 306          break;
 307   
 308          case 'download':
 309              $location = $user->lang['DOWNLOADING_FILE'];
 310              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 311          break;
 312   
 313          case 'report':
 314              $location = $user->lang['REPORTING_POST'];
 315              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 316          break;
 317   
 318          default:
 319              $location = $user->lang['INDEX'];
 320              $location_url = append_sid("{$phpbb_root_path}index.$phpEx");
 321          break;
 322      }
 323   
 324      $template->assign_block_vars('user_row', array(
 325          'USERNAME'             => $row['username'],
 326          'USERNAME_COLOUR'    => $row['user_colour'],
 327          'USERNAME_FULL'        => $username_full,
 328          'LASTUPDATE'        => $user->format_date($row['session_time']),
 329          'FORUM_LOCATION'    => $location,
 330          'USER_IP'            => ($auth->acl_get('a_')) ? (($mode == 'lookup' && $session_id == $row['session_id']) ? gethostbyaddr($row['session_ip']) : $row['session_ip']) : '',
 331          'USER_BROWSER'        => ($auth->acl_get('a_user')) ? $row['session_browser'] : '',
 332   
 333          'U_USER_PROFILE'    => ($row['user_type'] != USER_IGNORE) ? get_username_string('profile', $row['user_id'], '') : '',
 334          '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"),
 335          'U_WHOIS'            => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'mode=whois&amp;s=' . $row['session_id']),
 336          'U_FORUM_LOCATION'    => $location_url,
 337          
 338          'S_USER_HIDDEN'        => $s_user_hidden,
 339          'S_GUEST'            => ($row['user_id'] == ANONYMOUS) ? true : false,
 340          'S_USER_TYPE'        => $row['user_type'],
 341      ));
 342  }
 343  $db->sql_freeresult($result);
 344  unset($prev_id, $prev_ip);
 345   
 346  // Generate reg/hidden/guest online text
 347  $vars_online = array(
 348      'REG'    => array('logged_visible_online', 'l_r_user_s'),
 349      'HIDDEN'=> array('logged_hidden_online', 'l_h_user_s'),
 350      'GUEST'    => array('guest_counter', 'l_g_user_s')
 351  );
 352   
 353  foreach ($vars_online as $l_prefix => $var_ary)
 354  {
 355      switch ($$var_ary[0])
 356      {
 357          case 0:
 358              $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ZERO_ONLINE'];
 359          break;
 360   
 361          case 1:
 362              $$var_ary[1] = $user->lang[$l_prefix . '_USER_ONLINE'];
 363          break;
 364   
 365          default:
 366              $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ONLINE'];
 367          break;
 368      }
 369  }
 370  unset($vars_online);
 371   
 372  $pagination = generate_pagination(append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&amp;sk=$sort_key&amp;sd=$sort_dir"), $counter, $config['topics_per_page'], $start);
 373   
 374  // Grab group details for legend display
 375  if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
 376  {
 377      $sql = 'SELECT group_id, group_name, group_colour, group_type
 378          FROM ' . GROUPS_TABLE . '
 379          WHERE group_legend = 1
 380          ORDER BY group_name ASC';
 381  }
 382  else
 383  {
 384      $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
 385          FROM ' . GROUPS_TABLE . ' g
 386          LEFT JOIN ' . USER_GROUP_TABLE . ' ug
 387              ON (
 388                  g.group_id = ug.group_id
 389                  AND ug.user_id = ' . $user->data['user_id'] . '
 390                  AND ug.user_pending = 0
 391              )
 392          WHERE g.group_legend = 1
 393              AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')
 394          ORDER BY g.group_name ASC';
 395  }
 396  $result = $db->sql_query($sql);
 397   
 398  $legend = '';
 399  while ($row = $db->sql_fetchrow($result))
 400  {
 401      if ($row['group_name'] == 'BOTS')
 402      {
 403          $legend .= (($legend != '') ? ', ' : '') . '<span style="color:#' . $row['group_colour'] . '">' . $user->lang['G_BOTS'] . '</span>';
 404      }
 405      else
 406      {
 407          $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>';
 408      }
 409  }
 410  $db->sql_freeresult($result);
 411   
 412  // Refreshing the page every 60 seconds...
 413  meta_refresh(60, append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&amp;sk=$sort_key&amp;sd=$sort_dir&amp;start=$start"));
 414   
 415  // Send data to template
 416  $template->assign_vars(array(
 417      'TOTAL_REGISTERED_USERS_ONLINE'    => sprintf($l_r_user_s, $logged_visible_online) . sprintf($l_h_user_s, $logged_hidden_online),
 418      'TOTAL_GUEST_USERS_ONLINE'        => sprintf($l_g_user_s, $guest_counter),
 419      'LEGEND'                        => $legend,
 420      'PAGINATION'                    => $pagination,
 421      'PAGE_NUMBER'                    => on_page($counter, $config['topics_per_page'], $start),
 422   
 423      '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)),
 424      '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)),
 425      '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)),
 426   
 427      'U_SWITCH_GUEST_DISPLAY'    => append_sid("{$phpbb_root_path}viewonline.$phpEx", 'sg=' . ((int) !$show_guests)),
 428      'L_SWITCH_GUEST_DISPLAY'    => ($show_guests) ? $user->lang['HIDE_GUESTS'] : $user->lang['DISPLAY_GUESTS'],
 429      'S_SWITCH_GUEST_DISPLAY'    => ($config['load_online_guests']) ? true : false)
 430  );
 431   
 432  // We do not need to load the who is online box here. ;)
 433  $config['load_online'] = false;
 434   
 435  // Output the page
 436  page_header($user->lang['WHO_IS_ONLINE']);
 437   
 438  $template->set_filenames(array(
 439      'body' => 'viewonline_body.html')
 440  );
 441  make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
 442   
 443  page_footer();
 444   
 445  ?>