phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_ban.php

History | View | Annotate | Download (7 kB)

1
<?php
2
/**
3
*
4
* @package acp
5
* @version $Id: acp_ban.php 11531 2011-11-13 20:15:13Z git-gate $
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_ban
23
{
24
        var $u_action;
25
26
        function main($id, $mode)
27
        {
28
                global $config, $db, $user, $auth, $template, $cache;
29
                global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
30
31
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
32
33
                $bansubmit        = (isset($_POST['bansubmit'])) ? true : false;
34
                $unbansubmit = (isset($_POST['unbansubmit'])) ? true : false;
35
                $current_time = time();
36
37
                $user->add_lang(array('acp/ban', 'acp/users'));
38
                $this->tpl_name = 'acp_ban';
39
                $form_key = 'acp_ban';
40
                add_form_key($form_key);
41
42
                if (($bansubmit || $unbansubmit) && !check_form_key($form_key))
43
                {
44
                        trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
45
                }
46
47
                // Ban submitted?
48
                if ($bansubmit)
49
                {
50
                        // Grab the list of entries
51
                        $ban                                = utf8_normalize_nfc(request_var('ban', '', true));
52
                        $ban_len                        = request_var('banlength', 0);
53
                        $ban_len_other                = request_var('banlengthother', '');
54
                        $ban_exclude                = request_var('banexclude', 0);
55
                        $ban_reason                        = utf8_normalize_nfc(request_var('banreason', '', true));
56
                        $ban_give_reason        = utf8_normalize_nfc(request_var('bangivereason', '', true));
57
58
                        if ($ban)
59
                        {
60
                                user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reason, $ban_give_reason);
61
62
                                trigger_error($user->lang['BAN_UPDATE_SUCCESSFUL'] . adm_back_link($this->u_action));
63
                        }
64
                }
65
                else if ($unbansubmit)
66
                {
67
                        $ban = request_var('unban', array(''));
68
69
                        if ($ban)
70
                        {
71
                                user_unban($mode, $ban);
72
73
                                trigger_error($user->lang['BAN_UPDATE_SUCCESSFUL'] . adm_back_link($this->u_action));
74
                        }
75
                }
76
77
                // Define language vars
78
                $this->page_title = $user->lang[strtoupper($mode) . '_BAN'];
79
80
                $l_ban_explain = $user->lang[strtoupper($mode) . '_BAN_EXPLAIN'];
81
                $l_ban_exclude_explain = $user->lang[strtoupper($mode) . '_BAN_EXCLUDE_EXPLAIN'];
82
                $l_unban_title = $user->lang[strtoupper($mode) . '_UNBAN'];
83
                $l_unban_explain = $user->lang[strtoupper($mode) . '_UNBAN_EXPLAIN'];
84
                $l_no_ban_cell = $user->lang[strtoupper($mode) . '_NO_BANNED'];
85
86
                switch ($mode)
87
                {
88
                        case 'user':
89
                                $l_ban_cell = $user->lang['USERNAME'];
90
                        break;
91
92
                        case 'ip':
93
                                $l_ban_cell = $user->lang['IP_HOSTNAME'];
94
                        break;
95
96
                        case 'email':
97
                                $l_ban_cell = $user->lang['EMAIL_ADDRESS'];
98
                        break;
99
                }
100
101
                $this->display_ban_options($mode);
102
103
                $template->assign_vars(array(
104
                        'L_TITLE'                                => $this->page_title,
105
                        'L_EXPLAIN'                                => $l_ban_explain,
106
                        'L_UNBAN_TITLE'                        => $l_unban_title,
107
                        'L_UNBAN_EXPLAIN'                => $l_unban_explain,
108
                        'L_BAN_CELL'                        => $l_ban_cell,
109
                        'L_BAN_EXCLUDE_EXPLAIN'        => $l_ban_exclude_explain,
110
                        'L_NO_BAN_CELL'                        => $l_no_ban_cell,
111
112
                        'S_USERNAME_BAN'        => ($mode == 'user') ? true : false,
113
                        
114
                        'U_ACTION'                        => $this->u_action,
115
                        'U_FIND_USERNAME'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_ban&amp;field=ban'),
116
                ));
117
        }
118
119
        /**
120
        * Display ban options
121
        */
122
        function display_ban_options($mode)
123
        {
124
                global $user, $db, $template;
125
126
                // Ban length options
127
                $ban_end_text = array(0 => $user->lang['PERMANENT'], 30 => $user->lang['30_MINS'], 60 => $user->lang['1_HOUR'], 360 => $user->lang['6_HOURS'], 1440 => $user->lang['1_DAY'], 10080 => $user->lang['7_DAYS'], 20160 => $user->lang['2_WEEKS'], 40320 => $user->lang['1_MONTH'], -1 => $user->lang['UNTIL'] . ' -&gt; ');
128
129
                $ban_end_options = '';
130
                foreach ($ban_end_text as $length => $text)
131
                {
132
                        $ban_end_options .= '<option value="' . $length . '">' . $text . '</option>';
133
                }
134
135
                switch ($mode)
136
                {
137
                        case 'user':
138
139
                                $field = 'username';
140
                                $l_ban_cell = $user->lang['USERNAME'];
141
142
                                $sql = 'SELECT b.*, u.user_id, u.username, u.username_clean
143
                                        FROM ' . BANLIST_TABLE . ' b, ' . USERS_TABLE . ' u
144
                                        WHERE (b.ban_end >= ' . time() . '
145
                                                        OR b.ban_end = 0)
146
                                                AND u.user_id = b.ban_userid
147
                                        ORDER BY u.username_clean ASC';
148
                        break;
149
150
                        case 'ip':
151
152
                                $field = 'ban_ip';
153
                                $l_ban_cell = $user->lang['IP_HOSTNAME'];
154
155
                                $sql = 'SELECT *
156
                                        FROM ' . BANLIST_TABLE . '
157
                                        WHERE (ban_end >= ' . time() . "
158
                                                        OR ban_end = 0)
159
                                                AND ban_ip <> ''
160
                                        ORDER BY ban_ip";
161
                        break;
162
163
                        case 'email':
164
165
                                $field = 'ban_email';
166
                                $l_ban_cell = $user->lang['EMAIL_ADDRESS'];
167
168
                                $sql = 'SELECT *
169
                                        FROM ' . BANLIST_TABLE . '
170
                                        WHERE (ban_end >= ' . time() . "
171
                                                        OR ban_end = 0)
172
                                                AND ban_email <> ''
173
                                        ORDER BY ban_email";
174
                        break;
175
                }
176
                $result = $db->sql_query($sql);
177
178
                $banned_options = $excluded_options = array();
179
                $ban_length = $ban_reasons = $ban_give_reasons = array();
180
181
                while ($row = $db->sql_fetchrow($result))
182
                {
183
                        $option = '<option value="' . $row['ban_id'] . '">' . $row[$field] . '</option>';
184
185
                        if ($row['ban_exclude'])
186
                        {
187
                                $excluded_options[] = $option;
188
                        }
189
                        else
190
                        {
191
                                $banned_options[] = $option;
192
                        }
193
194
                        $time_length = ($row['ban_end']) ? ($row['ban_end'] - $row['ban_start']) / 60 : 0;
195
196
                        if ($time_length == 0)
197
                        {
198
                                // Banned permanently
199
                                $ban_length[$row['ban_id']] = $user->lang['PERMANENT'];
200
                        }
201
                        else if (isset($ban_end_text[$time_length]))
202
                        {
203
                                // Banned for a given duration
204
                                $ban_length[$row['ban_id']] = sprintf($user->lang['BANNED_UNTIL_DURATION'], $ban_end_text[$time_length], $user->format_date($row['ban_end'], false, true));
205
                        }
206
                        else
207
                        {
208
                                // Banned until given date
209
                                $ban_length[$row['ban_id']] = sprintf($user->lang['BANNED_UNTIL_DATE'], $user->format_date($row['ban_end'], false, true));
210
                        }
211
212
                        $ban_reasons[$row['ban_id']] = $row['ban_reason'];
213
                        $ban_give_reasons[$row['ban_id']] = $row['ban_give_reason'];
214
                }
215
                $db->sql_freeresult($result);
216
217
                if (sizeof($ban_length))
218
                {
219
                        foreach ($ban_length as $ban_id => $length)
220
                        {
221
                                $template->assign_block_vars('ban_length', array(
222
                                        'BAN_ID'        => (int) $ban_id,
223
                                        'LENGTH'        => $length,
224
                                        'A_LENGTH'        => addslashes($length),
225
                                ));
226
                        }
227
                }
228
229
                if (sizeof($ban_reasons))
230
                {
231
                        foreach ($ban_reasons as $ban_id => $reason)
232
                        {
233
                                $template->assign_block_vars('ban_reason', array(
234
                                        'BAN_ID'        => $ban_id,
235
                                        'REASON'        => $reason,
236
                                        'A_REASON'        => addslashes($reason),
237
                                ));
238
                        }
239
                }
240
241
                if (sizeof($ban_give_reasons))
242
                {
243
                        foreach ($ban_give_reasons as $ban_id => $reason)
244
                        {
245
                                $template->assign_block_vars('ban_give_reason', array(
246
                                        'BAN_ID'        => $ban_id,
247
                                        'REASON'        => $reason,
248
                                        'A_REASON'        => addslashes($reason),
249
                                ));
250
                        }
251
                }
252
253
                $options = '';
254
                if ($excluded_options)
255
                {
256
                        $options .= '<optgroup label="' . $user->lang['OPTIONS_EXCLUDED'] . '">';
257
                        $options .= implode('', $excluded_options);
258
                        $options .= '</optgroup>';
259
                }
260
261
                if ($banned_options)
262
                {
263
                        $options .= '<optgroup label="' . $user->lang['OPTIONS_BANNED'] . '">';
264
                        $options .= implode('', $banned_options);
265
                        $options .= '</optgroup>';
266
                }
267
268
                $template->assign_vars(array(
269
                        'S_BAN_END_OPTIONS'        => $ban_end_options,
270
                        'S_BANNED_OPTIONS'        => ($banned_options || $excluded_options) ? true : false,
271
                        'BANNED_OPTIONS'        => $options,
272
                ));
273
        }
274
}
275
276
?>