Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

acp_bots.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 11.86 KiB


001  <?php
002  /**
003  *
004  * @package acp
005  * @version $Id$
006  * @copyright (c) 2005 phpBB Group
007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
008  *
009  */
010   
011  /**
012  * @ignore
013  */
014  if (!defined('IN_PHPBB'))
015  {
016      exit;
017  }
018   
019  /**
020  * @package acp
021  */
022  class acp_bots
023  {
024      var $u_action;
025   
026      function main($id, $mode)
027      {
028          global $config, $db, $user, $auth, $template, $cache;
029          global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
030   
031          $action = request_var('action', '');
032          $submit = (isset($_POST['submit'])) ? true : false;
033          $mark    = request_var('mark', array(0));
034          $bot_id    = request_var('id', 0);
035   
036          if (isset($_POST['add']))
037          {
038              $action = 'add';
039          }
040   
041          $error = array();
042   
043          $user->add_lang('acp/bots');
044          $this->tpl_name = 'acp_bots';
045          $this->page_title = 'ACP_BOTS';
046          $form_key = 'acp_bots';
047          add_form_key($form_key);
048   
049          if ($submit && !check_form_key($form_key))
050          {
051              $error[] = $user->lang['FORM_INVALID'];
052          }
053   
054          // User wants to do something, how inconsiderate of them!
055          switch ($action)
056          {
057              case 'activate':
058                  if ($bot_id || sizeof($mark))
059                  {
060                      $sql_id = ($bot_id) ? " = $bot_id" : ' IN (' . implode(', ', $mark) . ')';
061   
062                      $sql = 'UPDATE ' . BOTS_TABLE . "
063                          SET bot_active = 1
064                          WHERE bot_id $sql_id";
065                      $db->sql_query($sql);
066                  }
067   
068                  $cache->destroy('_bots');
069              break;
070   
071              case 'deactivate':
072                  if ($bot_id || sizeof($mark))
073                  {
074                      $sql_id = ($bot_id) ? " = $bot_id" : ' IN (' . implode(', ', $mark) . ')';
075   
076                      $sql = 'UPDATE ' . BOTS_TABLE . "
077                          SET bot_active = 0
078                          WHERE bot_id $sql_id";
079                      $db->sql_query($sql);
080                  }
081   
082                  $cache->destroy('_bots');
083              break;
084   
085              case 'delete':
086                  if ($bot_id || sizeof($mark))
087                  {
088                      if (confirm_box(true))
089                      {
090                          // We need to delete the relevant user, usergroup and bot entries ...
091                          $sql_id = ($bot_id) ? " = $bot_id" : ' IN (' . implode(', ', $mark) . ')';
092   
093                          $sql = 'SELECT bot_name, user_id
094                              FROM ' . BOTS_TABLE . "
095                              WHERE bot_id $sql_id";
096                          $result = $db->sql_query($sql);
097   
098                          $user_id_ary = $bot_name_ary = array();
099                          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  ?>