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

« back to all changes in this revision

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

Dispatch now generates an index for each plugin type, allowing plugins to
be written which are aware of other plugins, and other plugin types.

All view plugins now subclass from ivle.webapp.base.plugins.ViewPlugin,
as opposed to subclassing BasePlugin directly. This will allow us to
easily re-write console as an OverlayPlugin, and allow future new
plugins types to be created.

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'