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

443 by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0
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
?>