| [ Index ] |
PHP Cross Reference of MyBB 1.8.41 |
[Summary view] [Print] [Text view]
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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| 2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |