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

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/acp/acp_prune.php

Merge from no-phpbb-for-you. phpBB is no longer available by default.

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'