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  ?>