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