~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: 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_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'