Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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