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

mcp_warn.php

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


001  <?php
002  /**
003  *
004  * @package mcp
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  * mcp_warn
021  * Handling warning the users
022  * @package mcp
023  */
024  class mcp_warn
025  {
026      var $p_master;
027      var $u_action;
028   
029      function mcp_warn(&$p_master)
030      {
031          $this->p_master = &$p_master;
032      }
033   
034      function main($id, $mode)
035      {
036          global $auth, $db, $user, $template;
037          global $config, $phpbb_root_path, $phpEx;
038   
039          $action = request_var('action', array('' => ''));
040   
041          if (is_array($action))
042          {
043              list($action, ) = each($action);
044          }
045   
046          $this->page_title = 'MCP_WARN';
047   
048          add_form_key('mcp_warn');
049   
050          switch ($mode)
051          {
052              case 'front':
053                  $this->mcp_warn_front_view();
054                  $this->tpl_name = 'mcp_warn_front';
055              break;
056   
057              case 'list':
058                  $this->mcp_warn_list_view($action);
059                  $this->tpl_name = 'mcp_warn_list';
060              break;
061   
062              case 'warn_post':
063                  $this->mcp_warn_post_view($action);
064                  $this->tpl_name = 'mcp_warn_post';
065              break;
066   
067              case 'warn_user':
068                  $this->mcp_warn_user_view($action);
069                  $this->tpl_name = 'mcp_warn_user';
070              break;
071          }
072      }
073   
074      /**
075      * Generates the summary on the main page of the warning module
076      */
077      function mcp_warn_front_view()
078      {
079          global $phpEx, $phpbb_root_path, $config;
080          global $template, $db, $user, $auth;
081   
082          $template->assign_vars(array(
083              'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=mcp&amp;field=username&amp;select_single=true'),
084              'U_POST_ACTION'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&amp;mode=warn_user'),
085          ));
086   
087          // Obtain a list of the 5 naughtiest users....
088          // These are the 5 users with the highest warning count
089          $highest = array();
090          $count = 0;
091   
092          view_warned_users($highest, $count, 5);
093   
094          foreach ($highest as $row)
095          {
096              $template->assign_block_vars('highest', array(
097                  'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
098   
099                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
100                  'USERNAME'            => $row['username'],
101                  'USERNAME_COLOUR'    => ($row['user_colour']) ? '#' . $row['user_colour'] : '',
102                  'U_USER'            => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
103   
104                  'WARNING_TIME'    => $user->format_date($row['user_last_warning']),
105                  'WARNINGS'        => $row['user_warnings'],
106              ));
107          }
108   
109          // And now the 5 most recent users to get in trouble
110          $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_warnings, w.warning_time
111              FROM ' . USERS_TABLE . ' u, ' . WARNINGS_TABLE . ' w
112              WHERE u.user_id = w.user_id
113              ORDER BY w.warning_time DESC';
114          $result = $db->sql_query_limit($sql, 5);
115   
116          while ($row = $db->sql_fetchrow($result))
117          {
118              $template->assign_block_vars('latest', array(
119                  'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
120   
121                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
122                  'USERNAME'            => $row['username'],
123                  'USERNAME_COLOUR'    => ($row['user_colour']) ? '#' . $row['user_colour'] : '',
124                  'U_USER'            => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
125   
126                  'WARNING_TIME'    => $user->format_date($row['warning_time']),
127                  'WARNINGS'        => $row['user_warnings'],
128              ));
129          }
130          $db->sql_freeresult($result);
131      }
132   
133      /**
134      * Lists all users with warnings
135      */
136      function mcp_warn_list_view($action)
137      {
138          global $phpEx, $phpbb_root_path, $config;
139          global $template, $db, $user, $auth;
140   
141          $user->add_lang('memberlist');
142   
143          $start    = request_var('start', 0);
144          $st        = request_var('st', 0);
145          $sk        = request_var('sk', 'b');
146          $sd        = request_var('sd', 'd');
147   
148          $limit_days = array(0 => $user->lang['ALL_ENTRIES'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
149          $sort_by_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_DATE'], 'c' => $user->lang['SORT_WARNINGS']);
150          $sort_by_sql = array('a' => 'username_clean', 'b' => 'user_last_warning', 'c' => 'user_warnings');
151   
152          $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
153          gen_sort_selects($limit_days, $sort_by_text, $st, $sk, $sd, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
154   
155          // Define where and sort sql for use in displaying logs
156          $sql_where = ($st) ? (time() - ($st * 86400)) : 0;
157          $sql_sort = $sort_by_sql[$sk] . ' ' . (($sd == 'd') ? 'DESC' : 'ASC');
158   
159          $users = array();
160          $user_count = 0;
161   
162          view_warned_users($users, $user_count, $config['topics_per_page'], $start, $sql_where, $sql_sort);
163   
164          foreach ($users as $row)
165          {
166              $template->assign_block_vars('user', array(
167                  'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
168   
169                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
170                  'USERNAME'            => $row['username'],
171                  'USERNAME_COLOUR'    => ($row['user_colour']) ? '#' . $row['user_colour'] : '',
172                  'U_USER'            => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
173              
174                  'WARNING_TIME'    => $user->format_date($row['user_last_warning']),
175                  'WARNINGS'        => $row['user_warnings'],
176              ));
177          }
178   
179          $template->assign_vars(array(
180              'U_POST_ACTION'            => $this->u_action,
181              'S_CLEAR_ALLOWED'        => ($auth->acl_get('a_clearlogs')) ? true : false,
182              'S_SELECT_SORT_DIR'        => $s_sort_dir,
183              'S_SELECT_SORT_KEY'        => $s_sort_key,
184              'S_SELECT_SORT_DAYS'    => $s_limit_days,
185   
186              'PAGE_NUMBER'        => on_page($user_count, $config['topics_per_page'], $start),
187              'PAGINATION'        => generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=warn&amp;mode=list&amp;st=$st&amp;sk=$sk&amp;sd=$sd"), $user_count, $config['topics_per_page'], $start),
188              'TOTAL_USERS'        => ($user_count == 1) ? $user->lang['LIST_USER'] : sprintf($user->lang['LIST_USERS'], $user_count),
189          ));
190      }
191   
192      /**
193      * Handles warning the user when the warning is for a specific post
194      */
195      function mcp_warn_post_view($action)
196      {
197          global $phpEx, $phpbb_root_path, $config;
198          global $template, $db, $user, $auth;
199   
200          $post_id = request_var('p', 0);
201          $forum_id = request_var('f', 0);
202          $notify = (isset($_REQUEST['notify_user'])) ? true : false;
203          $warning = utf8_normalize_nfc(request_var('warning', '', true));
204   
205          $sql = 'SELECT u.*, p.*
206              FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . " u
207              WHERE post_id = $post_id
208                  AND u.user_id = p.poster_id";
209          $result = $db->sql_query($sql);
210          $user_row = $db->sql_fetchrow($result);
211          $db->sql_freeresult($result);
212   
213          if (!$user_row)
214          {
215              trigger_error('NO_POST');
216          }
217   
218          // There is no point issuing a warning to ignored users (ie anonymous and bots)
219          if ($user_row['user_type'] == USER_IGNORE)
220          {
221              trigger_error('CANNOT_WARN_ANONYMOUS');
222          }
223   
224          // Prevent someone from warning themselves
225          if ($user_row['user_id'] == $user->data['user_id'])
226          {
227              trigger_error('CANNOT_WARN_SELF');
228          }
229   
230          // Check if there is already a warning for this post to prevent multiple
231          // warnings for the same offence
232          $sql = 'SELECT post_id
233              FROM ' . WARNINGS_TABLE . "
234              WHERE post_id = $post_id";
235          $result = $db->sql_query($sql);
236          $row = $db->sql_fetchrow($result);
237          $db->sql_freeresult($result);
238   
239          if ($row)
240          {
241              trigger_error('ALREADY_WARNED');
242          }
243   
244          $user_id = $user_row['user_id'];
245   
246          if (strpos($this->u_action, "&amp;f=$forum_id&amp;p=$post_id") === false)
247          {
248              $this->p_master->adjust_url("&amp;f=$forum_id&amp;p=$post_id");
249              $this->u_action .= "&amp;f=$forum_id&amp;p=$post_id";
250          }
251   
252          if ($warning && $action == 'add_warning')
253          {
254              if (check_form_key('mcp_warn'))
255              {
256                  add_warning($user_row, $warning, $notify, $post_id);
257                  $msg = $user->lang['USER_WARNING_ADDED'];
258              }
259              else
260              {
261                  $msg = $user->lang['FORM_INVALID'];
262              }
263              $redirect = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=notes&amp;mode=user_notes&amp;u=$user_id");
264              meta_refresh(2, $redirect);
265              trigger_error($user->lang['USER_WARNING_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
266          }
267   
268          // OK, they didn't submit a warning so lets build the page for them to do so
269          
270          // We want to make the message available here as a reminder
271          // Parse the message and subject
272          $message = censor_text($user_row['post_text']);
273   
274          // Second parse bbcode here
275          if ($user_row['bbcode_bitfield'])
276          {
277              include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
278   
279              $bbcode = new bbcode($user_row['bbcode_bitfield']);
280              $bbcode->bbcode_second_pass($message, $user_row['bbcode_uid'], $user_row['bbcode_bitfield']);
281          }
282   
283          $message = bbcode_nl2br($message);
284          $message = smiley_text($message);
285   
286          // Generate the appropriate user information for the user we are looking at
287          if (!function_exists('get_user_avatar'))
288          {
289              include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
290          }
291   
292          $rank_title = $rank_img = '';
293          $avatar_img = get_user_avatar($user_row['user_avatar'], $user_row['user_avatar_type'], $user_row['user_avatar_width'], $user_row['user_avatar_height']);
294   
295          $template->assign_vars(array(
296              'U_POST_ACTION'        => $this->u_action,
297   
298              'POST'                => $message,
299              'USERNAME'            => $user_row['username'],
300              'USER_COLOR'        => (!empty($user_row['user_colour'])) ? $user_row['user_colour'] : '',
301              'RANK_TITLE'        => $rank_title,
302              'JOINED'            => $user->format_date($user_row['user_regdate']),
303              'POSTS'                => ($user_row['user_posts']) ? $user_row['user_posts'] : 0,
304              'WARNINGS'            => ($user_row['user_warnings']) ? $user_row['user_warnings'] : 0,
305   
306              'AVATAR_IMG'        => $avatar_img,
307              'RANK_IMG'            => $rank_img,
308   
309              'L_WARNING_POST_DEFAULT'    => sprintf($user->lang['WARNING_POST_DEFAULT'], generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&amp;p=$post_id#p$post_id"),
310          ));
311      }
312   
313      /**
314      * Handles warning the user
315      */
316      function mcp_warn_user_view($action)
317      {
318          global $phpEx, $phpbb_root_path, $config, $module;
319          global $template, $db, $user, $auth;
320   
321          $user_id = request_var('u', 0);
322          $username = request_var('username', '', true);
323          $notify = (isset($_REQUEST['notify_user'])) ? true : false;
324          $warning = utf8_normalize_nfc(request_var('warning', '', true));
325   
326          $sql_where = ($user_id) ? "user_id = $user_id" : "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
327   
328          $sql = 'SELECT *
329              FROM ' . USERS_TABLE . '
330              WHERE ' . $sql_where;
331          $result = $db->sql_query($sql);
332          $user_row = $db->sql_fetchrow($result);
333          $db->sql_freeresult($result);
334   
335          if (!$user_row)
336          {
337              trigger_error('NO_USER');
338          }
339   
340          // Prevent someone from warning themselves
341          if ($user_row['user_id'] == $user->data['user_id'])
342          {
343              trigger_error('CANNOT_WARN_SELF');
344          }
345   
346          $user_id = $user_row['user_id'];
347   
348          if (strpos($this->u_action, "&amp;u=$user_id") === false)
349          {
350              $this->p_master->adjust_url('&amp;u=' . $user_id);
351              $this->u_action .= "&amp;u=$user_id";
352          }
353   
354          if ($warning && $action == 'add_warning')
355          {
356              if (check_form_key('mcp_warn'))
357              {
358                  add_warning($user_row, $warning, $notify);
359                  $msg = $user->lang['USER_WARNING_ADDED'];
360              }
361              else
362              {
363                  $msg = $user->lang['FORM_INVALID'];
364              }
365              $redirect = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=notes&amp;mode=user_notes&amp;u=$user_id");
366              meta_refresh(2, $redirect);
367              trigger_error($msg . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
368          }
369   
370          // Generate the appropriate user information for the user we are looking at
371          if (!function_exists('get_user_avatar'))
372          {
373              include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
374          }
375   
376          $rank_title = $rank_img = '';
377          $avatar_img = get_user_avatar($user_row['user_avatar'], $user_row['user_avatar_type'], $user_row['user_avatar_width'], $user_row['user_avatar_height']);
378   
379          // OK, they didn't submit a warning so lets build the page for them to do so
380          $template->assign_vars(array(
381              'U_POST_ACTION'        => $this->u_action,
382   
383              'USERNAME'            => $user_row['username'],
384              'USER_COLOR'        => (!empty($user_row['user_colour'])) ? $user_row['user_colour'] : '',
385              'RANK_TITLE'        => $rank_title,
386              'JOINED'            => $user->format_date($user_row['user_regdate']),
387              'POSTS'                => ($user_row['user_posts']) ? $user_row['user_posts'] : 0,
388              'WARNINGS'            => ($user_row['user_warnings']) ? $user_row['user_warnings'] : 0,
389   
390              'AVATAR_IMG'        => $avatar_img,
391              'RANK_IMG'            => $rank_img,
392          ));
393   
394          return $user_id;
395      }
396  }
397   
398  /**
399  * Insert the warning into the database
400  */
401  function add_warning($user_row, $warning, $send_pm = true, $post_id = 0)
402  {
403      global $phpEx, $phpbb_root_path, $config;
404      global $template, $db, $user, $auth;
405   
406      if ($send_pm)
407      {
408          include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
409          include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);
410   
411          $user_row['user_lang'] = (file_exists($phpbb_root_path . 'language/' . $user_row['user_lang'] . "/mcp.$phpEx")) ? $user_row['user_lang'] : $config['default_lang'];
412          include($phpbb_root_path . 'language/' . basename($user_row['user_lang']) . "/mcp.$phpEx");
413   
414          $message_parser = new parse_message();
415   
416          $message_parser->message = sprintf($lang['WARNING_PM_BODY'], $warning);
417          $message_parser->parse(true, true, true, false, false, true, true);
418   
419          $pm_data = array(
420              'from_user_id'            => $user->data['user_id'],
421              'from_user_ip'            => $user->ip,
422              'from_username'            => $user->data['username'],
423              'enable_sig'            => false,
424              'enable_bbcode'            => true,
425              'enable_smilies'        => true,
426              'enable_urls'            => false,
427              'icon_id'                => 0,
428              'bbcode_bitfield'        => $message_parser->bbcode_bitfield,
429              'bbcode_uid'            => $message_parser->bbcode_uid,
430              'message'                => $message_parser->message,
431              'address_list'            => array('u' => array($user_row['user_id'] => 'to')),
432          );
433   
434          submit_pm('post', $lang['WARNING_PM_SUBJECT'], $pm_data, false);
435      }
436   
437      add_log('admin', 'LOG_USER_WARNING', $user_row['username']);
438      $log_id = add_log('user', $user_row['user_id'], 'LOG_USER_WARNING_BODY', $warning);
439   
440      $sql_ary = array(
441          'user_id'        => $user_row['user_id'],
442          'post_id'        => $post_id,
443          'log_id'        => $log_id,
444          'warning_time'    => time(),
445      );
446   
447      $db->sql_query('INSERT INTO ' . WARNINGS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
448   
449      $sql = 'UPDATE ' . USERS_TABLE . '
450          SET user_warnings = user_warnings + 1,
451              user_last_warning = ' . time() . '
452          WHERE user_id = ' . $user_row['user_id'];
453      $db->sql_query($sql);
454   
455      // We add this to the mod log too for moderators to see that a specific user got warned.
456      $sql = 'SELECT forum_id, topic_id
457          FROM ' . POSTS_TABLE . '
458          WHERE post_id = ' . $post_id;
459      $result = $db->sql_query($sql);
460      $row = $db->sql_fetchrow($result);
461      $db->sql_freeresult($result);
462   
463      add_log('mod', $row['forum_id'], $row['topic_id'], 'LOG_USER_WARNING', $user_row['username']);
464  }
465   
466  ?>