contest_members.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. requirePHPLib('form');
  3. if (!validateUInt($_GET['id']) || !($contest = queryContest($_GET['id']))) {
  4. become404Page();
  5. }
  6. genMoreContestInfo($contest);
  7. $has_contest_permission = hasContestPermission($myUser, $contest);
  8. $show_ip = $has_contest_permission;
  9. if ($contest['cur_progress'] == CONTEST_NOT_STARTED) {
  10. $iHasRegistered = $myUser != null && hasRegistered($myUser, $contest);
  11. if ($iHasRegistered) {
  12. $unregister_form = new UOJForm('unregister');
  13. $unregister_form->handle = function() {
  14. global $myUser, $contest;
  15. DB::query("delete from contests_registrants where username = '{$myUser['username']}' and contest_id = {$contest['id']}");
  16. updateContestPlayerNum($contest);
  17. };
  18. $unregister_form->submit_button_config['class_str'] = 'btn btn-danger btn-xs';
  19. $unregister_form->submit_button_config['text'] = '取消报名';
  20. $unregister_form->succ_href = "/contests";
  21. $unregister_form->runAtServer();
  22. }
  23. if ($has_contest_permission) {
  24. $pre_rating_form = new UOJForm('pre_rating');
  25. $pre_rating_form->handle = function() {
  26. global $contest;
  27. foreach (DB::selectAll("select * from contests_registrants where contest_id = {$contest['id']}") as $reg) {
  28. $user = queryUser($reg['username']);
  29. DB::update("update contests_registrants set user_rating = {$user['rating']} where contest_id = {$contest['id']} and username = '{$user['username']}'");
  30. }
  31. };
  32. $pre_rating_form->submit_button_config['align'] = 'right';
  33. $pre_rating_form->submit_button_config['class_str'] = 'btn btn-warning';
  34. $pre_rating_form->submit_button_config['text'] = '重新计算参赛前的 rating';
  35. $pre_rating_form->submit_button_config['smart_confirm'] = '';
  36. $pre_rating_form->runAtServer();
  37. }
  38. }
  39. ?>
  40. <?php echoUOJPageHeader(HTML::stripTags($contest['name']) . ' - ' . UOJLocale::get('contests::contest registrants')) ?>
  41. <h1 class="text-center"><?= $contest['name'] ?></h1>
  42. <?php if ($contest['cur_progress'] == CONTEST_NOT_STARTED): ?>
  43. <?php if ($iHasRegistered): ?>
  44. <div class="float-right">
  45. <?php $unregister_form->printHTML(); ?>
  46. </div>
  47. <div><a style="color:green">已报名</a></div>
  48. <?php else: ?>
  49. <div>当前尚未报名,您可以<a style="color:red" href="/contest/<?= $contest['id'] ?>/register">报名</a>。</div>
  50. <?php endif ?>
  51. <div class="top-buffer-sm"></div>
  52. <?php endif ?>
  53. <?php
  54. if ($show_ip) {
  55. $header_row = '<tr><th>#</th><th>'.UOJLocale::get('username').'</th><th>remote_addr</th><th>rating</th></tr>';
  56. $ip_owner = array();
  57. foreach (DB::selectAll("select * from contests_registrants where contest_id = {$contest['id']} order by user_rating asc") as $reg) {
  58. $user = queryUser($reg['username']);
  59. $ip_owner[$user['remote_addr']] = $reg['username'];
  60. }
  61. } else {
  62. $header_row = '<tr><th>#</th><th>'.UOJLocale::get('username').'</th><th>rating</th></tr>';
  63. }
  64. echoLongTable(array('*'), 'contests_registrants', "contest_id = {$contest['id']}", 'order by user_rating desc',
  65. $header_row,
  66. function($contest, $num) {
  67. global $myUser;
  68. global $show_ip, $ip_owner;
  69. $user = queryUser($contest['username']);
  70. $user_link = getUserLink($contest['username'], $contest['user_rating']);
  71. if (!$show_ip) {
  72. echo '<tr>';
  73. } else {
  74. # if ($ip_owner[$user['remote_addr']] != $user['username']) {
  75. # echo '<tr class="table-danger">';
  76. # } else {
  77. echo '<tr>';
  78. # }
  79. }
  80. echo '<td>'.$num.'</td>';
  81. echo '<td>'.$user_link.'</td>';
  82. if ($show_ip) {
  83. echo '<td>'.$user['remote_addr'].'</td>';
  84. }
  85. echo '<td>'.$contest['user_rating'].'</td>';
  86. echo '</tr>';
  87. },
  88. array('page_len' => 100,
  89. 'get_row_index' => '',
  90. 'print_after_table' => function() {
  91. global $pre_rating_form;
  92. if (isset($pre_rating_form)) {
  93. $pre_rating_form->printHTML();
  94. }
  95. }
  96. )
  97. );
  98. ?>
  99. <?php echoUOJPageFooter() ?>