group_manage.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. if (mb_strlen($text) == 0) return '不能为空';
  81. return '';
  82. }, null
  83. );
  84. $assign_certs_form->handle = function() {
  85. global $group;
  86. $text = $_POST['certs_name'];
  87. $color = $_POST['color-type'];
  88. foreach (queryGroupMembers($group) as $i => $user) {
  89. $username = $user['username'];
  90. $newcerts = $user['certslist'];
  91. if ($user['certslist'] != '') $newcerts = $newcerts . ',' . $color . '#' . $text;
  92. else $newcerts = $color . '#' . $text;
  93. DB::update("update user_info set certslist = '{$newcerts}' where username = '{$username}'");
  94. if ($user['certs'] == '') DB::update("update user_info set certs = '{$newcerts}' where username = '{$username}'");
  95. }
  96. };
  97. $assign_certs_form->runAtServer();
  98. $user_form = new UOJForm('user');
  99. $user_form->addInput('usernamep', 'text', '用户名', '',
  100. function ($username) {
  101. global $groupname;
  102. if (!validateUsername($username)) {
  103. return '用户名不合法';
  104. }
  105. $user = queryUser($username);
  106. if (!$user) {
  107. return '用户不存在';
  108. }
  109. if (in_array($groupname, queryUserExtgroups($user)))
  110. return '用户已经属于该组';
  111. return '';
  112. },
  113. null
  114. );
  115. $user_form->handle = function() {
  116. global $member_form;
  117. global $group;
  118. $username = $_POST['usernamep'];
  119. attachUserToGroup(queryUser($username), $group);
  120. };
  121. $user_form->runAtServer();
  122. $nick_form = new UOJForm('nick');
  123. $nick_form->addInput('nick', 'text', '新昵称', '',
  124. function ($username) {
  125. return '';
  126. },
  127. null
  128. );
  129. $nick_form->handle = function() {
  130. global $groupname;
  131. $esc_nick = DB::escape($_POST['nick']);
  132. DB::update("update user_info set email = '$esc_nick' where username = '$groupname'");
  133. };
  134. $nick_form->runAtServer();
  135. if (!isset($tabs_info[$cur_tab])) {
  136. become404Page();
  137. }
  138. ?>
  139. <?php
  140. requireLib('hljs');
  141. requireLib('morris');
  142. ?>
  143. <?php echoUOJPageHeader('组管理') ?>
  144. <div class="row">
  145. <div class="col-sm-3">
  146. <?= HTML::tablist($tabs_info, $cur_tab, 'nav-pills flex-column') ?>
  147. </div>
  148. <div class="col-sm-9">
  149. <?php if ($cur_tab == 'info'): ?>
  150. <div>
  151. <h4>更改信息</h4>
  152. <?php $nick_form->printHTML() ?>
  153. <h4>给成员添加勋章</h4>
  154. <?php $assign_certs_form->printHTML() ?>
  155. </div>
  156. <?php elseif ($cur_tab === 'members'): ?>
  157. <div>
  158. <h4>成员操作</h4>
  159. <?php $member_form->printHTML() ?>
  160. <h4>添加用户进组</h4>
  161. <?php $user_form->printHTML() ?>
  162. <h4><?php echo $groupname ?> 成员列表</h4>
  163. <?php echoGroupMemberList($group) ?>
  164. </div>
  165. <?php elseif ($cur_tab == 'problems'): ?>
  166. <div>
  167. <h4><?php echo $groupname ?> 题目列表</h4>
  168. <?php echoGroupProblemList($group) ?>
  169. </div>
  170. <?php elseif ($cur_tab == 'disk'): ?>
  171. <div>
  172. <h4>空间管理</h4>
  173. <p>实际占用空间:<b class="text-danger">
  174. <?php echo printSize(queryGroupTotalSize($group)) ?></b><br>
  175. 可用空间配额:<b class="text-danger"><?php echo printSize(queryGroupQuota($group)) ?></b></p>
  176. <?php echoGroupProblemSizeList($group) ?>
  177. </div>
  178. <?php endif ?>
  179. </div>
  180. </div>
  181. <?php echoUOJPageFooter() ?>