[ 'name' => '基本信息', 'url' => "/group/{$group['id']}/manage/profile", ], 'assignments' => [ 'name' => '作业管理', 'url' => "/group/{$group['id']}/manage/assignments", ], 'users' => [ 'name' => '用户管理', 'url' => "/group/{$group['id']}/manage/users", ] ]; if (!isset($tabs_info[$cur_tab])) { become404Page(); } if ($cur_tab == 'profile') { $update_profile_form = new UOJForm('update_profile'); $update_profile_form->addVInput('name', 'text', '名称', $group['title'], function($title, &$vdata) { if ($title == '') { return '名称不能为空'; } if (strlen($title) > 100) { return '名称过长'; } if (HTML::escape($title) === '') { return '无效编码'; } $vdata['title'] = $title; return ''; }, null ); $update_profile_form->addVCheckboxes('is_hidden', [ '0' => '公开', '1' => '隐藏', ], '可见性', $group['is_hidden']); $update_profile_form->addVTextArea('announcement', '公告', $group['announcement'], function($announcement, &$vdata) { if (strlen($announcement) > 3000) { return '公告过长'; } $vdata['announcement'] = $announcement; return ''; }, null); $update_profile_form->handle = function($vdata) use ($group) { $esc_title = DB::escape($vdata['title']); $is_hidden = $_POST['is_hidden']; $esc_announcement = DB::escape($vdata['announcement']); DB::update("UPDATE `groups` SET title = '$esc_title', is_hidden = '$is_hidden', announcement = '$esc_announcement' WHERE id = {$group['id']}"); dieWithJsonData(['status' => 'success', 'message' => '修改成功']); }; $update_profile_form->setAjaxSubmit(<<submit_button_config['margin_class'] = 'mt-3'; $update_profile_form->submit_button_config['text'] = '更新'; $update_profile_form->runAtServer(); } elseif ($cur_tab == 'assignments') { if (isset($_POST['submit-remove_assignment']) && $_POST['submit-remove_assignment'] == 'remove_assignment') { $list_id = $_POST['list_id']; if (!validateUInt($list_id)) { dieWithAlert('题单 ID 不合法。'); } if (!queryAssignmentByGroupListID($group['id'], $list_id)) { dieWithAlert('该题单不在作业中。'); } DB::delete("DELETE FROM `groups_assignments` WHERE `list_id` = $list_id AND `group_id` = {$group['id']}"); dieWithAlert('移除成功!'); } $add_new_assignment_form = new UOJForm('add_new_assignment'); $add_new_assignment_form->addVInput('new_assignment_list_id', 'text', '题单 ID', '', function ($list_id, &$vdata) use ($group) { if (!validateUInt($list_id)) { return '题单 ID 不合法'; } if (!($list = queryProblemList($list_id))) { return '题单不存在'; } if ($list['is_hidden'] != 0) { return '题单是隐藏的'; } if (queryAssignmentByGroupListID($group['id'], $list_id)) { return '该题单已经在作业中'; } $vdata['list_id'] = $list_id; return ''; }, null ); $default_end_time = new DateTime(); $default_end_time->setTime(22, 30, 0); $default_end_time->add(new DateInterval("P7D")); $add_new_assignment_form->addVInput('new_assignment_end_time', 'text', '截止时间', $default_end_time->format('Y-m-d H:i'), function ($end_time, &$vdata) { try { $vdata['end_time'] = new DateTime($end_time); } catch (Exception $e) { return '无效时间格式'; } return ''; }, null ); $add_new_assignment_form->handle = function(&$vdata) use ($group) { $esc_end_time = DB::escape($vdata['end_time']->format('Y-m-d H:i:s')); DB::insert("insert into groups_assignments (group_id, list_id, end_time) values ({$group['id']}, '{$vdata['list_id']}', '{$esc_end_time}')"); dieWithJsonData([ 'status' => 'success', 'message' => '题单 #' . $vdata['list_id'] . ' 已经被添加到作业列表中,结束时间为 ' . $vdata['end_time']->format('Y-m-d H:i:s') . '。' ]); }; $add_new_assignment_form->submit_button_config['margin_class'] = 'mt-3'; $add_new_assignment_form->submit_button_config['text'] = '添加'; $add_new_assignment_form->setAjaxSubmit(<<runAtServer(); $now = new DateTime(); $hidden_time = new DateTime(); $hidden_time->sub(new DateInterval('P7D')); } elseif ($cur_tab == 'users') { if (isset($_POST['submit-remove_user']) && $_POST['submit-remove_user'] == 'remove_user') { $username = $_POST['remove_username']; if (!validateUsername($username)) { dieWithAlert('用户名不合法。'); } if (!queryUser($username)) { dieWithAlert('用户不存在。'); } if (!queryUserInGroup($group['id'], $username)) { dieWithAlert('该用户不在小组中。'); } DB::delete("DELETE FROM `groups_users` WHERE `username` = '$username' AND `group_id` = {$group['id']}"); dieWithAlert('移除成功!'); } $add_new_user_form = new UOJForm('add_new_user'); $add_new_user_form->addVInput('new_username', 'text', '用户名', '', function ($username, &$vdata) { global $group_id; if (!validateUsername($username)) { return '用户名不合法'; } if (!queryUser($username)) { return '用户不存在'; } if (queryUserInGroup($group_id, $username)) { return '该用户已经在小组中'; } $vdata['username'] = $username; return ''; }, null ); $add_new_user_form->submit_button_config['margin_class'] = 'mt-3'; $add_new_user_form->submit_button_config['text'] = '添加'; $add_new_user_form->handle = function(&$vdata) use ($group) { DB::insert("insert into groups_users (group_id, username) values ({$group['id']}, '{$vdata['username']}')"); dieWithJsonData(['status' => 'success', 'message' => '已将用户名为 ' . $vdata['username'] . ' 的用户添加到本小组。']); }; $add_new_user_form->setAjaxSubmit(<<runAtServer(); } ?>

(ID: #) 管理

printHTML() ?>
注意事项
  • 隐藏的小组无法被普通用户查看,即使该用户属于本小组。
  • 公告支持 Markdown 语法,但不支持添加数学公式。
题单 ID 标题 状态 结束时间 操作 EOD, function($row) use ($group, $now, $hidden_time) { $list = queryProblemList($row['list_id']); $end_time = DateTime::createFromFormat('Y-m-d H:i:s', $row['end_time']); echo ''; echo '', $list['id'], ''; echo ''; echo '', HTML::escape($list['title']), ''; if ($list['is_hidden']) { echo ' ', UOJLocale::get('hidden'), ' '; } echo ''; if ($end_time < $hidden_time) { echo '已隐藏'; } elseif ($end_time < $now) { echo '已结束'; } else { echo '进行中'; } echo '', $end_time->format('Y-m-d H:i:s'), ''; echo ''; echo ' 编辑 '; echo '
' . '' . '' . '' . '
'; echo ''; echo ''; }, [ 'page_len' => 20, 'div_classes' => ['table-responsive'], 'table_classes' => ['table', 'align-middle'], ] ); ?>
printHTML() ?>
注意事项
  • 要被添加为作业的题单必须是公开的。
  • 请为学生预留合理的完成作业的时间。
  • 排行榜将在结束后停止更新。
  • 如需延长结束时间请删除后再次添加,排行数据不会丢失。
  • 作业结束七天后将会自动在小组主页中隐藏,但仍可直接通过 URL 访问。
用户名 操作 EOD, function($row) use ($group) { echo ''; echo '', getUserLink($row['username']), ''; echo ''; echo '
' . '' . '' . '' . '
'; echo ''; echo ''; }, [ 'page_len' => 20, 'div_classes' => ['table-responsive'], 'table_classes' => ['table', 'align-middle'], ] ); ?>
printHTML() ?>
注意事项
  • 添加用户前请确认用户名是否正确以免带来不必要的麻烦。
  • 用户被添加到小组后将自动被加入组内的所有作业排行中。