[ Index ]

PHP Cross Reference of phpBB 3.0 Beta 3

title

Body

[close]

/includes/mcp/ -> mcp_warn.php (source)

   1  <?php
   2  /** 
   3  *
   4  * @package mcp
   5  * @version $Id: mcp_warn.php,v 1.34 2006/10/20 13:47:29 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  * mcp_warn
  13  * Handling warning the users
  14  * @package mcp
  15  */
  16  class mcp_warn
  17  {
  18      var $p_master;
  19      var $u_action;
  20  
  21  	function mcp_main(&$p_master)
  22      {
  23          $this->p_master = &$p_master;
  24      }
  25  
  26  	function main($id, $mode)
  27      {
  28          global $auth, $db, $user, $template;
  29          global $config, $phpbb_root_path, $phpEx;
  30  
  31          $action = request_var('action', array('' => ''));
  32  
  33          if (is_array($action))
  34          {
  35              list($action, ) = each($action);
  36          }
  37  
  38          $this->page_title = 'MCP_WARN';
  39  
  40          switch ($mode)
  41          {
  42              case 'front':
  43                  mcp_warn_front_view($id, $mode);
  44                  $this->tpl_name = 'mcp_warn_front';
  45              break;
  46  
  47              case 'list':
  48                  mcp_warn_list_view($id, $mode, $action);
  49                  $this->tpl_name = 'mcp_warn_list';
  50              break;
  51  
  52              case 'warn_post':
  53                  mcp_warn_post_view($id, $mode, $action);
  54                  $this->tpl_name = 'mcp_warn_post';
  55              break;
  56  
  57              case 'warn_user':
  58                  mcp_warn_user_view($id, $mode, $action);
  59                  $this->tpl_name = 'mcp_warn_user';
  60              break;
  61          }
  62      }
  63  }
  64  
  65  /**
  66  * Generates the summary on the main page of the warning module
  67  */
  68  function mcp_warn_front_view($id, $mode)
  69  {
  70      global $phpEx, $phpbb_root_path, $config;
  71      global $template, $db, $user, $auth;
  72  
  73      $template->assign_vars(array(
  74          'U_FIND_MEMBER'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=mcp&amp;field=username'),
  75          'U_POST_ACTION'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&amp;mode=warn_user'),
  76          )
  77      );
  78  
  79      // Obtain a list of the 5 naughtiest users....
  80      // These are the 5 users with the highest warning count
  81  
  82      $highest = array();
  83      $count = 0;
  84  
  85      view_warned_users($highest, $count, 5);
  86  
  87      foreach ($highest as $row)
  88      {
  89          $template->assign_block_vars('highest', array(
  90              'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
  91              'U_USER'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
  92  
  93              'USERNAME'        => $row['username'],
  94              'WARNING_TIME'    => $user->format_date($row['user_last_warning']),
  95              'WARNINGS'        => $row['user_warnings'],
  96              )
  97          );
  98      }
  99  
 100      // And now the 5 most recent users to get in trouble
 101  
 102      $sql = 'SELECT u.user_id, u.username, u.user_warnings, w.warning_time
 103          FROM ' . USERS_TABLE . ' u, ' . WARNINGS_TABLE . ' w
 104          WHERE u.user_id = w.user_id
 105          ORDER BY w.warning_time DESC';
 106      $result = $db->sql_query_limit($sql, 5);
 107  
 108      while ($row = $db->sql_fetchrow($result))
 109      {
 110          $template->assign_block_vars('latest', array(
 111              'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
 112              'U_USER'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
 113  
 114              'USERNAME'        => $row['username'],
 115              'WARNING_TIME'    => $user->format_date($row['warning_time']),
 116              'WARNINGS'        => $row['user_warnings'],
 117              )
 118          );
 119      }
 120      $db->sql_freeresult($result);
 121  }
 122  
 123  /**
 124  * Lists all users with warnings
 125  */
 126  function mcp_warn_list_view($id, $mode, $action)
 127  {
 128      global $phpEx, $phpbb_root_path, $config;
 129      global $template, $db, $user, $auth;
 130  
 131      $user->add_lang('memberlist');
 132  
 133      $start    = request_var('start', 0);
 134      $st        = request_var('st', 0);
 135      $sk        = request_var('sk', 'b');
 136      $sd        = request_var('sd', 'd');
 137  
 138      $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']);
 139      $sort_by_text = array('a' => $user->lang['SORT_USERNAME'], 'b' => $user->lang['SORT_DATE'], 'c' => $user->lang['SORT_WARNINGS']);
 140      $sort_by_sql = array('a' => 'username', 'b' => 'user_last_warning', 'c' => 'user_warnings');
 141  
 142      $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
 143      gen_sort_selects($limit_days, $sort_by_text, $st, $sk, $sd, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
 144  
 145      // Define where and sort sql for use in displaying logs
 146      $sql_where = ($st) ? (time() - ($st * 86400)) : 0;
 147      $sql_sort = $sort_by_sql[$sk] . ' ' . (($sd == 'd') ? 'DESC' : 'ASC');
 148  
 149      $users = array();
 150      $user_count = 0;
 151  
 152      view_warned_users($users, $user_count, $config['topics_per_page'], $start, $sql_where, $sql_sort);
 153  
 154      foreach ($users as $row)
 155      {
 156          $template->assign_block_vars('user', array(
 157              'U_NOTES'        => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $row['user_id']),
 158              'U_USER'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
 159  
 160              'USERNAME'        => $row['username'],
 161              'WARNING_TIME'    => $user->format_date($row['user_last_warning']),
 162              'WARNINGS'        => $row['user_warnings'],
 163              )
 164          );
 165      }
 166  
 167      $template->assign_vars(array(
 168          'U_POST_ACTION'            => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;mode=$mode"),
 169          'S_CLEAR_ALLOWED'        => ($auth->acl_get('a_clearlogs')) ? true : false,
 170          'S_SELECT_SORT_DIR'        => $s_sort_dir,
 171          'S_SELECT_SORT_KEY'        => $s_sort_key,
 172          'S_SELECT_SORT_DAYS'    => $s_limit_days,
 173  
 174          'PAGE_NUMBER'        => on_page($user_count, $config['topics_per_page'], $start),
 175          'PAGINATION'        => generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;mode=$mode&amp;st=$st&amp;sk=$sk&amp;sd=$sd"), $user_count, $config['topics_per_page'], $start),
 176          'TOTAL_USERS'        => ($user_count == 1) ? $user->lang['LIST_USER'] : sprintf($user->lang['LIST_USERS'], $user_count),
 177          )
 178      );
 179  
 180  }
 181  
 182  /**
 183  * Handles warning the user when the warning is for a specific post
 184  */
 185  function mcp_warn_post_view($id, $mode, $action)
 186  {
 187      global $phpEx, $phpbb_root_path, $config;
 188      global $template, $db, $user, $auth;
 189  
 190      $post_id = request_var('p', 0);
 191      $forum_id = request_var('f', 0);
 192      $notify = (isset($_REQUEST['notify_user'])) ? true : false;
 193      $warning = request_var('warning', '', true);
 194  
 195      $sql = 'SELECT u.*, p.*
 196          FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . " u 
 197          WHERE post_id = $post_id
 198              AND u.user_id = p.poster_id";
 199      $result = $db->sql_query($sql);
 200      $userrow = $db->sql_fetchrow($result);
 201      $db->sql_freeresult($result);
 202  
 203      if (!$userrow)
 204      {
 205          trigger_error($user->lang['NO_POST']);
 206      }
 207  
 208      // There is no point issuing a warning to ignored users (ie anonymous and bots)
 209      if ($userrow['user_type'] == USER_IGNORE)
 210      {
 211          trigger_error($user->lang['CANNOT_WARN_ANONYMOUS']);
 212      }
 213  
 214      // Prevent someone from warning themselves
 215      if ($userrow['user_id'] == $user->data['user_id'])
 216      {
 217          trigger_error($user->lang['CANNOT_WARN_SELF']);
 218      }
 219  
 220      // Check if there is already a warning for this post to prevent multiple
 221      // warnings for the same offence
 222      $sql = 'SELECT post_id
 223          FROM ' . WARNINGS_TABLE . "
 224          WHERE post_id = $post_id";
 225      $result = $db->sql_query($sql);
 226      $row = $db->sql_fetchrow($result);
 227      $db->sql_freeresult($result);
 228  
 229      if ($row)
 230      {
 231          trigger_error($user->lang['ALREADY_WARNED']);
 232      }
 233  
 234      $user_id = $userrow['user_id'];
 235  
 236      if ($warning && $action == 'add_warning')
 237      {
 238          add_warning($userrow, $warning, $notify, $post_id);
 239  
 240          $redirect = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=notes&amp;mode=user_notes&amp;u=$user_id");
 241          meta_refresh(2, $redirect);
 242          trigger_error($user->lang['USER_WARNING_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
 243      }
 244  
 245      // OK, they didn't submit a warning so lets build the page for them to do so
 246      
 247      // We want to make the message available here as a reminder
 248      // Parse the message and subject
 249      $message = $userrow['post_text'];
 250      $message = str_replace("\n", '<br />', censor_text($message));
 251  
 252      // Second parse bbcode here
 253      if ($userrow['bbcode_bitfield'])
 254      {
 255          include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
 256  
 257          $bbcode = new bbcode($userrow['bbcode_bitfield']);
 258          $bbcode->bbcode_second_pass($message, $userrow['bbcode_uid'], $userrow['bbcode_bitfield']);
 259      }
 260  
 261      // Always process smilies after parsing bbcodes
 262      $message = smiley_text($message);
 263  
 264      // Generate the appropriate user information for the user we are looking at
 265      $rank_title = $rank_img = '';
 266  //    get_user_rank($userrow['user_rank'], $userrow['user_posts'], $rank_title, $rank_img);
 267  
 268      $avatar_img = '';
 269      if (!empty($userrow['user_avatar']))
 270      {
 271          switch ($userrow['user_avatar_type'])
 272          {
 273              case AVATAR_UPLOAD:
 274                  $avatar_img = $config['avatar_path'] . '/';
 275              break;
 276  
 277              case AVATAR_GALLERY:
 278                  $avatar_img = $config['avatar_gallery_path'] . '/';
 279              break;
 280          }
 281          $avatar_img .= $userrow['user_avatar'];
 282  
 283          $avatar_img = '<img src="' . $avatar_img . '" width="' . $userrow['user_avatar_width'] . '" height="' . $userrow['user_avatar_height'] . '" alt="" />';
 284      }
 285  
 286      $template->assign_vars(array(
 287          'U_POST_ACTION'        => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;mode=$mode&amp;p=$post_id"),
 288  
 289          'POST'                => $message,
 290          'USERNAME'            => $userrow['username'],
 291          'USER_COLOR'        => (!empty($userrow['user_colour'])) ? $userrow['user_colour'] : '',
 292          'RANK_TITLE'        => $rank_title,
 293          'JOINED'            => $user->format_date($userrow['user_regdate']),
 294          'POSTS'                => ($userrow['user_posts']) ? $userrow['user_posts'] : 0,
 295  
 296          'AVATAR_IMG'        => $avatar_img,
 297          'RANK_IMG'            => $rank_img,
 298  
 299          'L_WARNING_POST_DEFAULT'    => sprintf($user->lang['WARNING_POST_DEFAULT'], generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&amp;p=$post_id"),
 300          )
 301      );
 302  }
 303  
 304  /**
 305  * Handles warning the user
 306  */
 307  function mcp_warn_user_view($id, $mode, $action)
 308  {
 309      global $phpEx, $phpbb_root_path, $config;
 310      global $template, $db, $user, $auth;
 311  
 312      $user_id = request_var('u', 0);
 313      $username = request_var('username', '', true);
 314      $notify = (isset($_REQUEST['notify_user'])) ? true : false;
 315      $warning = request_var('warning', '', true);
 316  
 317      $sql_where = ($user_id) ? "user_id = $user_id" : "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
 318  
 319      $sql = 'SELECT *
 320          FROM ' . USERS_TABLE . '
 321          WHERE ' . $sql_where;
 322      $result = $db->sql_query($sql);
 323      $userrow = $db->sql_fetchrow($result);
 324      $db->sql_freeresult($result);
 325  
 326      if (!$userrow)
 327      {
 328          trigger_error('NO_USER');
 329      }
 330  
 331      // Prevent someone from warning themselves
 332      if ($userrow['user_id'] == $user->data['user_id'])
 333      {
 334          trigger_error($user->lang['CANNOT_WARN_SELF']);
 335      }
 336  
 337      $user_id = $userrow['user_id'];
 338  
 339      if ($warning && $action == 'add_warning')
 340      {
 341          add_warning($userrow, $warning, $notify);
 342  
 343          $redirect = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=notes&amp;mode=user_notes&amp;u=$user_id");
 344          meta_refresh(2, $redirect);
 345          trigger_error($user->lang['USER_WARNING_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'));
 346      }
 347  
 348      // Generate the appropriate user information for the user we are looking at
 349      $rank_title = $rank_img = '';
 350  //    get_user_rank($userrow['user_rank'], $userrow['user_posts'], $rank_title, $rank_img);
 351  
 352      $avatar_img = '';
 353      if (!empty($userrow['user_avatar']))
 354      {
 355          switch ($userrow['user_avatar_type'])
 356          {
 357              case AVATAR_UPLOAD:
 358                  $avatar_img = $config['avatar_path'] . '/';
 359              break;
 360  
 361              case AVATAR_GALLERY:
 362                  $avatar_img = $config['avatar_gallery_path'] . '/';
 363              break;
 364          }
 365          $avatar_img .= $userrow['user_avatar'];
 366  
 367          $avatar_img = '<img src="' . $avatar_img . '" width="' . $userrow['user_avatar_width'] . '" height="' . $userrow['user_avatar_height'] . '" alt="" />';
 368      }
 369  
 370      // OK, they didn't submit a warning so lets build the page for them to do so
 371      $template->assign_vars(array(
 372          'U_POST_ACTION'        => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;mode=$mode&amp;u=$user_id"),
 373  
 374          'USERNAME'            => $userrow['username'],
 375          'USER_COLOR'        => (!empty($userrow['user_colour'])) ? $userrow['user_colour'] : '',
 376          'RANK_TITLE'        => $rank_title,
 377          'JOINED'            => $user->format_date($userrow['user_regdate']),
 378          'POSTS'                => ($userrow['user_posts']) ? $userrow['user_posts'] : 0,
 379          'WARNINGS'            => ($userrow['user_warnings']) ? $userrow['user_warnings'] : 0,
 380  
 381          'AVATAR_IMG'        => $avatar_img,
 382          'RANK_IMG'            => $rank_img,
 383          )
 384      );
 385  }
 386  
 387  /**
 388  * Insert the warning into the database
 389  */
 390  function add_warning($userrow, $warning, $send_pm = true, $post_id = 0)
 391  {
 392      global $phpEx, $phpbb_root_path, $config;
 393      global $template, $db, $user, $auth;
 394  
 395      if ($send_pm)
 396      {
 397          include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
 398          include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);
 399  
 400          $userrow['user_lang'] = (file_exists($phpbb_root_path . 'language/' . $userrow['user_lang'] . "/mcp.$phpEx")) ? $userrow['user_lang'] : $config['default_lang'];
 401          include($phpbb_root_path . 'language/' . basename($userrow['user_lang']) . "/mcp.$phpEx");
 402  
 403          $message_parser = new parse_message();
 404  
 405          $message_parser->message = sprintf($lang['WARNING_PM_BODY'], $warning);
 406          $message_parser->parse(true, true, true, false, false, true, true);
 407  
 408          $pm_data = array(
 409              'from_user_id'            => $user->data['user_id'],
 410              'from_user_ip'            => $user->data['user_ip'],
 411              'from_username'            => $user->data['username'],
 412              'enable_sig'            => false,
 413              'enable_bbcode'            => true,
 414              'enable_smilies'        => true,
 415              'enable_urls'            => false,
 416              'icon_id'                => 0,
 417              'bbcode_bitfield'        => $message_parser->bbcode_bitfield,
 418              'bbcode_uid'            => $message_parser->bbcode_uid,
 419              'message'                => $message_parser->message,
 420              'address_list'            => array('u' => array($userrow['user_id'] => 'to')),
 421          );
 422  
 423          submit_pm('post', $lang['WARNING_PM_SUBJECT'], $pm_data, false, false);
 424      }
 425  
 426      add_log('admin', 'LOG_USER_WARNING', $userrow['username']);
 427      $log_id = add_log('user', $userrow['user_id'], 'LOG_USER_WARNING_BODY', $warning);
 428  
 429      $sql_ary = array(
 430          'user_id'        => $userrow['user_id'],
 431          'post_id'        => $post_id,
 432          'log_id'        => $log_id,
 433          'warning_time'    => time(),
 434      );
 435  
 436      $db->sql_query('INSERT INTO ' . WARNINGS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
 437  
 438      $sql = 'UPDATE ' . USERS_TABLE . ' 
 439          SET user_warnings = user_warnings + 1,
 440              user_last_warning = ' . time() . '
 441          WHERE user_id = ' . $userrow['user_id'];
 442      $db->sql_query($sql);
 443  }
 444  
 445  ?>


Generated: Wed Nov 22 00:35:05 2006 Cross-referenced by PHPXref 0.6