~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/viewonline.php

  • Committer: William Grant
  • Date: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package phpBB3
5
 
* @version $Id: viewonline.php,v 1.126 2007/10/05 14:30:07 acydburn Exp $
6
 
* @copyright (c) 2005 phpBB Group
7
 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
 
*
9
 
*/
10
 
 
11
 
/**
12
 
* @ignore
13
 
*/
14
 
define('IN_PHPBB', true);
15
 
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
16
 
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17
 
include($phpbb_root_path . 'common.' . $phpEx);
18
 
 
19
 
// Start session management
20
 
$user->session_begin();
21
 
$auth->acl($user->data);
22
 
$user->setup('memberlist');
23
 
 
24
 
// Get and set some variables
25
 
$mode           = request_var('mode', '');
26
 
$session_id     = request_var('s', '');
27
 
$start          = request_var('start', 0);
28
 
$sort_key       = request_var('sk', 'b');
29
 
$sort_dir       = request_var('sd', 'd');
30
 
$show_guests= ($config['load_online_guests']) ? request_var('sg', 0) : 0;
31
 
 
32
 
// Can this user view profiles/memberlist?
33
 
if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel'))
34
 
{
35
 
        if ($user->data['user_id'] != ANONYMOUS)
36
 
        {
37
 
                trigger_error('NO_VIEW_USERS');
38
 
        }
39
 
 
40
 
        login_box('', $user->lang['LOGIN_EXPLAIN_VIEWONLINE']);
41
 
}
42
 
 
43
 
$sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_JOINED'], 'c' => $user->lang['SORT_LOCATION']);
44
 
$sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
45
 
 
46
 
// Sorting and order
47
 
if (!isset($sort_key_text[$sort_key]))
48
 
{
49
 
        $sort_key = 'b';
50
 
}
51
 
 
52
 
$order_by = $sort_key_sql[$sort_key] . ' ' . (($sort_dir == 'a') ? 'ASC' : 'DESC');
53
 
 
54
 
// Whois requested
55
 
if ($mode == 'whois' && $auth->acl_get('a_') && $session_id)
56
 
{
57
 
        include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
58
 
 
59
 
        $sql = 'SELECT u.user_id, u.username, u.user_type, s.session_ip
60
 
                FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . " s
61
 
                WHERE s.session_id = '" . $db->sql_escape($session_id) . "'
62
 
                        AND     u.user_id = s.session_user_id";
63
 
        $result = $db->sql_query($sql);
64
 
 
65
 
        if ($row = $db->sql_fetchrow($result))
66
 
        {
67
 
                $template->assign_var('WHOIS', user_ipwhois($row['session_ip']));
68
 
        }
69
 
        $db->sql_freeresult($result);
70
 
 
71
 
        // Output the page
72
 
        page_header($user->lang['WHO_IS_ONLINE']);
73
 
 
74
 
        $template->set_filenames(array(
75
 
                'body' => 'viewonline_whois.html')
76
 
        );
77
 
        make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
78
 
 
79
 
        page_footer();
80
 
}
81
 
 
82
 
// Forum info
83
 
$sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id
84
 
        FROM ' . FORUMS_TABLE . '
85
 
        ORDER BY left_id ASC';
86
 
$result = $db->sql_query($sql, 600);
87
 
 
88
 
$forum_data = array();
89
 
while ($row = $db->sql_fetchrow($result))
90
 
{
91
 
        $forum_data[$row['forum_id']] = $row;
92
 
}
93
 
$db->sql_freeresult($result);
94
 
 
95
 
$guest_counter = 0;
96
 
 
97
 
// Get number of online guests (if we do not display them)
98
 
if (!$show_guests)
99
 
{
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
 
?>
 
 
b'\\ No newline at end of file'