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

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/acp/acp_prune.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_prune.php,v 1.29 2007/10/05 14:36:32 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
 
if (!defined('IN_PHPBB'))
15
 
{
16
 
        exit;
17
 
}
18
 
 
19
 
/**
20
 
* @package acp
21
 
*/
22
 
class acp_prune
23
 
{
24
 
        var $u_action;
25
 
 
26
 
        function main($id, $mode)
27
 
        {
28
 
                global $user, $phpEx, $phpbb_admin_path, $phpbb_root_path;
29
 
 
30
 
                $user->add_lang('acp/prune');
31
 
                include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
32
 
 
33
 
                switch ($mode)
34
 
                {
35
 
                        case 'forums':
36
 
                                $this->tpl_name = 'acp_prune_forums';
37
 
                                $this->page_title = 'ACP_PRUNE_FORUMS';
38
 
                                $this->prune_forums($id, $mode);
39
 
                        break;
40
 
 
41
 
                        case 'users':
42
 
                                $this->tpl_name = 'acp_prune_users';
43
 
                                $this->page_title = 'ACP_PRUNE_USERS';
44
 
                                $this->prune_users($id, $mode);
45
 
                        break;
46
 
                }
47
 
        }
48
 
 
49
 
        /**
50
 
        * Prune forums
51
 
        */
52
 
        function prune_forums($id, $mode)
53
 
        {
54
 
                global $db, $user, $auth, $template, $cache;
55
 
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
56
 
 
57
 
                $all_forums = request_var('all_forums', 0);
58
 
                $forum_id = request_var('f', array(0));
59
 
                $submit = (isset($_POST['submit'])) ? true : false;
60
 
 
61
 
                if ($all_forums)
62
 
                {
63
 
                        $sql = 'SELECT forum_id
64
 
                                FROM ' . FORUMS_TABLE . '
65
 
                                ORDER BY left_id';
66
 
                        $result = $db->sql_query($sql);
67
 
 
68
 
                        $forum_id = array();
69
 
                        while ($row = $db->sql_fetchrow($result))
70
 
                        {
71
 
                                $forum_id[] = $row['forum_id'];
72
 
                        }
73
 
                        $db->sql_freeresult($result);
74
 
                }
75
 
 
76
 
                if ($submit)
77
 
                {
78
 
                        if (confirm_box(true))
79
 
                        {
80
 
                                $prune_posted = request_var('prune_days', 0);
81
 
                                $prune_viewed = request_var('prune_vieweddays', 0);
82
 
                                $prune_all = (!$prune_posted && !$prune_viewed) ? true : false;
83
 
                
84
 
                                $prune_flags = 0;
85
 
                                $prune_flags += (request_var('prune_old_polls', 0)) ? 2 : 0;
86
 
                                $prune_flags += (request_var('prune_announce', 0)) ? 4 : 0;
87
 
                                $prune_flags += (request_var('prune_sticky', 0)) ? 8 : 0;
88
 
 
89
 
                                // Convert days to seconds for timestamp functions...
90
 
                                $prunedate_posted = time() - ($prune_posted * 86400);
91
 
                                $prunedate_viewed = time() - ($prune_viewed * 86400);
92
 
 
93
 
                                $template->assign_vars(array(
94
 
                                        'S_PRUNED'              => true)
95
 
                                );
96
 
 
97
 
                                $sql_forum = (sizeof($forum_id)) ? ' AND ' . $db->sql_in_set('forum_id', $forum_id) : '';
98
 
 
99
 
                                // Get a list of forum's or the data for the forum that we are pruning.
100
 
                                $sql = 'SELECT forum_id, forum_name
101
 
                                        FROM ' . FORUMS_TABLE . '
102
 
                                        WHERE forum_type = ' . FORUM_POST . "
103
 
                                                $sql_forum
104
 
                                        ORDER BY left_id ASC";
105
 
                                $result = $db->sql_query($sql);
106
 
 
107
 
                                if ($row = $db->sql_fetchrow($result))
108
 
                                {
109
 
                                        $prune_ids = array();
110
 
                                        $p_result['topics'] = 0;
111
 
                                        $p_result['posts'] = 0;
112
 
                                        $log_data = '';
113
 
                        
114
 
                                        do
115
 
                                        {
116
 
                                                if (!$auth->acl_get('f_list', $row['forum_id']))
117
 
                                                {
118
 
                                                        continue;
119
 
                                                }
120
 
 
121
 
                                                if ($prune_all)
122
 
                                                {
123
 
                                                        $p_result = prune($row['forum_id'], 'posted', time(), $prune_flags, false);
124
 
                                                }
125
 
                                                else
126
 
                                                {
127
 
                                                        if ($prune_posted)
128
 
                                                        {
129
 
                                                                $return = prune($row['forum_id'], 'posted', $prunedate_posted, $prune_flags, false);
130
 
                                                                $p_result['topics'] += $return['topics'];
131
 
                                                                $p_result['posts'] += $return['posts'];
132
 
                                                        }
133
 
                        
134
 
                                                        if ($prune_viewed)
135
 
                                                        {
136
 
                                                                $return = prune($row['forum_id'], 'viewed', $prunedate_viewed, $prune_flags, false);
137
 
                                                                $p_result['topics'] += $return['topics'];
138
 
                                                                $p_result['posts'] += $return['posts'];
139
 
                                                        }
140
 
                                                }
141
 
 
142
 
                                                $prune_ids[] = $row['forum_id'];
143
 
 
144
 
                                                $template->assign_block_vars('pruned', array(
145
 
                                                        'FORUM_NAME'    => $row['forum_name'],
146
 
                                                        'NUM_TOPICS'    => $p_result['topics'],
147
 
                                                        'NUM_POSTS'             => $p_result['posts'])
148
 
                                                );
149
 
                
150
 
                                                $log_data .= (($log_data != '') ? ', ' : '') . $row['forum_name'];
151
 
                                        }
152
 
                                        while ($row = $db->sql_fetchrow($result));
153
 
                
154
 
                                        // Sync all pruned forums at once
155
 
                                        sync('forum', 'forum_id', $prune_ids, true, true);
156
 
                                        add_log('admin', 'LOG_PRUNE', $log_data);
157
 
                                }
158
 
                                $db->sql_freeresult($result);
159
 
 
160
 
                                return;
161
 
                        }
162
 
                        else
163
 
                        {
164
 
                                confirm_box(false, $user->lang['PRUNE_FORUM_CONFIRM'], build_hidden_fields(array(
165
 
                                        'i'                             => $id,
166
 
                                        'mode'                  => $mode,
167
 
                                        'submit'                => 1,
168
 
                                        'all_forums'    => $all_forums,
169
 
                                        'f'                             => $forum_id,
170
 
 
171
 
                                        'prune_days'            => request_var('prune_days', 0),
172
 
                                        'prune_vieweddays'      => request_var('prune_vieweddays', 0),
173
 
                                        'prune_old_polls'       => request_var('prune_old_polls', 0),
174
 
                                        'prune_announce'        => request_var('prune_announce', 0),
175
 
                                        'prune_sticky'          => request_var('prune_sticky', 0),
176
 
                                )));
177
 
                        }
178
 
                }
179
 
 
180
 
                // If they haven't selected a forum for pruning yet then
181
 
                // display a select box to use for pruning.
182
 
                if (!sizeof($forum_id))
183
 
                {
184
 
                        $template->assign_vars(array(
185
 
                                'U_ACTION'                      => $this->u_action,
186
 
                                'S_SELECT_FORUM'        => true,
187
 
                                'S_FORUM_OPTIONS'       => make_forum_select(false, false, false))
188
 
                        );
189
 
                }
190
 
                else
191
 
                {
192
 
                        $sql = 'SELECT forum_id, forum_name
193
 
                                FROM ' . FORUMS_TABLE . '
194
 
                                WHERE ' . $db->sql_in_set('forum_id', $forum_id);
195
 
                        $result = $db->sql_query($sql);
196
 
                        $row = $db->sql_fetchrow($result);
197
 
 
198
 
                        if (!$row)
199
 
                        {
200
 
                                $db->sql_freeresult($result);
201
 
                                trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action), E_USER_WARNING);
202
 
                        }
203
 
 
204
 
                        $forum_list = $s_hidden_fields = '';
205
 
                        do
206
 
                        {
207
 
                                $forum_list .= (($forum_list != '') ? ', ' : '') . '<b>' . $row['forum_name'] . '</b>';
208
 
                                $s_hidden_fields .= '<input type="hidden" name="f[]" value="' . $row['forum_id'] . '" />';
209
 
                        }
210
 
                        while ($row = $db->sql_fetchrow($result));
211
 
 
212
 
                        $db->sql_freeresult($result);
213
 
 
214
 
                        $l_selected_forums = (sizeof($forum_id) == 1) ? 'SELECTED_FORUM' : 'SELECTED_FORUMS';
215
 
 
216
 
                        $template->assign_vars(array(
217
 
                                'L_SELECTED_FORUMS'             => $user->lang[$l_selected_forums],
218
 
                                'U_ACTION'                              => $this->u_action,
219
 
                                'U_BACK'                                => $this->u_action,
220
 
                                'FORUM_LIST'                    => $forum_list,
221
 
                                'S_HIDDEN_FIELDS'               => $s_hidden_fields)
222
 
                        );
223
 
                }
224
 
        }
225
 
 
226
 
        /**
227
 
        * Prune users
228
 
        */
229
 
        function prune_users($id, $mode)
230
 
        {
231
 
                global $db, $user, $auth, $template, $cache;
232
 
                global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
233
 
 
234
 
                $user->add_lang('memberlist');
235
 
 
236
 
                $prune = (isset($_POST['prune'])) ? true : false;
237
 
 
238
 
                if ($prune)
239
 
                {
240
 
                        $action = request_var('action', 'deactivate');
241
 
                        $deleteposts = request_var('deleteposts', 0);
242
 
 
243
 
                        if (confirm_box(true))
244
 
                        {
245
 
                                $user_ids = $usernames = array();
246
 
                                $this->get_prune_users($user_ids, $usernames);
247
 
 
248
 
                                if (sizeof($user_ids))
249
 
                                {
250
 
                                        if ($action == 'deactivate')
251
 
                                        {
252
 
                                                user_active_flip('deactivate', $user_ids);
253
 
                                                $l_log = 'LOG_PRUNE_USER_DEAC';
254
 
                                        }
255
 
                                        else if ($action == 'delete')
256
 
                                        {
257
 
                                                if ($deleteposts)
258
 
                                                {
259
 
                                                        foreach ($user_ids as $user_id)
260
 
                                                        {
261
 
                                                                user_delete('remove', $user_id);
262
 
                                                        }
263
 
                                                        
264
 
                                                        $l_log = 'LOG_PRUNE_USER_DEL_DEL';
265
 
                                                }
266
 
                                                else
267
 
                                                {
268
 
                                                        foreach ($user_ids as $user_id)
269
 
                                                        {
270
 
                                                                user_delete('retain', $user_id, $usernames[$user_id]);
271
 
                                                        }
272
 
 
273
 
                                                        $l_log = 'LOG_PRUNE_USER_DEL_ANON';
274
 
                                                }
275
 
                                        }
276
 
 
277
 
                                        add_log('admin', $l_log, implode(', ', $usernames));
278
 
                                        $msg = $user->lang['USER_' . strtoupper($action) . '_SUCCESS'];
279
 
                                }
280
 
                                else
281
 
                                {
282
 
                                        $msg = $user->lang['USER_PRUNE_FAILURE'];
283
 
                                }
284
 
 
285
 
                                trigger_error($msg . adm_back_link($this->u_action));
286
 
                        }
287
 
                        else
288
 
                        {
289
 
                                // We list the users which will be pruned...
290
 
                                $user_ids = $usernames = array();
291
 
                                $this->get_prune_users($user_ids, $usernames);
292
 
 
293
 
                                if (!sizeof($user_ids))
294
 
                                {
295
 
                                        trigger_error($user->lang['USER_PRUNE_FAILURE'] . adm_back_link($this->u_action), E_USER_WARNING);
296
 
                                }
297
 
 
298
 
                                // Assign to template
299
 
                                foreach ($user_ids as $user_id)
300
 
                                {
301
 
                                        $template->assign_block_vars('users', array(
302
 
                                                'USERNAME'                      => $usernames[$user_id],
303
 
                                                'U_PROFILE'                     => append_sid($phpbb_root_path . 'memberlist.' . $phpEx, 'mode=viewprofile&amp;u=' . $user_id),
304
 
                                                'U_USER_ADMIN'          => ($auth->acl_get('a_user')) ? append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=overview&amp;u=' . $user_id, true, $user->session_id) : '',
305
 
                                        ));
306
 
                                }
307
 
 
308
 
                                $template->assign_vars(array(
309
 
                                        'S_DEACTIVATE'          => ($action == 'deactivate') ? true : false,
310
 
                                        'S_DELETE'                      => ($action == 'delete') ? true : false,
311
 
                                ));
312
 
 
313
 
                                confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
314
 
                                        'i'                             => $id,
315
 
                                        'mode'                  => $mode,
316
 
                                        'prune'                 => 1,
317
 
 
318
 
                                        'users'                 => request_var('users', '', true),
319
 
                                        'username'              => request_var('username', '', true),
320
 
                                        'email'                 => request_var('email', ''),
321
 
                                        'joined_select' => request_var('joined_select', ''),
322
 
                                        'joined'                => request_var('joined', ''),
323
 
                                        'active_select' => request_var('active_select', ''),
324
 
                                        'active'                => request_var('active', ''),
325
 
                                        'count_select'  => request_var('count_select', ''),
326
 
                                        'count'                 => request_var('count', ''),
327
 
                                        'deleteposts'   => request_var('deleteposts', 0),
328
 
 
329
 
                                        'action'                => request_var('action', ''),
330
 
                                )), 'confirm_body_prune.html');
331
 
                        }
332
 
                }
333
 
 
334
 
                $find_count = array('lt' => $user->lang['LESS_THAN'], 'eq' => $user->lang['EQUAL_TO'], 'gt' => $user->lang['MORE_THAN']);
335
 
                $s_find_count = '';
336
 
 
337
 
                foreach ($find_count as $key => $value)
338
 
                {
339
 
                        $selected = ($key == 'eq') ? ' selected="selected"' : '';
340
 
                        $s_find_count .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
341
 
                }
342
 
 
343
 
                $find_time = array('lt' => $user->lang['BEFORE'], 'gt' => $user->lang['AFTER']);
344
 
                $s_find_join_time = '';
345
 
                foreach ($find_time as $key => $value)
346
 
                {
347
 
                        $s_find_join_time .= '<option value="' . $key . '">' . $value . '</option>';
348
 
                }
349
 
                
350
 
                $s_find_active_time = '';
351
 
                foreach ($find_time as $key => $value)
352
 
                {
353
 
                        $s_find_active_time .= '<option value="' . $key . '">' . $value . '</option>';
354
 
                }
355
 
 
356
 
                $template->assign_vars(array(
357
 
                        'U_ACTION'                      => $this->u_action,
358
 
                        'S_JOINED_OPTIONS'      => $s_find_join_time,
359
 
                        'S_ACTIVE_OPTIONS'      => $s_find_active_time,
360
 
                        'S_COUNT_OPTIONS'       => $s_find_count,
361
 
                        'U_FIND_USERNAME'       => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_prune&amp;field=users'),
362
 
                ));
363
 
        }
364
 
 
365
 
        /**
366
 
        * Get user_ids/usernames from those being pruned
367
 
        */
368
 
        function get_prune_users(&$user_ids, &$usernames)
369
 
        {
370
 
                global $user, $db;
371
 
 
372
 
                $users = request_var('users', '', true);
373
 
                
374
 
                if ($users)
375
 
                {
376
 
                        $users = explode("\n", $users);
377
 
                        $where_sql = ' AND ' . $db->sql_in_set('username_clean', array_map('utf8_clean_string', $users));
378
 
                }
379
 
                else
380
 
                {
381
 
                        $username = request_var('username', '', true);
382
 
                        $email = request_var('email', '');
383
 
 
384
 
                        $joined_select = request_var('joined_select', 'lt');
385
 
                        $active_select = request_var('active_select', 'lt');
386
 
                        $count_select = request_var('count_select', 'eq');
387
 
                        $joined = request_var('joined', '');
388
 
                        $active = request_var('active', '');
389
 
 
390
 
                        $active = ($active) ? explode('-', $active) : array();
391
 
                        $joined = ($joined) ? explode('-', $joined) : array();
392
 
 
393
 
                        if ((sizeof($active) && sizeof($active) != 3) || (sizeof($joined) && sizeof($joined) != 3))
394
 
                        {
395
 
                                trigger_error($user->lang['WRONG_ACTIVE_JOINED_DATE'] . adm_back_link($this->u_action), E_USER_WARNING);
396
 
                        }
397
 
 
398
 
                        $count = request_var('count', '');
399
 
 
400
 
                        $key_match = array('lt' => '<', 'gt' => '>', 'eq' => '=');
401
 
                        $sort_by_types = array('username', 'user_email', 'user_posts', 'user_regdate', 'user_lastvisit');
402
 
 
403
 
                        $where_sql = '';
404
 
                        $where_sql .= ($username) ? ' AND username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($username))) : '';
405
 
                        $where_sql .= ($email) ? ' AND user_email ' . $db->sql_like_expression(str_replace('*', $db->any_char, $email)) . ' ' : '';
406
 
                        $where_sql .= (sizeof($joined)) ? " AND user_regdate " . $key_match[$joined_select] . ' ' . gmmktime(0, 0, 0, (int) $joined[1], (int) $joined[2], (int) $joined[0]) : '';
407
 
                        $where_sql .= ($count !== '') ? " AND user_posts " . $key_match[$count_select] . ' ' . (int) $count . ' ' : '';
408
 
                        $where_sql .= (sizeof($active)) ? " AND user_lastvisit " . $key_match[$active_select] . " " . gmmktime(0, 0, 0, (int) $active[1], (int) $active[2], (int) $active[0]) : '';
409
 
                }
410
 
 
411
 
                // Protect the admin, do not prune if no options are given...
412
 
                if (!$where_sql)
413
 
                {
414
 
                        return;
415
 
                }
416
 
 
417
 
                // Get bot ids
418
 
                $sql = 'SELECT user_id
419
 
                        FROM ' . BOTS_TABLE;
420
 
                $result = $db->sql_query($sql);
421
 
 
422
 
                $bot_ids = array();
423
 
                while ($row = $db->sql_fetchrow($result))
424
 
                {
425
 
                        $bot_ids[] = $row['user_id'];
426
 
                }
427
 
                $db->sql_freeresult($result);
428
 
 
429
 
                // Do not prune founder members
430
 
                $sql = 'SELECT user_id, username
431
 
                        FROM ' . USERS_TABLE . '
432
 
                        WHERE user_id <> ' . ANONYMOUS . '
433
 
                                AND user_type <> ' . USER_FOUNDER . "
434
 
                        $where_sql";
435
 
                $result = $db->sql_query($sql);
436
 
 
437
 
                $where_sql = '';
438
 
                $user_ids = $usernames = array();
439
 
 
440
 
                while ($row = $db->sql_fetchrow($result))
441
 
                {
442
 
                        // Do not prune bots and the user currently pruning.
443
 
                        if ($row['user_id'] != $user->data['user_id'] && !in_array($row['user_id'], $bot_ids))
444
 
                        {
445
 
                                $user_ids[] = $row['user_id'];
446
 
                                $usernames[$row['user_id']] = $row['username'];
447
 
                        }
448
 
                }
449
 
                $db->sql_freeresult($result);
450
 
        }
451
 
}
452
 
 
453
 
?>
 
 
b'\\ No newline at end of file'