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

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/acp/acp_main.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 acp
5
 
* @version $Id: acp_main.php,v 1.52 2007/11/27 15:13:50 kellanved 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
 
if (!defined('IN_PHPBB'))
15
 
{
16
 
        exit;
17
 
}
18
 
 
19
 
/**
20
 
* @package acp
21
 
*/
22
 
class acp_main
23
 
{
24
 
        var $u_action;
25
 
 
26
 
        function main($id, $mode)
27
 
        {
28
 
                global $config, $db, $user, $auth, $template;
29
 
                global $phpbb_root_path, $phpbb_admin_path, $phpEx;
30
 
 
31
 
                // Show restore permissions notice
32
 
                if ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm'))
33
 
                {
34
 
                        $this->tpl_name = 'acp_main';
35
 
                        $this->page_title = 'ACP_MAIN';
36
 
 
37
 
                        $sql = 'SELECT user_id, username, user_colour
38
 
                                FROM ' . USERS_TABLE . '
39
 
                                WHERE user_id = ' . $user->data['user_perm_from'];
40
 
                        $result = $db->sql_query($sql);
41
 
                        $user_row = $db->sql_fetchrow($result);
42
 
                        $db->sql_freeresult($result);
43
 
 
44
 
                        $perm_from = '<strong' . (($user_row['user_colour']) ? ' style="color: #' . $user_row['user_colour'] . '">' : '>');
45
 
                        $perm_from .= ($user_row['user_id'] != ANONYMOUS) ? '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $user_row['user_id']) . '">' : '';
46
 
                        $perm_from .= $user_row['username'];
47
 
                        $perm_from .= ($user_row['user_id'] != ANONYMOUS) ? '</a>' : '';
48
 
                        $perm_from .= '</strong>';
49
 
 
50
 
                        $template->assign_vars(array(
51
 
                                'S_RESTORE_PERMISSIONS'         => true,
52
 
                                'U_RESTORE_PERMISSIONS'         => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm'),
53
 
                                'PERM_FROM'                                     => $perm_from,
54
 
                                'L_PERMISSIONS_TRANSFERRED_EXPLAIN'     => sprintf($user->lang['PERMISSIONS_TRANSFERRED_EXPLAIN'], $perm_from, append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm')),
55
 
                        ));
56
 
 
57
 
                        return;
58
 
                }
59
 
 
60
 
                $action = request_var('action', '');
61
 
 
62
 
                if ($action)
63
 
                {
64
 
                        if (!confirm_box(true))
65
 
                        {
66
 
                                switch ($action)
67
 
                                {
68
 
                                        case 'online':
69
 
                                                $confirm = true;
70
 
                                                $confirm_lang = 'RESET_ONLINE_CONFIRM';
71
 
                                        break;
72
 
                                        case 'stats':
73
 
                                                $confirm = true;
74
 
                                                $confirm_lang = 'RESYNC_STATS_CONFIRM';
75
 
                                        break;
76
 
                                        case 'user':
77
 
                                                $confirm = true;
78
 
                                                $confirm_lang = 'RESYNC_POSTCOUNTS_CONFIRM';
79
 
                                        break;
80
 
                                        case 'date':
81
 
                                                $confirm = true;
82
 
                                                $confirm_lang = 'RESET_DATE_CONFIRM';
83
 
                                        break;
84
 
                                        case 'db_track':
85
 
                                                $confirm = true;
86
 
                                                $confirm_lang = 'RESYNC_POST_MARKING_CONFIRM';
87
 
                                        break;
88
 
                                        case 'purge_cache':
89
 
                                                $confirm = true;
90
 
                                                $confirm_lang = 'PURGE_CACHE_CONFIRM';
91
 
                                        break;
92
 
 
93
 
                                        default:
94
 
                                                $confirm = true;
95
 
                                                $confirm_lang = 'CONFIRM_OPERATION';
96
 
                                }
97
 
 
98
 
                                if ($confirm)
99
 
                                {
100
 
                                        confirm_box(false, $user->lang[$confirm_lang], build_hidden_fields(array(
101
 
                                                'i'                     => $id,
102
 
                                                'mode'          => $mode,
103
 
                                                'action'        => $action,
104
 
                                        )));
105
 
                                }
106
 
                        }
107
 
                        else
108
 
                        {
109
 
                                switch ($action)
110
 
                                {
111
 
                                        case 'online':
112
 
                                                if (!$auth->acl_get('a_board'))
113
 
                                                {
114
 
                                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
115
 
                                                }
116
 
 
117
 
                                                set_config('record_online_users', 1, true);
118
 
                                                set_config('record_online_date', time(), true);
119
 
                                                add_log('admin', 'LOG_RESET_ONLINE');
120
 
                                        break;
121
 
 
122
 
                                        case 'stats':
123
 
                                                if (!$auth->acl_get('a_board'))
124
 
                                                {
125
 
                                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
126
 
                                                }
127
 
 
128
 
                                                $sql = 'SELECT COUNT(post_id) AS stat
129
 
                                                        FROM ' . POSTS_TABLE . '
130
 
                                                        WHERE post_approved = 1';
131
 
                                                $result = $db->sql_query($sql);
132
 
                                                set_config('num_posts', (int) $db->sql_fetchfield('stat'), true);
133
 
                                                $db->sql_freeresult($result);
134
 
 
135
 
                                                $sql = 'SELECT COUNT(topic_id) AS stat
136
 
                                                        FROM ' . TOPICS_TABLE . '
137
 
                                                        WHERE topic_approved = 1';
138
 
                                                $result = $db->sql_query($sql);
139
 
                                                set_config('num_topics', (int) $db->sql_fetchfield('stat'), true);
140
 
                                                $db->sql_freeresult($result);
141
 
 
142
 
                                                $sql = 'SELECT COUNT(user_id) AS stat
143
 
                                                        FROM ' . USERS_TABLE . '
144
 
                                                        WHERE user_type IN (' . USER_NORMAL . ',' . USER_FOUNDER . ')';
145
 
                                                $result = $db->sql_query($sql);
146
 
                                                set_config('num_users', (int) $db->sql_fetchfield('stat'), true);
147
 
                                                $db->sql_freeresult($result);
148
 
 
149
 
                                                $sql = 'SELECT COUNT(attach_id) as stat
150
 
                                                        FROM ' . ATTACHMENTS_TABLE . '
151
 
                                                        WHERE is_orphan = 0';
152
 
                                                $result = $db->sql_query($sql);
153
 
                                                set_config('num_files', (int) $db->sql_fetchfield('stat'), true);
154
 
                                                $db->sql_freeresult($result);
155
 
 
156
 
                                                $sql = 'SELECT SUM(filesize) as stat
157
 
                                                        FROM ' . ATTACHMENTS_TABLE . '
158
 
                                                        WHERE is_orphan = 0';
159
 
                                                $result = $db->sql_query($sql);
160
 
                                                set_config('upload_dir_size', (int) $db->sql_fetchfield('stat'), true);
161
 
                                                $db->sql_freeresult($result);
162
 
                                                
163
 
                                                if (!function_exists('update_last_username'))
164
 
                                                {
165
 
                                                        include($phpbb_root_path . "includes/functions_user.$phpEx");
166
 
                                                }
167
 
                                                update_last_username();
168
 
 
169
 
                                                add_log('admin', 'LOG_RESYNC_STATS');
170
 
                                        break;
171
 
 
172
 
                                        case 'user':
173
 
                                                if (!$auth->acl_get('a_board'))
174
 
                                                {
175
 
                                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
176
 
                                                }
177
 
 
178
 
                                                $sql = 'SELECT COUNT(p.post_id) AS num_posts, u.user_id
179
 
                                                        FROM ' . USERS_TABLE . ' u
180
 
                                                        LEFT JOIN  ' . POSTS_TABLE . ' p ON (u.user_id = p.poster_id AND p.post_postcount = 1)
181
 
                                                        GROUP BY u.user_id';
182
 
                                                $result = $db->sql_query($sql);
183
 
 
184
 
                                                while ($row = $db->sql_fetchrow($result))
185
 
                                                {
186
 
                                                        $db->sql_query('UPDATE ' . USERS_TABLE . " SET user_posts = {$row['num_posts']} WHERE user_id = {$row['user_id']}");
187
 
                                                }
188
 
                                                $db->sql_freeresult($result);
189
 
 
190
 
                                                add_log('admin', 'LOG_RESYNC_POSTCOUNTS');
191
 
 
192
 
                                        break;
193
 
                        
194
 
                                        case 'date':
195
 
                                                if (!$auth->acl_get('a_board'))
196
 
                                                {
197
 
                                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
198
 
                                                }
199
 
 
200
 
                                                set_config('board_startdate', time() - 1);
201
 
                                                add_log('admin', 'LOG_RESET_DATE');
202
 
                                        break;
203
 
                                
204
 
                                        case 'db_track':
205
 
                                                switch ($db->sql_layer)
206
 
                                                {
207
 
                                                        case 'sqlite':
208
 
                                                        case 'firebird':
209
 
                                                                $db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE);
210
 
                                                        break;
211
 
 
212
 
                                                        default:
213
 
                                                                $db->sql_query('TRUNCATE TABLE ' . TOPICS_POSTED_TABLE);
214
 
                                                        break;
215
 
                                                }
216
 
 
217
 
                                                // This can get really nasty... therefore we only do the last six months
218
 
                                                $get_from_time = time() - (6 * 4 * 7 * 24 * 60 * 60);
219
 
 
220
 
                                                // Select forum ids, do not include categories
221
 
                                                $sql = 'SELECT forum_id
222
 
                                                        FROM ' . FORUMS_TABLE . '
223
 
                                                        WHERE forum_type <> ' . FORUM_CAT;
224
 
                                                $result = $db->sql_query($sql);
225
 
                                
226
 
                                                $forum_ids = array();
227
 
                                                while ($row = $db->sql_fetchrow($result))
228
 
                                                {
229
 
                                                        $forum_ids[] = $row['forum_id'];
230
 
                                                }
231
 
                                                $db->sql_freeresult($result);
232
 
 
233
 
                                                // Any global announcements? ;)
234
 
                                                $forum_ids[] = 0;
235
 
 
236
 
                                                // Now go through the forums and get us some topics...
237
 
                                                foreach ($forum_ids as $forum_id)
238
 
                                                {
239
 
                                                        $sql = 'SELECT p.poster_id, p.topic_id
240
 
                                                                FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t
241
 
                                                                WHERE t.forum_id = ' . $forum_id . '
242
 
                                                                        AND t.topic_moved_id = 0
243
 
                                                                        AND t.topic_last_post_time > ' . $get_from_time . '
244
 
                                                                        AND t.topic_id = p.topic_id
245
 
                                                                        AND p.poster_id <> ' . ANONYMOUS . '
246
 
                                                                GROUP BY p.poster_id, p.topic_id';
247
 
                                                        $result = $db->sql_query($sql);
248
 
 
249
 
                                                        $posted = array();
250
 
                                                        while ($row = $db->sql_fetchrow($result))
251
 
                                                        {
252
 
                                                                $posted[$row['poster_id']][] = $row['topic_id'];
253
 
                                                        }
254
 
                                                        $db->sql_freeresult($result);
255
 
 
256
 
                                                        $sql_ary = array();
257
 
                                                        foreach ($posted as $user_id => $topic_row)
258
 
                                                        {
259
 
                                                                foreach ($topic_row as $topic_id)
260
 
                                                                {
261
 
                                                                        $sql_ary[] = array(
262
 
                                                                                'user_id'               => (int) $user_id,
263
 
                                                                                'topic_id'              => (int) $topic_id,
264
 
                                                                                'topic_posted'  => 1,
265
 
                                                                        );
266
 
                                                                }
267
 
                                                        }
268
 
                                                        unset($posted);
269
 
 
270
 
                                                        if (sizeof($sql_ary))
271
 
                                                        {
272
 
                                                                $db->sql_multi_insert(TOPICS_POSTED_TABLE, $sql_ary);
273
 
                                                        }
274
 
                                                }
275
 
                        
276
 
                                                add_log('admin', 'LOG_RESYNC_POST_MARKING');
277
 
                                        break;
278
 
 
279
 
                                        case 'purge_cache':
280
 
                                                if ((int) $user->data['user_type'] !== USER_FOUNDER)
281
 
                                                {
282
 
                                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
283
 
                                                }
284
 
 
285
 
                                                global $cache;
286
 
                                                $cache->purge();
287
 
 
288
 
                                                // Clear permissions
289
 
                                                $auth->acl_clear_prefetch();
290
 
                                                cache_moderators();
291
 
 
292
 
                                                add_log('admin', 'LOG_PURGE_CACHE');
293
 
                                        break;
294
 
                                }
295
 
                        }
296
 
                }
297
 
 
298
 
                // Get forum statistics
299
 
                $total_posts = $config['num_posts'];
300
 
                $total_topics = $config['num_topics'];
301
 
                $total_users = $config['num_users'];
302
 
                $total_files = $config['num_files'];
303
 
 
304
 
                $start_date = $user->format_date($config['board_startdate']);
305
 
 
306
 
                $boarddays = (time() - $config['board_startdate']) / 86400;
307
 
 
308
 
                $posts_per_day = sprintf('%.2f', $total_posts / $boarddays);
309
 
                $topics_per_day = sprintf('%.2f', $total_topics / $boarddays);
310
 
                $users_per_day = sprintf('%.2f', $total_users / $boarddays);
311
 
                $files_per_day = sprintf('%.2f', $total_files / $boarddays);
312
 
 
313
 
                $upload_dir_size = ($config['upload_dir_size'] >= 1048576) ? sprintf('%.2f ' . $user->lang['MB'], ($config['upload_dir_size'] / 1048576)) : (($config['upload_dir_size'] >= 1024) ? sprintf('%.2f ' . $user->lang['KB'], ($config['upload_dir_size'] / 1024)) : sprintf('%.2f ' . $user->lang['BYTES'], $config['upload_dir_size']));
314
 
 
315
 
                $avatar_dir_size = 0;
316
 
 
317
 
                if ($avatar_dir = @opendir($phpbb_root_path . $config['avatar_path']))
318
 
                {
319
 
                        while (($file = readdir($avatar_dir)) !== false)
320
 
                        {
321
 
                                if ($file[0] != '.' && $file != 'CVS' && strpos($file, 'index.') === false)
322
 
                                {
323
 
                                        $avatar_dir_size += filesize($phpbb_root_path . $config['avatar_path'] . '/' . $file);
324
 
                                }
325
 
                        }
326
 
                        closedir($avatar_dir);
327
 
 
328
 
                        // This bit of code translates the avatar directory size into human readable format
329
 
                        // Borrowed the code from the PHP.net annoted manual, origanally written by:
330
 
                        // Jesse (jesse@jess.on.ca)
331
 
                        $avatar_dir_size = ($avatar_dir_size >= 1048576) ? sprintf('%.2f ' . $user->lang['MB'], ($avatar_dir_size / 1048576)) : (($avatar_dir_size >= 1024) ? sprintf('%.2f ' . $user->lang['KB'], ($avatar_dir_size / 1024)) : sprintf('%.2f ' . $user->lang['BYTES'], $avatar_dir_size));
332
 
                }
333
 
                else
334
 
                {
335
 
                        // Couldn't open Avatar dir.
336
 
                        $avatar_dir_size = $user->lang['NOT_AVAILABLE'];
337
 
                }
338
 
 
339
 
                if ($posts_per_day > $total_posts)
340
 
                {
341
 
                        $posts_per_day = $total_posts;
342
 
                }
343
 
 
344
 
                if ($topics_per_day > $total_topics)
345
 
                {
346
 
                        $topics_per_day = $total_topics;
347
 
                }
348
 
 
349
 
                if ($users_per_day > $total_users)
350
 
                {
351
 
                        $users_per_day = $total_users;
352
 
                }
353
 
 
354
 
                if ($files_per_day > $total_files)
355
 
                {
356
 
                        $files_per_day = $total_files;
357
 
                }
358
 
 
359
 
                if ($config['allow_attachments'] || $config['allow_pm_attach'])
360
 
                {
361
 
                        $sql = 'SELECT COUNT(attach_id) AS total_orphan
362
 
                                FROM ' . ATTACHMENTS_TABLE . '
363
 
                                WHERE is_orphan = 1
364
 
                                        AND filetime < ' . (time() - 3*60*60);
365
 
                        $result = $db->sql_query($sql);
366
 
                        $total_orphan = (int) $db->sql_fetchfield('total_orphan');
367
 
                        $db->sql_freeresult($result);
368
 
                }
369
 
                else
370
 
                {
371
 
                        $total_orphan = false;
372
 
                }
373
 
 
374
 
                $dbsize = get_database_size();
375
 
 
376
 
                $template->assign_vars(array(
377
 
                        'TOTAL_POSTS'           => $total_posts,
378
 
                        'POSTS_PER_DAY'         => $posts_per_day,
379
 
                        'TOTAL_TOPICS'          => $total_topics,
380
 
                        'TOPICS_PER_DAY'        => $topics_per_day,
381
 
                        'TOTAL_USERS'           => $total_users,
382
 
                        'USERS_PER_DAY'         => $users_per_day,
383
 
                        'TOTAL_FILES'           => $total_files,
384
 
                        'FILES_PER_DAY'         => $files_per_day,
385
 
                        'START_DATE'            => $start_date,
386
 
                        'AVATAR_DIR_SIZE'       => $avatar_dir_size,
387
 
                        'DBSIZE'                        => $dbsize,
388
 
                        'UPLOAD_DIR_SIZE'       => $upload_dir_size,
389
 
                        'TOTAL_ORPHAN'          => $total_orphan,
390
 
                        'S_TOTAL_ORPHAN'        => ($total_orphan === false) ? false : true,
391
 
                        'GZIP_COMPRESSION'      => ($config['gzip_compress']) ? $user->lang['ON'] : $user->lang['OFF'],
392
 
                        'DATABASE_INFO'         => $db->sql_server_info(),
393
 
                        'BOARD_VERSION'         => $config['version'],
394
 
 
395
 
                        'U_ACTION'                      => append_sid("{$phpbb_admin_path}index.$phpEx"),
396
 
                        'U_ADMIN_LOG'           => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=logs&amp;mode=admin'),
397
 
                        'U_INACTIVE_USERS'      => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=inactive&amp;mode=list'),
398
 
 
399
 
                        'S_ACTION_OPTIONS'      => ($auth->acl_get('a_board')) ? true : false,
400
 
                        'S_FOUNDER'                     => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
401
 
                        )
402
 
                );
403
 
 
404
 
                $log_data = array();
405
 
                $log_count = 0;
406
 
 
407
 
                if ($auth->acl_get('a_viewlogs'))
408
 
                {
409
 
                        view_log('admin', $log_data, $log_count, 5);
410
 
 
411
 
                        foreach ($log_data as $row)
412
 
                        {
413
 
                                $template->assign_block_vars('log', array(
414
 
                                        'USERNAME'      => $row['username_full'],
415
 
                                        'IP'            => $row['ip'],
416
 
                                        'DATE'          => $user->format_date($row['time']),
417
 
                                        'ACTION'        => $row['action'])
418
 
                                );
419
 
                        }
420
 
                }
421
 
 
422
 
                if ($auth->acl_get('a_user'))
423
 
                {
424
 
                        $inactive = array();
425
 
                        $inactive_count = 0;
426
 
 
427
 
                        view_inactive_users($inactive, $inactive_count, 10);
428
 
 
429
 
                        foreach ($inactive as $row)
430
 
                        {
431
 
                                $template->assign_block_vars('inactive', array(
432
 
                                        'INACTIVE_DATE' => $user->format_date($row['user_inactive_time']),
433
 
                                        'JOINED'                => $user->format_date($row['user_regdate']),
434
 
                                        'LAST_VISIT'    => (!$row['user_lastvisit']) ? ' - ' : $user->format_date($row['user_lastvisit']),
435
 
                                        'REASON'                => $row['inactive_reason'],
436
 
                                        'USER_ID'               => $row['user_id'],
437
 
                                        'USERNAME'              => $row['username'],
438
 
                                        'U_USER_ADMIN'  => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;mode=overview&amp;u={$row['user_id']}"))
439
 
                                );
440
 
                        }
441
 
 
442
 
                        $option_ary = array('activate' => 'ACTIVATE', 'delete' => 'DELETE');
443
 
                        if ($config['email_enable'])
444
 
                        {
445
 
                                $option_ary += array('remind' => 'REMIND');
446
 
                        }
447
 
 
448
 
                        $template->assign_vars(array(
449
 
                                'S_INACTIVE_USERS'              => true,
450
 
                                'S_INACTIVE_OPTIONS'    => build_select($option_ary))
451
 
                        );
452
 
                }
453
 
 
454
 
                // Warn if install is still present
455
 
                if (file_exists($phpbb_root_path . 'install'))
456
 
                {
457
 
                        $template->assign_var('S_REMOVE_INSTALL', true);
458
 
                }
459
 
 
460
 
                $this->tpl_name = 'acp_main';
461
 
                $this->page_title = 'ACP_MAIN';
462
 
        }
463
 
}
464
 
 
465
 
?>
 
 
b'\\ No newline at end of file'