group_manage.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. requirePHPLib('form');
  3. requirePHPLib('judger');
  4. if ($myUser == null) {
  5. become403Page();
  6. }
  7. $cur_tab = isset($_GET['tab']) ? $_GET['tab'] : 'info';
  8. if (!isset($_GET['group']))
  9. become404Page();
  10. $groupname = $_GET['group'];
  11. $group = queryUser($_GET['group']);
  12. if (!hasGroupCtrlPermission($myUser, $group))
  13. become403Page();
  14. $tabs_info = array(
  15. 'info' => array(
  16. 'name' => '信息管理',
  17. 'url' => "/group-manage/$groupname/info"
  18. ),
  19. 'members' => array(
  20. 'name' => "成员管理",
  21. 'url' => "/group-manage/$groupname/members"
  22. ),
  23. 'problems' => array(
  24. 'name' => '题目管理',
  25. 'url' => "/group-manage/$groupname/problems"
  26. ),
  27. 'disk' => array(
  28. 'name' => '空间管理',
  29. 'url' => "/group-manage/$groupname/disk"
  30. )
  31. );
  32. $member_form = new UOJForm('member');
  33. $member_form->addInput('username', 'text', '用户名', '',
  34. function ($username) {
  35. global $groupname;
  36. if (!validateUsername($username)) {
  37. return '用户名不合法';
  38. }
  39. $user = queryUser($username);
  40. if (!$user) {
  41. return '用户不存在';
  42. }
  43. if (!in_array($groupname, queryUserExtgroups($user)))
  44. return '用户不属于该组';
  45. return '';
  46. },
  47. null
  48. );
  49. $options = array(
  50. 'banneduser' => '踢出用户',
  51. 'normaluser' => '设为普通用户',
  52. 'superuser' => '设为超级用户'
  53. );
  54. $member_form->addSelect('op-type', $options, '操作类型', '');
  55. $member_form->handle = function() {
  56. global $member_form;
  57. global $group;
  58. $username = $_POST['username'];
  59. switch ($_POST['op-type']) {
  60. case 'banneduser':
  61. deattachUserFromGroup(queryUser($username), $group);
  62. break;
  63. case 'normaluser':
  64. removeGroupPermission(queryUser($username), $group);
  65. break;
  66. case 'superuser':
  67. giveGroupPermission(queryUser($username), $group);
  68. break;
  69. }
  70. };
  71. $member_form->runAtServer();
  72. $assign_certs_form = new UOJForm('group_cert_form');
  73. $color_options = array('red' => '红色', 'blue' => '蓝色', 'green' => '绿色', 'purple' => '紫色', 'pink' => '粉色', 'olive' => '屎黄色', 'deepblue' => '深蓝');
  74. $assign_certs_form->addSelect('color-type', $color_options, '勋章颜色', '');
  75. $assign_certs_form->addInput('certs_name', 'text', '称号', '',
  76. function ($text) {
  77. if (strpos($text, '#') != false || strpos($text, ',') != false)
  78. return '不能含有井号或逗号';
  79. if (mb_strlen($text) > 8) return '称号过长' . $text;
  80. return '';
  81. }, null
  82. );
  83. $assign_certs_form->handle = function() {
  84. global $group;
  85. $text = $_POST['certs_name'];
  86. $color = $_POST['color-type'];
  87. foreach (queryGroupMembers($group) as $i => $user) {
  88. $username = $user['username'];
  89. $newcerts = $user['certslist'];
  90. if ($user['certslist'] != '') $newcerts = $newcerts . ',' . $color . '#' . $text;
  91. else $newcerts = $color . '#' . $text;
  92. DB::update("update user_info set certslist = '{$newcerts}' where username = '{$username}'");
  93. if ($user['certs'] == '') DB::update("update user_info set certs = '{$newcerts}' where username = '{$username}'");
  94. }
  95. };
  96. $assign_certs_form->runAtServer();
  97. $user_form = new UOJForm('user');
  98. $user_form->addInput('usernamep', 'text', '用户名', '',
  99. function ($username) {
  100. global $groupname;
  101. if (!validateUsername($username)) {
  102. return '用户名不合法';
  103. }
  104. $user = queryUser($username);
  105. if (!$user) {
  106. return '用户不存在';
  107. }
  108. if (in_array($groupname, queryUserExtgroups($user)))
  109. return '用户已经属于该组';
  110. return '';
  111. },
  112. null
  113. );
  114. $user_form->handle = function() {
  115. global $member_form;
  116. global $group;
  117. $username = $_POST['usernamep'];
  118. attachUserToGroup(queryUser($username), $group);
  119. };
  120. $user_form->runAtServer();
  121. $nick_form = new UOJForm('nick');
  122. $nick_form->addInput('nick', 'text', '新昵称', '',
  123. function ($username) {
  124. return '';
  125. },
  126. null
  127. );
  128. $nick_form->handle = function() {
  129. global $groupname;
  130. $esc_nick = DB::escape($_POST['nick']);
  131. DB::update("update user_info set email = '$esc_nick' where username = '$groupname'");
  132. };
  133. $nick_form->runAtServer();
  134. if (!isset($tabs_info[$cur_tab])) {
  135. become404Page();
  136. }
  137. ?>
  138. <?php
  139. requireLib('hljs');
  140. requireLib('morris');
  141. ?>
  142. <?php echoUOJPageHeader('组管理') ?>
  143. <div class="row">
  144. <div class="col-sm-3">
  145. <?= HTML::tablist($tabs_info, $cur_tab, 'nav-pills flex-column') ?>
  146. </div>
  147. <div class="col-sm-9">
  148. <?php if ($cur_tab == 'info'): ?>
  149. <div>
  150. <h4>更改信息</h4>
  151. <?php $nick_form->printHTML() ?>
  152. <h4>给成员添加勋章</h4>
  153. <?php $assign_certs_form->printHTML() ?>
  154. </div>
  155. <?php elseif ($cur_tab === 'members'): ?>
  156. <div>
  157. <h4>成员操作</h4>
  158. <?php $member_form->printHTML() ?>
  159. <h4>添加用户进组</h4>
  160. <?php $user_form->printHTML() ?>
  161. <h4><?php echo $groupname ?> 成员列表</h4>
  162. <?php echoGroupMemberList($group) ?>
  163. </div>
  164. <?php elseif ($cur_tab == 'problems'): ?>
  165. <div>
  166. <h4><?php echo $groupname ?> 题目列表</h4>
  167. <?php echoGroupProblemList($group) ?>
  168. </div>
  169. <?php elseif ($cur_tab == 'disk'): ?>
  170. <div>
  171. <h4>空间管理</h4>
  172. <p>实际占用空间:<b class="text-danger">
  173. <?php echo printSize(queryGroupTotalSize($group)) ?></b><br>
  174. 可用空间配额:<b class="text-danger"><?php echo printSize(queryGroupQuota($group)) ?></b></p>
  175. <?php echoGroupProblemSizeList($group) ?>
  176. </div>
  177. <?php endif ?>
  178. </div>
  179. </div>
  180. <?php echoUOJPageFooter() ?>