Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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:52 - Dateigröße: 18.32 KiB


001  <?php
002  /**
003  *
004  * This file is part of the phpBB Forum Software package.
005  *
006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
007  * @license GNU General Public License, version 2 (GPL-2.0)
008  *
009  * For full copyright and license information, please see
010  * the docs/CREDITS.txt file.
011  *
012  */
013   
014  /**
015  * @ignore
016  */
017  if (!defined('IN_PHPBB'))
018  {
019      exit;
020  }
021   
022  /**
023  * mcp_warn
024  * Handling warning the users
025  */
026  class mcp_warn
027  {
028      var $p_master;
029      var $u_action;
030   
031      function mcp_warn(&$p_master)
032      {
033          $this->p_master = &$p_master;
034      }
035   
036      function main($id, $mode)
037      {
038          global $request;
039   
040          $action = $request->variable('action', array('' => ''));
041   
042          if (is_array($action))
043          {
044              list($action, ) = each($action);
045          }
046   
047          $this->page_title = 'MCP_WARN';
048   
049          add_form_key('mcp_warn');
050   
051          switch ($mode)
052          {
053              case 'front':
054                  $this->mcp_warn_front_view();
055                  $this->tpl_name = 'mcp_warn_front';
056              break;
057   
058              case 'list':
059                  $this->mcp_warn_list_view($action);
060                  $this->tpl_name = 'mcp_warn_list';
061              break;
062   
063              case 'warn_post':
064                  $this->mcp_warn_post_view($action);
065                  $this->tpl_name = 'mcp_warn_post';
066              break;
067   
068              case 'warn_user':
069                  $this->mcp_warn_user_view($action);
070                  $this->tpl_name = 'mcp_warn_user';
071              break;
072          }
073      }
074   
075      /**
076      * Generates the summary on the main page of the warning module
077      */
078      function mcp_warn_front_view()
079      {
080          global $phpEx, $phpbb_root_path;
081          global $template, $db, $user;
082   
083          $template->assign_vars(array(
084              'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=mcp&amp;field=username&amp;select_single=true'),
085              'U_POST_ACTION'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&amp;mode=warn_user'),
086          ));
087   
088          // Obtain a list of the 5 naughtiest users....
089          // These are the 5 users with the highest warning count
090          $highest = array();
091          $count = 0;
092   
093          view_warned_users($highest, $count, 5);
094   
095          foreach ($highest as $row)
096          {
097              $template->assign_block_vars('highest', array(
098                  'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
099   
100                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
101   
102                  'WARNING_TIME'    => $user->format_date($row['user_last_warning']),
103                  'WARNINGS'        => $row['user_warnings'],
104              ));
105          }
106   
107          // And now the 5 most recent users to get in trouble
108          $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_warnings, w.warning_time
109              FROM ' . USERS_TABLE . ' u, ' . WARNINGS_TABLE . ' w
110              WHERE u.user_id = w.user_id
111              ORDER BY w.warning_time DESC';
112          $result = $db->sql_query_limit($sql, 5);
113   
114          while ($row = $db->sql_fetchrow($result))
115          {
116              $template->assign_block_vars('latest', array(
117                  'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
118   
119                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
120   
121                  'WARNING_TIME'    => $user->format_date($row['warning_time']),
122                  'WARNINGS'        => $row['user_warnings'],
123              ));
124          }
125          $db->sql_freeresult($result);
126      }
127   
128      /**
129      * Lists all users with warnings
130      */
131      function mcp_warn_list_view($action)
132      {
133          global $phpEx, $phpbb_root_path, $config, $phpbb_container;
134          global $template, $user, $auth, $request;
135   
136          /* @var $pagination \phpbb\pagination */
137          $pagination = $phpbb_container->get('pagination');
138          $user->add_lang('memberlist');
139   
140          $start    = $request->variable('start', 0);
141          $st        = $request->variable('st', 0);
142          $sk        = $request->variable('sk', 'b');
143          $sd        = $request->variable('sd', 'd');
144   
145          $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']);
146          $sort_by_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_DATE'], 'c' => $user->lang['SORT_WARNINGS']);
147          $sort_by_sql = array('a' => 'username_clean', 'b' => 'user_last_warning', 'c' => 'user_warnings');
148   
149          $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
150          gen_sort_selects($limit_days, $sort_by_text, $st, $sk, $sd, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
151   
152          // Define where and sort sql for use in displaying logs
153          $sql_where = ($st) ? (time() - ($st * 86400)) : 0;
154          $sql_sort = $sort_by_sql[$sk] . ' ' . (($sd == 'd') ? 'DESC' : 'ASC');
155   
156          $users = array();
157          $user_count = 0;
158   
159          view_warned_users($users, $user_count, $config['topics_per_page'], $start, $sql_where, $sql_sort);
160   
161          foreach ($users as $row)
162          {
163              $template->assign_block_vars('user', array(
164                  'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
165   
166                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
167   
168                  'WARNING_TIME'    => $user->format_date($row['user_last_warning']),
169                  'WARNINGS'        => $row['user_warnings'],
170              ));
171          }
172   
173          $base_url = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=warn&amp;mode=list&amp;st=$st&amp;sk=$sk&amp;sd=$sd");
174          $pagination->generate_template_pagination($base_url, 'pagination', 'start', $user_count, $config['topics_per_page'], $start);
175   
176          $template->assign_vars(array(
177              'U_POST_ACTION'            => $this->u_action,
178              'S_CLEAR_ALLOWED'        => ($auth->acl_get('a_clearlogs')) ? true : false,
179              'S_SELECT_SORT_DIR'        => $s_sort_dir,
180              'S_SELECT_SORT_KEY'        => $s_sort_key,
181              'S_SELECT_SORT_DAYS'    => $s_limit_days,
182   
183              'TOTAL_USERS'        => $user->lang('LIST_USERS', (int) $user_count),
184          ));
185      }
186   
187      /**
188      * Handles warning the user when the warning is for a specific post
189      */
190      function mcp_warn_post_view($action)
191      {
192          global $phpEx, $phpbb_root_path, $config, $request;
193          global $template, $db, $user, $phpbb_dispatcher;
194   
195          $post_id = $request->variable('p', 0);
196          $forum_id = $request->variable('f', 0);
197          $notify = (isset($_REQUEST['notify_user'])) ? true : false;
198          $warning = $request->variable('warning', '', true);
199   
200          $sql = 'SELECT u.*, p.*
201              FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . " u
202              WHERE p.post_id = $post_id
203                  AND u.user_id = p.poster_id";
204          $result = $db->sql_query($sql);
205          $user_row = $db->sql_fetchrow($result);
206          $db->sql_freeresult($result);
207   
208          if (!$user_row)
209          {
210              trigger_error('NO_POST');
211          }
212   
213          // There is no point issuing a warning to ignored users (ie anonymous and bots)
214          if ($user_row['user_type'] == USER_IGNORE)
215          {
216              trigger_error('CANNOT_WARN_ANONYMOUS');
217          }
218   
219          // Prevent someone from warning themselves
220          if ($user_row['user_id'] == $user->data['user_id'])
221          {
222              trigger_error('CANNOT_WARN_SELF');
223          }
224   
225          // Check if there is already a warning for this post to prevent multiple
226          // warnings for the same offence
227          $sql = 'SELECT post_id
228              FROM ' . WARNINGS_TABLE . "
229              WHERE post_id = $post_id";
230          $result = $db->sql_query($sql);
231          $row = $db->sql_fetchrow($result);
232          $db->sql_freeresult($result);
233   
234          if ($row)
235          {
236              trigger_error('ALREADY_WARNED');
237          }
238   
239          $user_id = $user_row['user_id'];
240   
241          if (strpos($this->u_action, "&amp;f=$forum_id&amp;p=$post_id") === false)
242          {
243              $this->p_master->adjust_url("&amp;f=$forum_id&amp;p=$post_id");
244              $this->u_action .= "&amp;f=$forum_id&amp;p=$post_id";
245          }
246   
247          // Check if can send a notification
248          if ($config['allow_privmsg'])
249          {
250              $auth2 = new \phpbb\auth\auth();
251              $auth2->acl($user_row);
252              $s_can_notify = ($auth2->acl_get('u_readpm')) ? true : false;
253              unset($auth2);
254          }
255          else
256          {
257              $s_can_notify = false;
258          }
259   
260          // Prevent against clever people
261          if ($notify && !$s_can_notify)
262          {
263              $notify = false;
264          }
265   
266          if ($warning && $action == 'add_warning')
267          {
268              if (check_form_key('mcp_warn'))
269              {
270                  $s_mcp_warn_post = true;
271   
272                  /**
273                  * Event for before warning a user for a post.
274                  *
275                  * @event core.mcp_warn_post_before
276                  * @var array    user_row        The entire user row
277                  * @var string    warning            The warning message
278                  * @var bool        notify            If true, we notify the user for the warning
279                  * @var int        post_id            The post id for which the warning is added
280                  * @var bool        s_mcp_warn_post If true, we add the warning else we omit it
281                  * @since 3.1.0-b4
282                  */
283                  $vars = array(
284                          'user_row',
285                          'warning',
286                          'notify',
287                          'post_id',
288                          's_mcp_warn_post',
289                  );
290                  extract($phpbb_dispatcher->trigger_event('core.mcp_warn_post_before', compact($vars)));
291   
292                  if ($s_mcp_warn_post)
293                  {
294                      add_warning($user_row, $warning, $notify, $post_id);
295                      $message = $user->lang['USER_WARNING_ADDED'];
296   
297                      /**
298                      * Event for after warning a user for a post.
299                      *
300                      * @event core.mcp_warn_post_after
301                      * @var array    user_row    The entire user row
302                      * @var string    warning        The warning message
303                      * @var bool        notify        If true, the user was notified for the warning
304                      * @var int        post_id        The post id for which the warning is added
305                      * @var string    message        Message displayed to the moderator
306                      * @since 3.1.0-b4
307                      */
308                      $vars = array(
309                              'user_row',
310                              'warning',
311                              'notify',
312                              'post_id',
313                              'message',
314                      );
315                      extract($phpbb_dispatcher->trigger_event('core.mcp_warn_post_after', compact($vars)));
316                  }
317              }
318              else
319              {
320                  $message = $user->lang['FORM_INVALID'];
321              }
322   
323              if (!empty($message))
324              {
325                  $redirect = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=notes&amp;mode=user_notes&amp;u=$user_id");
326                  meta_refresh(2, $redirect);
327                  trigger_error($message . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
328              }
329          }
330   
331          // OK, they didn't submit a warning so lets build the page for them to do so
332   
333          // We want to make the message available here as a reminder
334          // Parse the message and subject
335          $parse_flags = OPTION_FLAG_SMILIES | ($user_row['bbcode_bitfield'] ? OPTION_FLAG_BBCODE : 0);
336          $message = generate_text_for_display($user_row['post_text'], $user_row['bbcode_uid'], $user_row['bbcode_bitfield'], $parse_flags, true);
337   
338          // Generate the appropriate user information for the user we are looking at
339          if (!function_exists('phpbb_get_user_rank'))
340          {
341              include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
342          }
343   
344          $user_rank_data = phpbb_get_user_rank($user_row, $user_row['user_posts']);
345          $avatar_img = phpbb_get_user_avatar($user_row);
346   
347          $template->assign_vars(array(
348              'U_POST_ACTION'        => $this->u_action,
349   
350              'POST'                => $message,
351              'USERNAME'            => $user_row['username'],
352              'USER_COLOR'        => (!empty($user_row['user_colour'])) ? $user_row['user_colour'] : '',
353              'RANK_TITLE'        => $user_rank_data['title'],
354              'JOINED'            => $user->format_date($user_row['user_regdate']),
355              'POSTS'                => ($user_row['user_posts']) ? $user_row['user_posts'] : 0,
356              'WARNINGS'            => ($user_row['user_warnings']) ? $user_row['user_warnings'] : 0,
357   
358              'AVATAR_IMG'        => $avatar_img,
359              'RANK_IMG'            => $user_rank_data['img'],
360   
361              '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"),
362   
363              'S_CAN_NOTIFY'        => $s_can_notify,
364          ));
365      }
366   
367      /**
368      * Handles warning the user
369      */
370      function mcp_warn_user_view($action)
371      {
372          global $phpEx, $phpbb_root_path, $config, $request;
373          global $template, $db, $user, $phpbb_dispatcher;
374   
375          $user_id = $request->variable('u', 0);
376          $username = $request->variable('username', '', true);
377          $notify = (isset($_REQUEST['notify_user'])) ? true : false;
378          $warning = $request->variable('warning', '', true);
379   
380          $sql_where = ($user_id) ? "user_id = $user_id" : "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
381   
382          $sql = 'SELECT *
383              FROM ' . USERS_TABLE . '
384              WHERE ' . $sql_where;
385          $result = $db->sql_query($sql);
386          $user_row = $db->sql_fetchrow($result);
387          $db->sql_freeresult($result);
388   
389          if (!$user_row)
390          {
391              trigger_error('NO_USER');
392          }
393   
394          // Prevent someone from warning themselves
395          if ($user_row['user_id'] == $user->data['user_id'])
396          {
397              trigger_error('CANNOT_WARN_SELF');
398          }
399   
400          $user_id = $user_row['user_id'];
401   
402          if (strpos($this->u_action, "&amp;u=$user_id") === false)
403          {
404              $this->p_master->adjust_url('&amp;u=' . $user_id);
405              $this->u_action .= "&amp;u=$user_id";
406          }
407   
408          // Check if can send a notification
409          if ($config['allow_privmsg'])
410          {
411              $auth2 = new \phpbb\auth\auth();
412              $auth2->acl($user_row);
413              $s_can_notify = ($auth2->acl_get('u_readpm')) ? true : false;
414              unset($auth2);
415          }
416          else
417          {
418              $s_can_notify = false;
419          }
420   
421          // Prevent against clever people
422          if ($notify && !$s_can_notify)
423          {
424              $notify = false;
425          }
426   
427          if ($warning && $action == 'add_warning')
428          {
429              if (check_form_key('mcp_warn'))
430              {
431                  $s_mcp_warn_user = true;
432   
433                  /**
434                  * Event for before warning a user from MCP.
435                  *
436                  * @event core.mcp_warn_user_before
437                  * @var array    user_row        The entire user row
438                  * @var string    warning            The warning message
439                  * @var bool        notify            If true, we notify the user for the warning
440                  * @var bool        s_mcp_warn_user If true, we add the warning else we omit it
441                  * @since 3.1.0-b4
442                  */
443                  $vars = array(
444                          'user_row',
445                          'warning',
446                          'notify',
447                          's_mcp_warn_user',
448                  );
449                  extract($phpbb_dispatcher->trigger_event('core.mcp_warn_user_before', compact($vars)));
450   
451                  if ($s_mcp_warn_user)
452                  {
453                      add_warning($user_row, $warning, $notify);
454                      $message = $user->lang['USER_WARNING_ADDED'];
455   
456                      /**
457                      * Event for after warning a user from MCP.
458                      *
459                      * @event core.mcp_warn_user_after
460                      * @var array    user_row    The entire user row
461                      * @var string    warning        The warning message
462                      * @var bool        notify        If true, the user was notified for the warning
463                      * @var string    message        Message displayed to the moderator
464                      * @since 3.1.0-b4
465                      */
466                      $vars = array(
467                              'user_row',
468                              'warning',
469                              'notify',
470                              'message',
471                      );
472                      extract($phpbb_dispatcher->trigger_event('core.mcp_warn_user_after', compact($vars)));
473                  }
474              }
475              else
476              {
477                  $message = $user->lang['FORM_INVALID'];
478              }
479   
480              if (!empty($message))
481              {
482                  $redirect = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=notes&amp;mode=user_notes&amp;u=$user_id");
483                  meta_refresh(2, $redirect);
484                  trigger_error($message . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
485              }
486          }
487   
488          // Generate the appropriate user information for the user we are looking at
489          if (!function_exists('phpbb_get_user_rank'))
490          {
491              include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
492          }
493          $user_rank_data = phpbb_get_user_rank($user_row, $user_row['user_posts']);
494          $avatar_img = phpbb_get_user_avatar($user_row);
495   
496          // OK, they didn't submit a warning so lets build the page for them to do so
497          $template->assign_vars(array(
498              'U_POST_ACTION'        => $this->u_action,
499   
500              'RANK_TITLE'        => $user_rank_data['title'],
501              'JOINED'            => $user->format_date($user_row['user_regdate']),
502              'POSTS'                => ($user_row['user_posts']) ? $user_row['user_posts'] : 0,
503              'WARNINGS'            => ($user_row['user_warnings']) ? $user_row['user_warnings'] : 0,
504   
505              'USERNAME_FULL'        => get_username_string('full', $user_row['user_id'], $user_row['username'], $user_row['user_colour']),
506              'USERNAME_COLOUR'    => get_username_string('colour', $user_row['user_id'], $user_row['username'], $user_row['user_colour']),
507              'USERNAME'            => get_username_string('username', $user_row['user_id'], $user_row['username'], $user_row['user_colour']),
508              'U_PROFILE'            => get_username_string('profile', $user_row['user_id'], $user_row['username'], $user_row['user_colour']),
509   
510              'AVATAR_IMG'        => $avatar_img,
511              'RANK_IMG'            => $user_rank_data['img'],
512   
513              'S_CAN_NOTIFY'        => $s_can_notify,
514          ));
515   
516          return $user_id;
517      }
518  }
519   
520  /**
521  * Insert the warning into the database
522  */
523  function add_warning($user_row, $warning, $send_pm = true, $post_id = 0)
524  {
525      global $phpEx, $phpbb_root_path, $config, $phpbb_log;
526      global $db, $user;
527   
528      if ($send_pm)
529      {
530          include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
531          include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);
532   
533          // Attempt to translate warning to language of user being warned if user's language differs from issuer's language
534          if ($user_row['user_lang'] != $user->lang_name)
535          {
536              $lang = array();
537   
538              $user_row['user_lang'] = (file_exists($phpbb_root_path . 'language/' . basename($user_row['user_lang']) . "/mcp." . $phpEx)) ? $user_row['user_lang'] : $config['default_lang'];
539              include($phpbb_root_path . 'language/' . basename($user_row['user_lang']) . "/mcp." . $phpEx);
540   
541              $warn_pm_subject = $lang['WARNING_PM_SUBJECT'];
542              $warn_pm_body = sprintf($lang['WARNING_PM_BODY'], $warning);
543   
544              unset($lang);
545          }
546          else
547          {
548              $warn_pm_subject = $user->lang('WARNING_PM_SUBJECT');
549              $warn_pm_body = $user->lang('WARNING_PM_BODY', $warning);
550          }
551   
552          $message_parser = new parse_message();
553   
554          $message_parser->message = $warn_pm_body;
555          $message_parser->parse(true, true, true, false, false, true, true);
556   
557          $pm_data = array(
558              'from_user_id'            => $user->data['user_id'],
559              'from_user_ip'            => $user->ip,
560              'from_username'            => $user->data['username'],
561              'enable_sig'            => false,
562              'enable_bbcode'            => true,
563              'enable_smilies'        => true,
564              'enable_urls'            => false,
565              'icon_id'                => 0,
566              'bbcode_bitfield'        => $message_parser->bbcode_bitfield,
567              'bbcode_uid'            => $message_parser->bbcode_uid,
568              'message'                => $message_parser->message,
569              'address_list'            => array('u' => array($user_row['user_id'] => 'to')),
570          );
571   
572          submit_pm('post', $warn_pm_subject, $pm_data, false);
573      }
574   
575      $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_USER_WARNING', false, array($user_row['username']));
576      $log_id = $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_WARNING_BODY', false, array(
577          'reportee_id' => $user_row['user_id'],
578          $warning
579      ));
580   
581      $sql_ary = array(
582          'user_id'        => $user_row['user_id'],
583          'post_id'        => $post_id,
584          'log_id'        => $log_id,
585          'warning_time'    => time(),
586      );
587   
588      $db->sql_query('INSERT INTO ' . WARNINGS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
589   
590      $sql = 'UPDATE ' . USERS_TABLE . '
591          SET user_warnings = user_warnings + 1,
592              user_last_warning = ' . time() . '
593          WHERE user_id = ' . $user_row['user_id'];
594      $db->sql_query($sql);
595   
596      // We add this to the mod log too for moderators to see that a specific user got warned.
597      $sql = 'SELECT forum_id, topic_id
598          FROM ' . POSTS_TABLE . '
599          WHERE post_id = ' . $post_id;
600      $result = $db->sql_query($sql);
601      $row = $db->sql_fetchrow($result);
602      $db->sql_freeresult($result);
603   
604      $phpbb_log->add('mod', $user->data['user_id'], $user->ip, 'LOG_USER_WARNING', false, array(
605          'forum_id' => $row['forum_id'],
606          'topic_id' => $row['topic_id'],
607          'post_id'  => $post_id,
608          $user_row['username']
609      ));
610  }
611