[ Index ]

PHP Cross Reference of MyBB 1.8.41

title

Body

[close]

/ -> warnings.php (source)

   1  <?php
   2  /**
   3   * MyBB 1.8
   4   * Copyright 2014 MyBB Group, All Rights Reserved
   5   *
   6   * Website: http://www.mybb.com
   7   * License: http://www.mybb.com/about/license
   8   *
   9   */
  10  
  11  define("IN_MYBB", 1);
  12  define('THIS_SCRIPT', 'warnings.php');
  13  
  14  $templatelist = "warnings,warnings_warn_post,warnings_active_header,warnings_expired_header,warnings_warning,warnings_warn_existing,warnings_warn_type,warnings_warn_custom,warnings_warn_pm,warnings_view";
  15  $templatelist .= ",warnings_view_post,warnings_view_user,warnings_view_revoke,warnings_view_revoked,warnings_warn_type_result,warnings_postlink,codebuttons,warnings_warn,warnings_warn_pm_anonymous";
  16  $templatelist .= ",multipage,multipage_end,multipage_jump_page,multipage_nextpage,multipage_page,multipage_page_current,multipage_page_link_current,multipage_prevpage,multipage_start,warnings_no_warnings";
  17  
  18  require_once  "./global.php";
  19  require_once  MYBB_ROOT."inc/functions_warnings.php";
  20  require_once  MYBB_ROOT."inc/functions_modcp.php";
  21  require_once  MYBB_ROOT."inc/class_parser.php";
  22  $parser = new postParser;
  23  
  24  $lang->load("warnings");
  25  $lang->load("datahandler_warnings");
  26  
  27  if($mybb->settings['enablewarningsystem'] == 0)
  28  {
  29      error($lang->error_warning_system_disabled);
  30  }
  31  
  32  // Expire old warnings
  33  require_once  MYBB_ROOT.'inc/datahandlers/warnings.php';
  34  $warningshandler = new WarningsHandler('update');
  35  
  36  $warningshandler->expire_warnings();
  37  
  38  $mybb->input['action'] = $mybb->get_input('action');
  39  
  40  $plugins->run_hooks("warnings_start");
  41  
  42  // Actually warn a user
  43  if($mybb->input['action'] == "do_warn" && $mybb->request_method == "post")
  44  {
  45      // Verify incoming POST request
  46      verify_post_check($mybb->get_input('my_post_key'));
  47  
  48      if($mybb->usergroup['canwarnusers'] != 1)
  49      {
  50          error_no_permission();
  51      }
  52  
  53      $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT));
  54  
  55      if(!$user)
  56      {
  57          error($lang->error_invalid_user);
  58      }
  59  
  60      $group_permissions = user_permissions($user['uid']);
  61  
  62      if($group_permissions['canreceivewarnings'] != 1)
  63      {
  64          error($lang->error_cant_warn_group);
  65      }
  66  
  67      if(!modcp_can_manage_user($user['uid']))
  68      {
  69          error($lang->error_cant_warn_user);
  70      }
  71  
  72      $plugins->run_hooks("warnings_do_warn_start");
  73  
  74      $warning = array(
  75          'uid' => $mybb->get_input('uid', MyBB::INPUT_INT),
  76          'notes' => $mybb->get_input('notes'),
  77          'type' => $mybb->get_input('type'),
  78          'custom_reason' => $mybb->get_input('custom_reason'),
  79          'custom_points' => $mybb->get_input('custom_points', MyBB::INPUT_INT),
  80          'expires' => $mybb->get_input('expires', MyBB::INPUT_INT),
  81          'expires_period' => $mybb->get_input('expires_period')
  82      );
  83  
  84      // Is this warning being given for a post?
  85      if($mybb->get_input('pid', MyBB::INPUT_INT))
  86      {
  87          $warning['pid'] = $mybb->get_input('pid', MyBB::INPUT_INT);
  88  
  89          $post = get_post($warning['pid']);
  90  
  91          $forum_permissions = forum_permissions($post['fid']);
  92  
  93          if($forum_permissions['canview'] != 1)
  94          {
  95              error_no_permission();
  96          }
  97      }
  98  
  99      $warningshandler->set_data($warning);
 100  
 101      if($warningshandler->validate_warning())
 102      {
 103          $warninginfo = $warningshandler->insert_warning();
 104  
 105          // Are we notifying the user?
 106          if($mybb->get_input('send_pm', MyBB::INPUT_INT) == 1 && $group_permissions['canusepms'] != 0 && $mybb->settings['enablepms'] != 0)
 107          {
 108  
 109              $pm = array(
 110                  'subject' => $mybb->get_input('pm_subject'),
 111                  'message' => $mybb->get_input('pm_message'),
 112                  'touid' => $user['uid']
 113              );
 114  
 115              $sender_uid = $mybb->user['uid'];
 116              if($mybb->settings['allowanonwarningpms'] == 1 && $mybb->get_input('pm_anonymous', MyBB::INPUT_INT))
 117              {
 118                  $sender_uid = -1;
 119                  // Workaround for eliminating PHP warnings in PHP 8. Ref: https://github.com/mybb/mybb/issues/4630#issuecomment-1369144163
 120                  $pm['sender']['uid'] = -1;
 121              }
 122  
 123              // Some kind of friendly error notification
 124              if(!send_pm($pm, $sender_uid, true))
 125              {
 126                  $warningshandler->friendly_action .= $lang->redirect_warned_pmerror;
 127              }
 128          }
 129  
 130          $plugins->run_hooks("warnings_do_warn_end");
 131  
 132          $lang->redirect_warned = $lang->sprintf($lang->redirect_warned, htmlspecialchars_uni($user['username']), $warningshandler->new_warning_level, $warningshandler->friendly_action);
 133  
 134          if(!empty($post['pid']))
 135          {
 136              redirect(get_post_link($post['pid']), $lang->redirect_warned);
 137          }
 138          else
 139          {
 140              redirect(get_profile_link($user['uid']), $lang->redirect_warned);
 141          }
 142      }
 143      else
 144      {
 145          $warn_errors = $warningshandler->get_friendly_errors();
 146          $warn_errors = inline_error($warn_errors);
 147          $mybb->input['action'] = 'warn';
 148      }
 149  }
 150  
 151  // Warn a user
 152  if($mybb->input['action'] == "warn")
 153  {
 154      if($mybb->usergroup['canwarnusers'] != 1)
 155      {
 156          error_no_permission();
 157      }
 158  
 159      // Check we haven't exceeded the maximum number of warnings per day
 160      if($mybb->usergroup['maxwarningsday'] != 0)
 161      {
 162          $timecut = TIME_NOW-60*60*24;
 163          $query = $db->simple_select("warnings", "COUNT(wid) AS given_today", "issuedby='{$mybb->user['uid']}' AND dateline>'$timecut'");
 164          $given_today = $db->fetch_field($query, "given_today");
 165          if($given_today >= $mybb->usergroup['maxwarningsday'])
 166          {
 167              error($lang->sprintf($lang->warnings_reached_max_warnings_day, $mybb->usergroup['maxwarningsday']));
 168          }
 169      }
 170  
 171      $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT));
 172      if(!$user)
 173      {
 174          error($lang->error_invalid_user);
 175      }
 176  
 177      if($user['uid'] == $mybb->user['uid'])
 178      {
 179          error($lang->warnings_error_cannot_warn_self);
 180      }
 181  
 182      if($user['warningpoints'] >= $mybb->settings['maxwarningpoints'])
 183      {
 184          error($lang->warnings_error_user_reached_max_warning);
 185      }
 186  
 187      $group_permissions = user_permissions($user['uid']);
 188  
 189      if($group_permissions['canreceivewarnings'] != 1)
 190      {
 191          error($lang->error_cant_warn_group);
 192      }
 193  
 194      if(!modcp_can_manage_user($user['uid']))
 195      {
 196          error($lang->error_cant_warn_user);
 197      }
 198  
 199      $post = $existing_warnings = '';
 200  
 201      // Giving a warning for a specific post
 202      if($mybb->get_input('pid', MyBB::INPUT_INT))
 203      {
 204          $post = get_post($mybb->get_input('pid', MyBB::INPUT_INT));
 205  
 206          if($post)
 207          {
 208              $thread = get_thread($post['tid']);
 209          }
 210  
 211          if(!$post || !$thread)
 212          {
 213              error($lang->warnings_error_invalid_post);
 214          }
 215  
 216          $forum_permissions = forum_permissions($thread['fid']);
 217          if($forum_permissions['canview'] != 1)
 218          {
 219              error_no_permission();
 220          }
 221  
 222          $post['subject'] = $parser->parse_badwords($post['subject']);
 223          $post['subject'] = htmlspecialchars_uni($post['subject']);
 224          $post_link = get_post_link($post['pid']);
 225          eval("\$post = \"".$templates->get("warnings_warn_post")."\";");
 226  
 227          // Fetch any existing warnings issued for this post
 228          $query = $db->query("
 229              SELECT w.*, t.title AS type_title, u.username
 230              FROM ".TABLE_PREFIX."warnings w
 231              LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid)
 232              LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby)
 233              WHERE w.pid='".$mybb->get_input('pid', MyBB::INPUT_INT)."'
 234              ORDER BY w.expired ASC, w.dateline DESC
 235          ");
 236          $last_expired = -1;
 237          $warnings = '';
 238          while($warning = $db->fetch_array($query))
 239          {
 240              if($warning['expired'] != $last_expired)
 241              {
 242                  if($warning['expired'] == 0)
 243                  {
 244                      eval("\$warnings .= \"".$templates->get("warnings_active_header")."\";");
 245                  }
 246                  else
 247                  {
 248                      eval("\$warnings .= \"".$templates->get("warnings_expired_header")."\";");
 249                  }
 250              }
 251              $last_expired = $warning['expired'];
 252  
 253              $post_link = "";
 254              $warning['username'] = htmlspecialchars_uni($warning['username']);
 255              $issuedby = build_profile_link($warning['username'], $warning['issuedby']);
 256              $date_issued = my_date('relative', $warning['dateline']);
 257              if($warning['type_title'])
 258              {
 259                  $warning_type = $warning['type_title'];
 260              }
 261              else
 262              {
 263                  $warning_type = $warning['title'];
 264              }
 265              $warning_type = htmlspecialchars_uni($warning_type);
 266              if($warning['points'] > 0)
 267              {
 268                  $warning['points'] = "+{$warning['points']}";
 269              }
 270              $points = $lang->sprintf($lang->warning_points, $warning['points']);
 271              if($warning['expired'] != 1)
 272              {
 273                  if($warning['expires'] == 0)
 274                  {
 275                      $expires = $lang->never;
 276                  }
 277                  else
 278                  {
 279                      $expires = nice_time($warning['expires']-TIME_NOW);
 280                  }
 281              }
 282              else
 283              {
 284                  if($warning['daterevoked'])
 285                  {
 286                      $expires = $lang->warning_revoked;
 287                  }
 288                  else if($warning['expires'])
 289                  {
 290                      $expires = $lang->already_expired;
 291                  }
 292              }
 293              $alt_bg = alt_trow();
 294              $plugins->run_hooks("warnings_warning");
 295              eval("\$warnings .= \"".$templates->get("warnings_warning")."\";");
 296          }
 297          if($warnings)
 298          {
 299              eval("\$existing_warnings = \"".$templates->get("warnings_warn_existing")."\";");
 300          }
 301      }
 302  
 303      $plugins->run_hooks("warnings_warn_start");
 304  
 305      $type_checked = array('custom' => '');
 306      $expires_period = array('hours' => '', 'days' => '', 'weeks' => '', 'months' => '', 'never' => '');
 307      $send_pm_checked = '';
 308  
 309      // Coming here from failed do_warn?
 310      $user['username'] = htmlspecialchars_uni($user['username']);
 311      if(!empty($warn_errors))
 312      {
 313          $notes = htmlspecialchars_uni($mybb->get_input('notes'));
 314          if($mybb->get_input('type', MyBB::INPUT_INT))
 315          {
 316              $type_checked[$mybb->get_input('type', MyBB::INPUT_INT)] = "checked=\"checked\"";
 317          }
 318          $pm_subject = htmlspecialchars_uni($mybb->get_input('pm_subject'));
 319          $message = htmlspecialchars_uni($mybb->get_input('pm_message'));
 320          if(!empty($mybb->input['send_pm']))
 321          {
 322              $send_pm_checked = "checked=\"checked\"";
 323          }
 324          $custom_reason = htmlspecialchars_uni($mybb->get_input('custom_reason'));
 325          $custom_points = $mybb->get_input('custom_points', MyBB::INPUT_INT);
 326          $expires = $mybb->get_input('expires', MyBB::INPUT_INT);
 327          if($mybb->get_input('expires_period'))
 328          {
 329              $expires_period[$mybb->get_input('expires_period')] = "selected=\"selected\"";
 330          }
 331      }
 332      else
 333      {
 334          $notes = $custom_reason = $custom_points = $expires = '';
 335          $expires = 1;
 336          $custom_points = 2;
 337          $pm_subject = $lang->warning_pm_subject;
 338          $message = $lang->sprintf($lang->warning_pm_message, $user['username'], $mybb->settings['bbname']);
 339          $warn_errors = '';
 340      }
 341  
 342      $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']);
 343      add_breadcrumb($lang->nav_profile, get_profile_link($user['uid']));
 344      add_breadcrumb($lang->nav_add_warning);
 345  
 346      $user_link = build_profile_link($user['username'], $user['uid']);
 347  
 348      if($mybb->settings['maxwarningpoints'] < 1)
 349      {
 350          $mybb->settings['maxwarningpoints'] = 10;
 351      }
 352  
 353      if(!is_array($groupscache))
 354      {
 355          $groupscache = $cache->read("usergroups");
 356      }
 357  
 358      $current_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100);
 359  
 360      // Fetch warning levels
 361      $levels = array();
 362      $query = $db->simple_select("warninglevels", "*");
 363      while($level = $db->fetch_array($query))
 364      {
 365          $level['action'] = my_unserialize($level['action']);
 366          switch($level['action']['type'])
 367          {
 368              case 1:
 369                  if($level['action']['length'] > 0)
 370                  {
 371                      $ban_length = fetch_friendly_expiration($level['action']['length']);
 372                      $lang_str = "expiration_".$ban_length['period'];
 373                      $period = $lang->sprintf($lang->result_period, $ban_length['time'], $lang->$lang_str);
 374                  }
 375                  else
 376                  {
 377                      $period = $lang->result_period_perm;
 378                  }
 379                  $group_name = $groupscache[$level['action']['usergroup']]['title'];
 380                  $level['friendly_action'] = $lang->sprintf($lang->result_banned, $group_name, $period);
 381                  break;
 382              case 2:
 383                  if($level['action']['length'] > 0)
 384                  {
 385                      $period = fetch_friendly_expiration($level['action']['length']);
 386                      $lang_str = "expiration_".$period['period'];
 387                      $period = $lang->sprintf($lang->result_period, $period['time'], $lang->$lang_str);
 388                  }
 389                  else
 390                  {
 391                      $period = $lang->result_period_perm;
 392                  }
 393                  $level['friendly_action'] = $lang->sprintf($lang->result_suspended, $period);
 394                  break;
 395              case 3:
 396                  if($level['action']['length'] > 0)
 397                  {
 398                      $period = fetch_friendly_expiration($level['action']['length']);
 399                      $lang_str = "expiration_".$period['period'];
 400                      $period = $lang->sprintf($lang->result_period, $period['time'], $lang->$lang_str);
 401                  }
 402                  else
 403                  {
 404                      $period = $lang->result_period_perm;
 405                  }
 406                  $level['friendly_action'] = $lang->sprintf($lang->result_moderated, $period);
 407                  break;
 408          }
 409          $levels[$level['percentage']] = $level;
 410      }
 411      krsort($levels);
 412  
 413      $types = '';
 414  
 415      // Fetch all current warning types
 416      $query = $db->simple_select("warningtypes", "*", "", array("order_by" => "title"));
 417      while($type = $db->fetch_array($query))
 418      {
 419          if(!isset($type_checked[$type['tid']]))
 420          {
 421              $type_checked[$type['tid']] = '';
 422          }
 423          $checked = $type_checked[$type['tid']];
 424          $type['title'] = htmlspecialchars_uni($type['title']);
 425          $new_warning_level = round(($user['warningpoints']+$type['points'])/$mybb->settings['maxwarningpoints']*100);
 426          if($new_warning_level > 100)
 427          {
 428              $new_warning_level = 100;
 429          }
 430          if($type['points'] > 0)
 431          {
 432              $type['points'] = "+{$type['points']}";
 433          }
 434          $points = $lang->sprintf($lang->warning_points, $type['points']);
 435  
 436          if(is_array($levels))
 437          {
 438              foreach($levels as $level)
 439              {
 440                  if($new_warning_level >= $level['percentage'])
 441                  {
 442                      $new_level = $level;
 443                      break;
 444                  }
 445              }
 446          }
 447          $level_diff = $new_warning_level-$current_level;
 448          $result = '';
 449          if(!empty($new_level['friendly_action']))
 450          {
 451              eval("\$result = \"".$templates->get("warnings_warn_type_result")."\";");
 452          }
 453          eval("\$types .= \"".$templates->get("warnings_warn_type")."\";");
 454          unset($new_level);
 455          unset($result);
 456      }
 457  
 458      $custom_warning = '';
 459  
 460      if($mybb->settings['allowcustomwarnings'] != 0)
 461      {
 462          if(empty($types) && empty($warn_errors) || $mybb->get_input('type') == 'custom')
 463          {
 464              $type_checked['custom'] = "checked=\"checked\"";
 465          }
 466  
 467          eval("\$custom_warning = \"".$templates->get("warnings_warn_custom")."\";");
 468      }
 469  
 470      $pm_notify = '';
 471  
 472      if($group_permissions['canusepms']  != 0 && $mybb->user['receivepms'] != 0 && $mybb->settings['enablepms'] != 0)
 473      {
 474          $smilieinserter = $codebuttons = "";
 475  
 476          if($mybb->settings['bbcodeinserter'] != 0 && $mybb->settings['pmsallowmycode'] != 0 && $mybb->user['showcodebuttons'] != 0)
 477          {
 478              $codebuttons = build_mycode_inserter("message", $mybb->settings['pmsallowsmilies']);
 479              if($mybb->settings['pmsallowsmilies'] != 0)
 480              {
 481                  $smilieinserter = build_clickable_smilies();
 482              }
 483          }
 484  
 485          $anonymous_pm = '';
 486          if($mybb->settings['allowanonwarningpms'] == 1)
 487          {
 488              $checked = '';
 489              if($mybb->get_input('pm_anonymous', MyBB::INPUT_INT))
 490              {
 491                  $checked = ' checked="checked"';
 492              }
 493  
 494              eval('$anonymous_pm = "'.$templates->get('warnings_warn_pm_anonymous').'";');
 495          }
 496  
 497          eval("\$pm_notify = \"".$templates->get("warnings_warn_pm")."\";");
 498      }
 499  
 500      $plugins->run_hooks("warnings_warn_end");
 501  
 502      eval("\$warn = \"".$templates->get("warnings_warn")."\";");
 503      output_page($warn);
 504      exit;
 505  }
 506  
 507  // Revoke a warning
 508  if($mybb->input['action'] == "do_revoke" && $mybb->request_method == "post")
 509  {
 510      // Verify incoming POST request
 511      verify_post_check($mybb->get_input('my_post_key'));
 512  
 513      if($mybb->usergroup['canwarnusers'] != 1)
 514      {
 515          error_no_permission();
 516      }
 517  
 518      $warning = $warningshandler->get($mybb->input['wid']);
 519  
 520      if(!$warning)
 521      {
 522          error($lang->error_invalid_warning);
 523      }
 524      else if($warning['daterevoked'])
 525      {
 526          error($lang->warning_already_revoked);
 527      }
 528  
 529      $user = get_user($warning['uid']);
 530  
 531      if(!modcp_can_manage_user($user['uid']))
 532      {
 533          error_no_permission();
 534      }
 535  
 536      $group_permissions = user_permissions($user['uid']);
 537      if($group_permissions['canreceivewarnings'] != 1)
 538      {
 539          error($lang->error_cant_warn_group);
 540      }
 541  
 542      $plugins->run_hooks("warnings_do_revoke_start");
 543  
 544      if(!trim($mybb->get_input('reason')))
 545      {
 546          $warn_errors[] = $lang->no_revoke_reason;
 547          $warn_errors = inline_error($warn_errors);
 548          $mybb->input['action'] = "view";
 549      }
 550      else
 551      {
 552          $warning_data = array(
 553              'wid' => $warning['wid'],
 554              'reason' => $mybb->get_input('reason'),
 555              'expired' => $warning['expired'],
 556              'uid' => $warning['uid'],
 557              'points' => $warning['points']
 558          );
 559  
 560          $warningshandler->set_data($warning_data);
 561  
 562          $warningshandler->update_warning();
 563  
 564          redirect("warnings.php?action=view&wid={$warning['wid']}", $lang->redirect_warning_revoked);
 565      }
 566  }
 567  
 568  // Detailed view of a warning
 569  if($mybb->input['action'] == "view")
 570  {
 571      if($mybb->usergroup['canwarnusers'] != 1)
 572      {
 573          error_no_permission();
 574      }
 575  
 576      $query = $db->query("
 577          SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject
 578          FROM ".TABLE_PREFIX."warnings w
 579          LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid)
 580          LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby)
 581          LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid)
 582          WHERE w.wid='".$mybb->get_input('wid', MyBB::INPUT_INT)."'
 583      ");
 584      $warning = $db->fetch_array($query);
 585  
 586      if(!$warning)
 587      {
 588          error($lang->error_invalid_warning);
 589      }
 590  
 591      $user = get_user((int)$warning['uid']);
 592      if(empty($user))
 593      {
 594          $user = array('uid' => 0, 'username' => $lang->guest);
 595      }
 596  
 597      if(!modcp_can_manage_user($user['uid']))
 598      {
 599          error_no_permission();
 600      }
 601  
 602      $user['username'] = htmlspecialchars_uni($user['username']);
 603  
 604      $group_permissions = user_permissions($user['uid']);
 605      if($group_permissions['canreceivewarnings'] != 1)
 606      {
 607          error($lang->error_cant_warn_group);
 608      }
 609  
 610      $plugins->run_hooks("warnings_view_start");
 611  
 612      $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']);
 613      if(!empty($user['uid']))
 614      {
 615          add_breadcrumb($lang->nav_profile, get_profile_link($user['uid']));
 616          add_breadcrumb($lang->nav_warning_log, "warnings.php?uid={$user['uid']}");
 617      }
 618      else
 619      {
 620          add_breadcrumb($lang->nav_profile);
 621          add_breadcrumb($lang->nav_warning_log);
 622      }
 623      add_breadcrumb($lang->nav_view_warning);
 624  
 625      $user_link = build_profile_link($user['username'], $user['uid']);
 626  
 627      $post_link = "";
 628      if($warning['post_subject'])
 629      {
 630          $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']);
 631          $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']);
 632          $post_link = get_post_link($warning['pid'])."#pid{$warning['pid']}";
 633          eval("\$warning_info = \"".$templates->get("warnings_view_post")."\";");
 634      }
 635      else
 636      {
 637          eval("\$warning_info = \"".$templates->get("warnings_view_user")."\";");
 638      }
 639  
 640      $warning['username'] = htmlspecialchars_uni($warning['username']);
 641      $issuedby = build_profile_link($warning['username'], $warning['issuedby']);
 642      $notes = nl2br(htmlspecialchars_uni($warning['notes']));
 643  
 644      $date_issued = my_date('relative', $warning['dateline']);
 645      if($warning['type_title'])
 646      {
 647          $warning_type = $warning['type_title'];
 648      }
 649      else
 650      {
 651          $warning_type = $warning['title'];
 652      }
 653      $warning_type = htmlspecialchars_uni($warning_type);
 654      if($warning['points'] > 0)
 655      {
 656          $warning['points'] = "+{$warning['points']}";
 657      }
 658  
 659      $revoked_date = '';
 660  
 661      $points = $lang->sprintf($lang->warning_points, $warning['points']);
 662      if($warning['expired'] != 1)
 663      {
 664          if($warning['expires'] == 0)
 665          {
 666              $expires = $lang->never;
 667          }
 668          else
 669          {
 670              $expires = my_date('normal', $warning['expires']); // Purposely not using nice_time here as the moderator has clicked for more details so the actual day/time should be shown
 671          }
 672          $status = $lang->warning_active;
 673      }
 674      else
 675      {
 676          if($warning['daterevoked'])
 677          {
 678              $expires = $status = $lang->warning_revoked;
 679          }
 680          else if($warning['expires'])
 681          {
 682              $revoked_date = '('.my_date('normal', $warning['expires']).')';
 683              $expires = $status = $lang->already_expired;
 684          }
 685      }
 686  
 687      if(!$warning['daterevoked'])
 688      {
 689          if(!isset($warn_errors))
 690          {
 691              $warn_errors = '';
 692          }
 693          eval("\$revoke = \"".$templates->get("warnings_view_revoke")."\";");
 694      }
 695      else
 696      {
 697          $date_revoked = my_date('relative', $warning['daterevoked']);
 698          $revoked_user = get_user($warning['revokedby']);
 699          if(!$revoked_user['username'])
 700          {
 701              $revoked_user['username'] = $lang->guest;
 702          }
 703          $revoked_user['username'] = htmlspecialchars_uni($revoked_user['username']);
 704          $revoked_by = build_profile_link($revoked_user['username'], $revoked_user['uid']);
 705          $revoke_reason = nl2br(htmlspecialchars_uni($warning['revokereason']));
 706          eval("\$revoke = \"".$templates->get("warnings_view_revoked")."\";");
 707      }
 708  
 709      $plugins->run_hooks("warnings_view_end");
 710  
 711      eval("\$warning = \"".$templates->get("warnings_view")."\";");
 712      output_page($warning);
 713  }
 714  
 715  // Showing list of warnings for a particular user
 716  if(!$mybb->input['action'])
 717  {
 718      if($mybb->usergroup['canwarnusers'] != 1)
 719      {
 720          error_no_permission();
 721      }
 722  
 723      $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT));
 724      if(!$user)
 725      {
 726          error($lang->error_invalid_user);
 727      }
 728  
 729      if(!modcp_can_manage_user($user['uid']))
 730      {
 731          error_no_permission();
 732      }
 733  
 734      $group_permissions = user_permissions($user['uid']);
 735      if($group_permissions['canreceivewarnings'] != 1)
 736      {
 737          error($lang->error_cant_warn_group);
 738      }
 739  
 740      $user['username'] = htmlspecialchars_uni($user['username']);
 741      $lang->nav_profile = $lang->sprintf($lang->nav_profile, $user['username']);
 742      add_breadcrumb($lang->nav_profile, get_profile_link($user['uid']));
 743      add_breadcrumb($lang->nav_warning_log);
 744  
 745      if(!$mybb->settings['postsperpage'] || (int)$mybb->settings['postsperpage'] < 1)
 746      {
 747          $mybb->settings['postsperpage'] = 20;
 748      }
 749  
 750      // Figure out if we need to display multiple pages.
 751      $perpage = $mybb->settings['postsperpage'];
 752      $page = $mybb->get_input('page', MyBB::INPUT_INT);
 753  
 754      $query = $db->simple_select("warnings", "COUNT(wid) AS warning_count", "uid='{$user['uid']}'");
 755      $warning_count = $db->fetch_field($query, "warning_count");
 756  
 757      $pages = ceil($warning_count/$perpage);
 758  
 759      if($page > $pages || $page <= 0)
 760      {
 761          $page = 1;
 762      }
 763      if($page)
 764      {
 765          $start = ($page-1) * $perpage;
 766      }
 767      else
 768      {
 769          $start = 0;
 770          $page = 1;
 771      }
 772  
 773      $multipage = multipage($warning_count, $perpage, $page, "warnings.php?uid={$user['uid']}");
 774  
 775      if($mybb->settings['maxwarningpoints'] < 1)
 776      {
 777          $mybb->settings['maxwarningpoints'] = 10;
 778      }
 779  
 780      $warning_level = round($user['warningpoints']/$mybb->settings['maxwarningpoints']*100);
 781      if($warning_level > 100)
 782      {
 783          $warning_level = 100;
 784      }
 785  
 786      if($user['warningpoints'] > $mybb->settings['maxwarningpoints'])
 787      {
 788          $user['warningpoints'] = $mybb->settings['maxwarningpoints'];
 789      }
 790  
 791      if($warning_level > 0)
 792      {
 793          $lang->current_warning_level = $lang->sprintf($lang->current_warning_level, $warning_level, $user['warningpoints'], $mybb->settings['maxwarningpoints']);
 794      }
 795      else
 796      {
 797          $lang->current_warning_level = "";
 798      }
 799  
 800      // Fetch the actual warnings
 801      $query = $db->query("
 802          SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject
 803          FROM ".TABLE_PREFIX."warnings w
 804          LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid)
 805          LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby)
 806          LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid)
 807          WHERE w.uid='{$user['uid']}'
 808          ORDER BY w.expired ASC, w.dateline DESC
 809          LIMIT {$start}, {$perpage}
 810      ");
 811      $warnings = '';
 812      while($warning = $db->fetch_array($query))
 813      {
 814          if(!isset($last_expired) || $warning['expired'] != $last_expired)
 815          {
 816              if($warning['expired'] == 0)
 817              {
 818                  eval("\$warnings .= \"".$templates->get("warnings_active_header")."\";");
 819              }
 820              else
 821              {
 822                  eval("\$warnings .= \"".$templates->get("warnings_expired_header")."\";");
 823              }
 824          }
 825          $last_expired = $warning['expired'];
 826  
 827          $post_link = '';
 828          if($warning['post_subject'])
 829          {
 830              $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']);
 831              $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']);
 832              $warning['post_link'] = get_post_link($warning['pid']);
 833              eval("\$post_link = \"".$templates->get("warnings_postlink")."\";");
 834          }
 835  
 836          $warning['username'] = htmlspecialchars_uni($warning['username']);
 837          $issuedby = build_profile_link($warning['username'], $warning['issuedby']);
 838          $date_issued = my_date('relative', $warning['dateline']);
 839          if($warning['type_title'])
 840          {
 841              $warning_type = $warning['type_title'];
 842          }
 843          else
 844          {
 845              $warning_type = $warning['title'];
 846          }
 847          $warning_type = htmlspecialchars_uni($warning_type);
 848          if($warning['points'] > 0)
 849          {
 850              $warning['points'] = "+{$warning['points']}";
 851          }
 852          $points = $lang->sprintf($lang->warning_points, $warning['points']);
 853          if($warning['expired'] != 1)
 854          {
 855              if($warning['expires'] == 0)
 856              {
 857                  $expires = $lang->never;
 858              }
 859              else
 860              {
 861                  $expires = nice_time($warning['expires']-TIME_NOW);
 862              }
 863          }
 864          else
 865          {
 866              if($warning['daterevoked'])
 867              {
 868                  $expires = $lang->warning_revoked;
 869              }
 870              else if($warning['expires'])
 871              {
 872                  $expires = $lang->already_expired;
 873              }
 874          }
 875          $alt_bg = alt_trow();
 876          $plugins->run_hooks("warnings_warning");
 877          eval("\$warnings .= \"".$templates->get("warnings_warning")."\";");
 878      }
 879  
 880      if(!$warnings)
 881      {
 882          eval("\$warnings = \"".$templates->get("warnings_no_warnings")."\";");
 883      }
 884  
 885      $plugins->run_hooks("warnings_end");
 886  
 887      eval("\$warnings = \"".$templates->get("warnings")."\";");
 888      output_page($warnings);
 889  }
 890  


2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup Cross-referenced by PHPXref