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

« back to all changes in this revision

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

  • Committer: dcoles
  • Date: 2008-02-13 04:10:55 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:443
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
*
 
4
* @package acp
 
5
* @version $Id: acp_bots.php,v 1.27 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_bots
 
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
                $action = request_var('action', '');
 
32
                $submit = (isset($_POST['submit'])) ? true : false;
 
33
                $mark   = request_var('mark', array(0));
 
34
                $bot_id = request_var('id', 0);
 
35
 
 
36
                if (isset($_POST['add']))
 
37
                {
 
38
                        $action = 'add';
 
39
                }
 
40
 
 
41
                $error = array();
 
42
 
 
43
                $user->add_lang('acp/bots');
 
44
                $this->tpl_name = 'acp_bots';
 
45
                $this->page_title = 'ACP_BOTS';
 
46
                $form_key = 'acp_bots';
 
47
                add_form_key($form_key);
 
48
 
 
49
                if ($submit && !check_form_key($form_key))
 
50
                {
 
51
                        $error[] = $user->lang['FORM_INVALID'];
 
52
                }
 
53
 
 
54
                // User wants to do something, how inconsiderate of them!
 
55
                switch ($action)
 
56
                {
 
57
                        case 'activate':
 
58
                                if ($bot_id || sizeof($mark))
 
59
                                {
 
60
                                        $sql_id = ($bot_id) ? " = $bot_id" : ' IN (' . implode(', ', $mark) . ')';
 
61
 
 
62
                                        $sql = 'UPDATE ' . BOTS_TABLE . "
 
63
                                                SET bot_active = 1
 
64
                                                WHERE bot_id $sql_id";
 
65
                                        $db->sql_query($sql);
 
66
                                }
 
67
 
 
68
                                $cache->destroy('_bots');
 
69
                        break;
 
70
 
 
71
                        case 'deactivate':
 
72
                                if ($bot_id || sizeof($mark))
 
73
                                {
 
74
                                        $sql_id = ($bot_id) ? " = $bot_id" : ' IN (' . implode(', ', $mark) . ')';
 
75
 
 
76
                                        $sql = 'UPDATE ' . BOTS_TABLE . "
 
77
                                                SET bot_active = 0
 
78
                                                WHERE bot_id $sql_id";
 
79
                                        $db->sql_query($sql);
 
80
                                }
 
81
 
 
82
                                $cache->destroy('_bots');
 
83
                        break;
 
84
 
 
85
                        case 'delete':
 
86
                                if ($bot_id || sizeof($mark))
 
87
                                {
 
88
                                        if (confirm_box(true))
 
89
                                        {
 
90
                                                // We need to delete the relevant user, usergroup and bot entries ...
 
91
                                                $sql_id = ($bot_id) ? " = $bot_id" : ' IN (' . implode(', ', $mark) . ')';
 
92
 
 
93
                                                $sql = 'SELECT bot_name, user_id
 
94
                                                        FROM ' . BOTS_TABLE . "
 
95
                                                        WHERE bot_id $sql_id";
 
96
                                                $result = $db->sql_query($sql);
 
97
 
 
98
                                                $user_id_ary = $bot_name_ary = array();
 
99
                                                while ($row = $db->sql_fetchrow($result))
 
100
                                                {
 
101
                                                        $user_id_ary[] = (int) $row['user_id'];
 
102
                                                        $bot_name_ary[] = $row['bot_name'];
 
103
                                                }
 
104
                                                $db->sql_freeresult($result);
 
105
 
 
106
                                                $db->sql_transaction('begin');
 
107
 
 
108
                                                $sql = 'DELETE FROM ' . BOTS_TABLE . "
 
109
                                                        WHERE bot_id $sql_id";
 
110
                                                $db->sql_query($sql);
 
111
 
 
112
                                                if (sizeof($user_id_ary))
 
113
                                                {
 
114
                                                        $_tables = array(USERS_TABLE, USER_GROUP_TABLE);
 
115
                                                        foreach ($_tables as $table)
 
116
                                                        {
 
117
                                                                $sql = "DELETE FROM $table
 
118
                                                                        WHERE " . $db->sql_in_set('user_id', $user_id_ary);
 
119
                                                                $db->sql_query($sql);
 
120
                                                        }
 
121
                                                }
 
122
 
 
123
                                                $db->sql_transaction('commit');
 
124
 
 
125
                                                $cache->destroy('_bots');
 
126
 
 
127
                                                add_log('admin', 'LOG_BOT_DELETE', implode(', ', $bot_name_ary));
 
128
                                                trigger_error($user->lang['BOT_DELETED'] . adm_back_link($this->u_action));
 
129
                                        }
 
130
                                        else
 
131
                                        {
 
132
                                                confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 
133
                                                        'mark'          => $mark,
 
134
                                                        'id'            => $bot_id,
 
135
                                                        'mode'          => $mode,
 
136
                                                        'action'        => $action))
 
137
                                                );
 
138
                                        }
 
139
                                }
 
140
                        break;
 
141
 
 
142
                        case 'edit':
 
143
                        case 'add':
 
144
                                include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
 
145
 
 
146
                                $bot_row = array(
 
147
                                        'bot_name'              => utf8_normalize_nfc(request_var('bot_name', '', true)),
 
148
                                        'bot_agent'             => request_var('bot_agent', ''),
 
149
                                        'bot_ip'                => request_var('bot_ip', ''),
 
150
                                        'bot_active'    => request_var('bot_active', true),
 
151
                                        'bot_lang'              => request_var('bot_lang', $config['default_lang']),
 
152
                                        'bot_style'             => request_var('bot_style' , $config['default_style']),
 
153
                                );
 
154
 
 
155
                                if ($submit)
 
156
                                {
 
157
                                        if (!$bot_row['bot_agent'] && !$bot_row['bot_ip'])
 
158
                                        {
 
159
                                                $error[] = $user->lang['ERR_BOT_NO_MATCHES'];
 
160
                                        }
 
161
                        
 
162
                                        if ($bot_row['bot_ip'] && !preg_match('#^[\d\.,:]+$#', $bot_row['bot_ip']))
 
163
                                        {
 
164
                                                if (!$ip_list = gethostbynamel($bot_row['bot_ip']))
 
165
                                                {
 
166
                                                        $error[] = $user->lang['ERR_BOT_NO_IP'];
 
167
                                                }
 
168
                                                else
 
169
                                                {
 
170
                                                        $bot_row['bot_ip'] = implode(',', $ip_list);
 
171
                                                }
 
172
                                        }
 
173
                                        $bot_row['bot_ip'] = str_replace(' ', '', $bot_row['bot_ip']);
 
174
 
 
175
                                        // Make sure the admin is not adding a bot with an user agent similar to his one
 
176
                                        if ($bot_row['bot_agent'] && substr($user->data['session_browser'], 0, 149) === substr($bot_row['bot_agent'], 0, 149))
 
177
                                        {
 
178
                                                $error[] = $user->lang['ERR_BOT_AGENT_MATCHES_UA'];
 
179
                                        }
 
180
                                        
 
181
                                        $bot_name = false;
 
182
                                        if ($bot_id)
 
183
                                        {
 
184
                                                $sql = 'SELECT u.username_clean
 
185
                                                        FROM ' . BOTS_TABLE . ' b, ' . USERS_TABLE . " u
 
186
                                                        WHERE b.bot_id = $bot_id
 
187
                                                                AND u.user_id = b.user_id";
 
188
                                                $result = $db->sql_query($sql);
 
189
                                                $row = $db->sql_fetchrow($result);
 
190
                                                $db->sql_freeresult($result);
 
191
 
 
192
                                                if (!$bot_row)
 
193
                                                {
 
194
                                                        $error[] = $user->lang['NO_BOT'];
 
195
                                                }
 
196
                                                else
 
197
                                                {
 
198
                                                        $bot_name = $row['username_clean'];
 
199
                                                }
 
200
                                        }
 
201
                                        if (!$this->validate_botname($bot_row['bot_name'], $bot_name))
 
202
                                        {
 
203
                                                $error[] = $user->lang['BOT_NAME_TAKEN'];
 
204
                                        }
 
205
                                        
 
206
                                        if (!sizeof($error))
 
207
                                        {
 
208
                                                // New bot? Create a new user and group entry
 
209
                                                if ($action == 'add')
 
210
                                                {
 
211
                                                        $sql = 'SELECT group_id, group_colour
 
212
                                                                FROM ' . GROUPS_TABLE . "
 
213
                                                                WHERE group_name = 'BOTS'
 
214
                                                                        AND group_type = " . GROUP_SPECIAL;
 
215
                                                        $result = $db->sql_query($sql);
 
216
                                                        $group_row = $db->sql_fetchrow($result);
 
217
                                                        $db->sql_freeresult($result);
 
218
 
 
219
                                                        if (!$group_row)
 
220
                                                        {
 
221
                                                                trigger_error($user->lang['NO_BOT_GROUP'] . adm_back_link($this->u_action . "&amp;id=$bot_id&amp;action=$action"), E_USER_WARNING);
 
222
                                                        }
 
223
                                                
 
224
 
 
225
                                                        $user_id = user_add(array(
 
226
                                                                'user_type'                             => (int) USER_IGNORE,
 
227
                                                                'group_id'                              => (int) $group_row['group_id'],
 
228
                                                                'username'                              => (string) $bot_row['bot_name'],
 
229
                                                                'user_regdate'                  => time(),
 
230
                                                                'user_password'                 => '',
 
231
                                                                'user_colour'                   => (string) $group_row['group_colour'],
 
232
                                                                'user_email'                    => '',
 
233
                                                                'user_lang'                             => (string) $bot_row['bot_lang'],
 
234
                                                                'user_style'                    => (int) $bot_row['bot_style'],
 
235
                                                                'user_allow_massemail'  => 0,
 
236
                                                        ));
 
237
        
 
238
                                                        $sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
 
239
                                                                'user_id'               => (int) $user_id,
 
240
                                                                'bot_name'              => (string) $bot_row['bot_name'],
 
241
                                                                'bot_active'    => (int) $bot_row['bot_active'],
 
242
                                                                'bot_agent'             => (string) $bot_row['bot_agent'],
 
243
                                                                'bot_ip'                => (string) $bot_row['bot_ip'])
 
244
                                                        );
 
245
                                                        $db->sql_query($sql);
 
246
        
 
247
                                                        $log = 'ADDED';
 
248
                                                }
 
249
                                                else if ($bot_id)
 
250
                                                {
 
251
                                                        $sql = 'SELECT user_id, bot_name
 
252
                                                                FROM ' . BOTS_TABLE . "
 
253
                                                                WHERE bot_id = $bot_id";
 
254
                                                        $result = $db->sql_query($sql);
 
255
                                                        $row = $db->sql_fetchrow($result);
 
256
                                                        $db->sql_freeresult($result);
 
257
 
 
258
                                                        if (!$row)
 
259
                                                        {
 
260
                                                                trigger_error($user->lang['NO_BOT'] . adm_back_link($this->u_action . "&amp;id=$bot_id&amp;action=$action"), E_USER_WARNING);
 
261
                                                        }
 
262
 
 
263
                                                        $sql_ary = array(
 
264
                                                                'user_style'    => (int) $bot_row['bot_style'],
 
265
                                                                'user_lang'             => (string) $bot_row['bot_lang'],
 
266
                                                        );
 
267
 
 
268
                                                        if ($bot_row['bot_name'] !== $row['bot_name'])
 
269
                                                        {
 
270
                                                                $sql_ary['username'] = (string) $bot_row['bot_name'];
 
271
                                                                $sql_ary['username_clean'] = (string) utf8_clean_string($bot_row['bot_name']);
 
272
                                                        }
 
273
 
 
274
                                                        $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . " WHERE user_id = {$row['user_id']}";
 
275
                                                        $db->sql_query($sql);
 
276
 
 
277
                                                        $sql = 'UPDATE ' . BOTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', array(
 
278
                                                                'bot_name'              => (string) $bot_row['bot_name'],
 
279
                                                                'bot_active'    => (int) $bot_row['bot_active'],
 
280
                                                                'bot_agent'             => (string) $bot_row['bot_agent'],
 
281
                                                                'bot_ip'                => (string) $bot_row['bot_ip'])
 
282
                                                        ) . " WHERE bot_id = $bot_id";
 
283
                                                        $db->sql_query($sql);
 
284
 
 
285
                                                        // Updated username?
 
286
                                                        if ($bot_row['bot_name'] !== $row['bot_name'])
 
287
                                                        {
 
288
                                                                user_update_name($row['bot_name'], $bot_row['bot_name']);
 
289
                                                        }
 
290
 
 
291
                                                        $log = 'UPDATED';
 
292
                                                }
 
293
                                                
 
294
                                                $cache->destroy('_bots');
 
295
                                                
 
296
                                                add_log('admin', 'LOG_BOT_' . $log, $bot_row['bot_name']);
 
297
                                                trigger_error($user->lang['BOT_' . $log] . adm_back_link($this->u_action));
 
298
                                        
 
299
                                        }
 
300
                                }
 
301
                                else if ($bot_id)
 
302
                                {
 
303
                                        $sql = 'SELECT b.*, u.user_lang, u.user_style
 
304
                                                FROM ' . BOTS_TABLE . ' b, ' . USERS_TABLE . " u
 
305
                                                WHERE b.bot_id = $bot_id
 
306
                                                        AND u.user_id = b.user_id";
 
307
                                        $result = $db->sql_query($sql);
 
308
                                        $bot_row = $db->sql_fetchrow($result);
 
309
                                        $db->sql_freeresult($result);
 
310
 
 
311
                                        if (!$bot_row)
 
312
                                        {
 
313
                                                trigger_error($user->lang['NO_BOT'] . adm_back_link($this->u_action . "&amp;id=$bot_id&amp;action=$action"), E_USER_WARNING);
 
314
                                        }
 
315
 
 
316
                                        $bot_row['bot_lang'] = $bot_row['user_lang'];
 
317
                                        $bot_row['bot_style'] = $bot_row['user_style'];
 
318
                                        unset($bot_row['user_lang'], $bot_row['user_style']);
 
319
                                }
 
320
 
 
321
                                $s_active_options = '';
 
322
                                $_options = array('0' => 'NO', '1' => 'YES');
 
323
                                foreach ($_options as $value => $lang)
 
324
                                {
 
325
                                        $selected = ($bot_row['bot_active'] == $value) ? ' selected="selected"' : '';
 
326
                                        $s_active_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
 
327
                                }
 
328
 
 
329
                                $style_select = style_select($bot_row['bot_style'], true);
 
330
                                $lang_select = language_select($bot_row['bot_lang']);
 
331
 
 
332
                                $l_title = ($action == 'edit') ? 'EDIT' : 'ADD';
 
333
 
 
334
                                $template->assign_vars(array(
 
335
                                        'L_TITLE'               => $user->lang['BOT_' . $l_title],
 
336
                                        'U_ACTION'              => $this->u_action . "&amp;id=$bot_id&amp;action=$action",
 
337
                                        'U_BACK'                => $this->u_action,
 
338
                                        'ERROR_MSG'             => (sizeof($error)) ? implode('<br />', $error) : '',
 
339
                                        
 
340
                                        'BOT_NAME'              => $bot_row['bot_name'],
 
341
                                        'BOT_IP'                => $bot_row['bot_ip'],
 
342
                                        'BOT_AGENT'             => $bot_row['bot_agent'],
 
343
                                        
 
344
                                        'S_EDIT_BOT'            => true,
 
345
                                        'S_ACTIVE_OPTIONS'      => $s_active_options,
 
346
                                        'S_STYLE_OPTIONS'       => $style_select,
 
347
                                        'S_LANG_OPTIONS'        => $lang_select,
 
348
                                        'S_ERROR'                       => (sizeof($error)) ? true : false,
 
349
                                        )
 
350
                                );
 
351
 
 
352
                                return;
 
353
 
 
354
                        break;
 
355
                }
 
356
 
 
357
                $s_options = '';
 
358
                $_options = array('activate' => 'BOT_ACTIVATE', 'deactivate' => 'BOT_DEACTIVATE', 'delete' => 'DELETE');
 
359
                foreach ($_options as $value => $lang)
 
360
                {
 
361
                        $s_options .= '<option value="' . $value . '">' . $user->lang[$lang] . '</option>';
 
362
                }
 
363
 
 
364
                $template->assign_vars(array(
 
365
                        'U_ACTION'              => $this->u_action,
 
366
                        'S_BOT_OPTIONS' => $s_options)
 
367
                );
 
368
 
 
369
                $sql = 'SELECT b.bot_id, b.bot_name, b.bot_active, u.user_lastvisit
 
370
                        FROM ' . BOTS_TABLE . ' b, ' . USERS_TABLE . ' u
 
371
                        WHERE u.user_id = b.user_id
 
372
                        ORDER BY u.user_lastvisit DESC, b.bot_name ASC';
 
373
                $result = $db->sql_query($sql);
 
374
 
 
375
                while ($row = $db->sql_fetchrow($result))
 
376
                {
 
377
                        $active_lang = (!$row['bot_active']) ? 'BOT_ACTIVATE' : 'BOT_DEACTIVATE';
 
378
                        $active_value = (!$row['bot_active']) ? 'activate' : 'deactivate';
 
379
 
 
380
                        $template->assign_block_vars('bots', array(
 
381
                                'BOT_NAME'              => $row['bot_name'],
 
382
                                'BOT_ID'                => $row['bot_id'],
 
383
                                'LAST_VISIT'    => ($row['user_lastvisit']) ? $user->format_date($row['user_lastvisit']) : $user->lang['BOT_NEVER'],
 
384
 
 
385
                                'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&amp;id={$row['bot_id']}&amp;action=$active_value",
 
386
                                'L_ACTIVATE_DEACTIVATE' => $user->lang[$active_lang],
 
387
                                'U_EDIT'                                => $this->u_action . "&amp;id={$row['bot_id']}&amp;action=edit",
 
388
                                'U_DELETE'                              => $this->u_action . "&amp;id={$row['bot_id']}&amp;action=delete")
 
389
                        );
 
390
                }
 
391
                $db->sql_freeresult($result);
 
392
        }
 
393
        
 
394
        /**
 
395
        * Validate bot name against username table
 
396
        */
 
397
        function validate_botname($newname, $oldname = false)
 
398
        {
 
399
                global $db;
 
400
 
 
401
                if ($oldname && utf8_clean_string($newname) === $oldname)
 
402
                {
 
403
                        return true;
 
404
                }
 
405
 
 
406
                // Admins might want to use names otherwise forbidden, thus we only check for duplicates.
 
407
                $sql = 'SELECT username
 
408
                        FROM ' . USERS_TABLE . "
 
409
                        WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($newname)) . "'";
 
410
                $result = $db->sql_query($sql);
 
411
                $row = $db->sql_fetchrow($result);
 
412
                $db->sql_freeresult($result);
 
413
                
 
414
                return ($row) ? false : true;
 
415
        }
 
416
}
 
417
 
 
418
?>
 
 
b'\\ No newline at end of file'