S2OJ/web/app/controllers/super_manage_old.php

868 lines
26 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
requireLib('bootstrap5');
requireLib('md5');
requireLib('jquery.query');
requirePHPLib('form');
requirePHPLib('judger');
if (!isSuperUser($myUser)) {
become403Page();
}
$register_form = new UOJForm('register');
$register_form->submit_button_config['align'] = 'compressed';
$register_form->addInput('new_username', 'text', '用户名', '',
function ($new_username) {
if (!validateUsername($new_username)) {
return '用户名不合法';
}
if (queryUser($new_username)) {
return '该用户已存在';
}
return '';
},
null
);
$register_form->addInput('new_password', 'password', '密码', '',
function ($new_password) {
return '';
},
null
);
$register_form->addInput('new_realname', 'text', '真实姓名', '',
function ($new_realname) {
return '';
},
null
);
$register_form->addInput('new_school', 'text', '学校名称', '',
function ($new_school) {
return '';
},
null
);
$register_form->handle = function() {
$new_username = $_POST['new_username'];
$new_password = $_POST['new_password'];
$new_realname = DB::escape($_POST['new_realname']);
$new_school = DB::escape($_POST['new_school']);
$new_password = hash_hmac('md5', $new_password, getPasswordClientSalt());
$new_password = getPasswordToStore($new_password, $new_username);
$svn_pw = uojRandString(10);
DB::query("insert into user_info (username, realname, school, password, svn_password, register_time, usergroup) values ('$new_username', '$new_realname', '$new_school', '$new_password', '$svn_pw', now(), 'U')");
};
$register_form->runAtServer();
$change_password_form = new UOJForm('change_password');
$change_password_form->submit_button_config['align'] = 'compressed';
$change_password_form->addInput('p_username', 'text', '用户名', '',
function ($p_username) {
if (!validateUsername($p_username)) {
return '用户名不合法';
}
if (!queryUser($p_username)) {
return '用户不存在';
}
return '';
},
null
);
$change_password_form->addInput('p_password', 'password', '密码', '',
function ($p_password) {
return '';
},
null
);
$change_password_form->handle = function() {
$p_username = $_POST['p_username'];
$p_password = $_POST['p_password'];
$p_password = hash_hmac('md5', $p_password, getPasswordClientSalt());
$p_password = getPasswordToStore($p_password, $p_username);
DB::query("update user_info set password = '$p_password' where username = '$p_username'");
};
$change_password_form->runAtServer();
$change_realname_form = new UOJForm('change_realname');
$change_realname_form->submit_button_config['align'] = 'compressed';
$change_realname_form->addInput('r_username', 'text', '用户名', '',
function ($r_username) {
if (!validateUsername($r_username)) {
return '用户名不合法';
}
if (!queryUser($r_username)) {
return '用户不存在';
}
return '';
},
null
);
$change_realname_form->addInput('r_realname', 'text', '真实姓名', '',
function ($r_realname) {
return '';
},
null
);
$change_realname_form->handle = function() {
$r_username = $_POST['r_username'];
$r_realname = DB::escape($_POST['r_realname']);
DB::query("update user_info set realname = '$r_realname' where username = '$r_username'");
};
$change_realname_form->runAtServer();
$change_school_form = new UOJForm('change_school');
$change_school_form->submit_button_config['align'] = 'compressed';
$change_school_form->addInput('s_username', 'text', '用户名', '',
function ($s_username) {
if (!validateUsername($s_username)) {
return '用户名不合法';
}
if (!queryUser($s_username)) {
return '用户不存在';
}
return '';
},
null
);
$change_school_form->addInput('s_school', 'text', '学校名称', '',
function ($s_school) {
return '';
},
null
);
$change_school_form->handle = function() {
$s_username = $_POST['s_username'];
$s_school = DB::escape($_POST['s_school']);
DB::query("update user_info set school = '$s_school' where username = '$s_username'");
};
$change_school_form->runAtServer();
$user_form = new UOJForm('user');
$user_form->submit_button_config['align'] = 'compressed';
$user_form->addInput('username', 'text', '用户名', '',
function ($username) {
if (!validateUsername($username)) {
return '用户名不合法';
}
if (!queryUser($username)) {
return '用户不存在';
}
return '';
},
null
);
$options = array(
'banneduser' => '设为封禁用户',
'normaluser' => '设为普通用户',
'superuser' => '设为超级用户'
);
$user_form->addSelect('op_type', $options, '操作类型', '');
$user_form->handle = function() {
global $user_form;
$username = $_POST['username'];
switch ($_POST['op_type']) {
case 'banneduser':
DB::update("update user_info set usergroup = 'B' where username = '{$username}'");
DB::update("update user_info set usertype = 'banned' where username = '{$username}'");
break;
case 'normaluser':
DB::update("update user_info set usergroup = 'U' where username = '{$username}'");
DB::update("update user_info set usertype = 'student' where username = '{$username}'");
break;
case 'superuser':
DB::update("update user_info set usergroup = 'S' where username = '{$username}'");
DB::update("update user_info set usertype = 'student' where username = '{$username}'");
break;
}
};
$user_form->runAtServer();
$usertype_form = new UOJForm('usertype');
$user_form->submit_button_config['align'] = 'compressed';
$usertype_form->addInput('usertype_username', 'text', '用户名', '',
function ($username) {
if (!validateUsername($username)) {
return '用户名不合法';
}
if (!queryUser($username)) {
return '用户不存在';
}
return '';
},
null
);
$usertype_options = array(
'student' => '学生',
'teacher' => '老师',
'problem_uploader' => '题目上传者',
'problem_manager' => '题目管理员',
'contest_judger' => '比赛评测员',
'contest_only' => '仅比赛参加者',
);
$usertype_form->addSelect('usertype_type', $usertype_options, '角色', '');
$usertype_form->addSelect('usertype_op', array('add' => '添加', 'remove' => '移除'), '操作', '');
$usertype_form->handle = function() {
global $usertype_form;
$username = $_POST['usertype_username'];
$user = queryUser($username);
switch ($_POST['usertype_type']) {
case 'teacher':
if ($_POST['usertype_op'] === 'add') {
$user = addUserType($user, 'teacher');
$user = removeUserType($user, 'student');
} else {
$user = removeUserType($user, 'teacher');
$user = addUserType($user, 'student');
}
break;
case 'problem_manager':
if ($_POST['usertype_op'] === 'add') {
$user = addUserType($user, 'problem_manager');
$user = removeUserType($user, 'problem_uploader');
} else {
$user = removeUserType($user, 'problem_manager');
}
break;
case 'student':
case 'problem_uploader':
case 'contest_judger':
case 'contest_only':
$user = $_POST['usertype_op'] === 'add'
? addUserType($user, $_POST['usertype_type'])
: removeUserType($user, $_POST['usertype_type']);
break;
}
DB::update("update user_info set usertype = '{$user['usertype']}' where username = '{$username}'");
};
$usertype_form->runAtServer();
$blog_link_index = new UOJForm('blog_link_index');
$blog_link_index->addInput('blog_id2', 'text', '博客ID', '',
function ($x) {
if (!validateUInt($x)) {
return 'ID不合法';
}
if (!queryBlog($x)) {
return '博客不存在';
}
return '';
},
null
);
$blog_link_index->addInput('blog_level', 'text', '置顶级别(删除不用填)', '0',
function ($x) {
if (!validateUInt($x)) {
return '数字不合法';
}
if ($x > 3) {
return '该级别不存在';
}
return '';
},
null
);
$options = array(
'add' => '添加',
'del' => '删除'
);
$blog_link_index->addSelect('op-type2', $options, '操作类型', '');
$blog_link_index->handle = function() {
$blog_id = $_POST['blog_id2'];
$blog_level = $_POST['blog_level'];
if ($_POST['op-type2'] == 'add') {
if (DB::selectFirst("select * from important_blogs where blog_id = {$blog_id}")) {
DB::update("update important_blogs set level = {$blog_level} where blog_id = {$blog_id}");
} else {
DB::insert("insert into important_blogs (blog_id, level) values ({$blog_id}, {$blog_level})");
}
}
if ($_POST['op-type2'] == 'del') {
DB::delete("delete from important_blogs where blog_id = {$blog_id}");
}
};
$blog_link_index->runAtServer();
$blog_deleter = new UOJForm('blog_deleter');
$blog_deleter->addInput('blog_del_id', 'text', '博客ID', '',
function ($x) {
if (!validateUInt($x)) {
return 'ID不合法';
}
if (!queryBlog($x)) {
return '博客不存在';
}
return '';
},
null
);
$blog_deleter->handle = function() {
deleteBlog($_POST['blog_del_id']);
};
$blog_deleter->runAtServer();
$countdown_adder = new UOJForm('new_countdown');
$countdown_adder->submit_button_config['align'] = 'compressed';
$countdown_adder->addInput('new_countdown_title', 'text', '标题', '',
function ($new_countdown_title) {
return '';
},
null
);
$countdown_adder->addInput('new_countdown_endtime', 'text', '截止日期', date("Y-m-d H:i:s"),
function($str, &$vdata) {
try {
$vdata['new_countdown_endtime'] = new DateTime($str);
} catch (Exception $e) {
return '无效时间格式';
}
return '';
},
null
);
$countdown_adder->handle = function() {
$new_countdown_title = $_POST['new_countdown_title'];
$new_countdown_endtime = $_POST['new_countdown_endtime'];
$esc_countdown_title = DB::escape($new_countdown_title);
DB::query("insert into countdowns (title, endtime) values ('$esc_countdown_title', '$new_countdown_endtime')");
};
$countdown_adder->runAtServer();
$countdown_deleter = new UOJForm('delete_countdown');
$countdown_deleter->submit_button_config['align'] = 'compressed';
$countdown_deleter->addInput('delete_countdown_id', 'text', 'ID', '',
function ($x) {
if (!validateUInt($x)) {
return 'ID不合法';
}
if (!DB::selectFirst("select * from countdowns where id = $x")) {
return '倒计时不存在';
}
return '';
},
null
);
$countdown_deleter->handle = function() {
$delete_countdown_id = $_POST['delete_countdown_id'];
DB::query("delete from countdowns where id = $delete_countdown_id");
};
$countdown_deleter->runAtServer();
$countdowns_header_row = <<<EOD
<tr>
<th>ID</th>
<th>标题</th>
<th>时间</th>
</tr>
EOD;
$countdowns_print_row = function($row) {
echo <<<EOD
<tr>
<td>{$row['id']}</td>
<td>{$row['title']}</td>
<td>{$row['endtime']}</td>
</tr>
EOD;
};
$friend_link_adder = new UOJForm('new_friend_link');
$friend_link_adder->submit_button_config['align'] = 'compressed';
$friend_link_adder->addInput('new_friend_link_title', 'text', '名称', '',
function ($str) {
return '';
},
null
);
$friend_link_adder->addInput('new_friend_link_url', 'text', '链接', '',
function($str) {
if (!validateURL($str)) {
return '链接不合法';
}
return '';
},
null
);
$friend_link_adder->addInput('new_friend_link_level', 'text', '权重', '10',
function($str) {
if (!validateUInt($str)) {
return '权重必须是数字';
}
return '';
},
null
);
$friend_link_adder->handle = function() {
$new_friend_link_title = $_POST['new_friend_link_title'];
$new_friend_link_url = $_POST['new_friend_link_url'];
$new_friend_link_level = $_POST['new_friend_link_level'];
$esc_new_friend_link_title = DB::escape($new_friend_link_title);
$esc_new_friend_link_url = DB::escape($new_friend_link_url);
DB::query("insert into friend_links (title, url, level) values ('$esc_new_friend_link_title', '$esc_new_friend_link_url', $new_friend_link_level)");
};
$friend_link_adder->runAtServer();
$friend_link_deleter = new UOJForm('delete_friend_link');
$friend_link_deleter->submit_button_config['align'] = 'compressed';
$friend_link_deleter->addInput('delete_friend_link_id', 'text', 'ID', '',
function ($id) {
if (!validateUInt($id)) {
return 'ID不合法';
}
if (!DB::selectFirst("select * from friend_links where id = $id")) {
return 'ID不存在';
}
return '';
},
null
);
$friend_link_deleter->handle = function() {
$delete_friend_link_id = $_POST['delete_friend_link_id'];
DB::query("delete from friend_links where id = $delete_friend_link_id");
};
$friend_link_deleter->runAtServer();
$friend_links_header_row = <<<EOD
<tr>
<th>ID</th>
<th>名称</th>
<th>链接</th>
<th>置顶等级</th>
</tr>
EOD;
$friend_links_print_row = function($row) {
echo <<<EOD
<tr>
<td>{$row['id']}</td>
<td>{$row['title']}</td>
<td>{$row['url']}</td>
<td>{$row['level']}</td>
</tr>
EOD;
};
$contest_submissions_deleter = new UOJForm('contest_submissions');
$contest_submissions_deleter->addInput('contest_id', 'text', '比赛ID', '',
function ($x) {
if (!validateUInt($x)) {
return 'ID不合法';
}
if (!queryContest($x)) {
return '博客不存在';
}
return '';
},
null
);
$contest_submissions_deleter->handle = function() {
$contest = queryContest($_POST['contest_id']);
genMoreContestInfo($contest);
$contest_problems = DB::selectAll("select problem_id from contests_problems where contest_id = {$contest['id']}");
foreach ($contest_problems as $problem) {
$submissions = DB::selectAll("select * from submissions where problem_id = {$problem['problem_id']} and submit_time < '{$contest['start_time_str']}'");
foreach ($submissions as $submission) {
$content = json_decode($submission['content'], true);
unlink(UOJContext::storagePath().$content['file_name']);
DB::delete("delete from submissions where id = {$submission['id']}");
updateBestACSubmissions($submission['submitter'], $submission['problem_id']);
}
}
};
$contest_submissions_deleter->runAtServer();
$custom_test_deleter = new UOJForm('custom_test_deleter');
$custom_test_deleter->addInput('last', 'text', '删除末尾记录', '5',
function ($x, &$vdata) {
if (!validateUInt($x)) {
return '不合法';
}
$vdata['last'] = $x;
return '';
},
null
);
$custom_test_deleter->handle = function(&$vdata) {
$all = DB::selectAll("select * from custom_test_submissions order by id asc limit {$vdata['last']}");
foreach ($all as $submission) {
$content = json_decode($submission['content'], true);
unlink(UOJContext::storagePath().$content['file_name']);
}
DB::delete("delete from custom_test_submissions order by id asc limit {$vdata['last']}");
};
$custom_test_deleter->runAtServer();
$judger_adder = new UOJForm('judger_adder');
$judger_adder->addInput('judger_adder_name', 'text', '评测机名称', '',
function ($x, &$vdata) {
if (!validateUsername($x)) {
return '不合法';
}
if (DB::selectCount("select count(*) from judger_info where judger_name='$x'")!=0) {
return '不合法';
}
$vdata['name'] = $x;
return '';
},
null
);
$judger_adder->handle = function(&$vdata) {
$password=uojRandString(32);
DB::insert("insert into judger_info (judger_name,password) values('{$vdata['name']}','{$password}')");
};
$judger_adder->runAtServer();
$judger_deleter = new UOJForm('judger_deleter');
$judger_deleter->addInput('judger_deleter_name', 'text', '评测机名称', '',
function ($x, &$vdata) {
if (!validateUsername($x)) {
return '不合法';
}
if (DB::selectCount("select count(*) from judger_info where judger_name='$x'")!=1) {
return '不合法';
}
$vdata['name'] = $x;
return '';
},
null
);
$judger_deleter->handle = function(&$vdata) {
DB::delete("delete from judger_info where judger_name='{$vdata['name']}'");
};
$judger_deleter->runAtServer();
$judgerlist_cols = array('judger_name', 'password');
$judgerlist_config = array();
$judgerlist_header_row = <<<EOD
<tr>
<th>评测机名称</th>
<th>密码</th>
</tr>
EOD;
$judgerlist_print_row = function($row) {
echo <<<EOD
<tr>
<td>{$row['judger_name']}</td>
<td>{$row['password']}</td>
</tr>
EOD;
};
$userlist_cols = array('username', 'school', 'usergroup', 'usertype', 'register_time');
$userlist_config = array('page_len' => 20,
'table_classes' => array('table', 'table-bordered', 'table-hover', 'table-striped'));
$userlist_header_row = <<<EOD
<tr>
<th>用户名</th>
<th>学校</th>
<th style="width: 6em">用户类别</th>
<th style="width: 12em">注册时间</th>
</tr>
EOD;
$cur_tab = isset($_GET['tab']) ? $_GET['tab'] : 'users';
$user_list_cond = array();
if ($cur_tab === 'users') {
if (isset($_GET['username']) && $_GET['username'] != "") {
$user_list_cond[] = "username like '%" . DB::escape($_GET['username']) . "%'";
}
if (isset($_GET['usergroup']) && $_GET['usergroup'] != "") {
$user_list_cond[] = "usergroup = '" . DB::escape($_GET['usergroup']) . "'";
}
}
if ($user_list_cond) {
$user_list_cond = join($user_list_cond, ' and ');
} else {
$user_list_cond = '1';
}
$userlist_print_row = function($row) {
$hislink = getUserLink($row['username']);
echo <<<EOD
<tr>
<td>${hislink}</td>
<td>{$row['school']}</td>
<td>{$row['usergroup']}, {$row['usertype']}</td>
<td>{$row['register_time']}</td>
</tr>
EOD;
};
$image_hosting_cols = ['*'];
$image_hosting_config = ['page_len' => 20, 'table_classes' => ['table', 'table-bordered', 'table-hover', 'table-striped']];
$image_hosting_header_row = <<<EOD
<tr>
<th>ID</th>
<th>上传者</th>
<th>预览</th>
<th style="width: 3em">文件大小</th>
<th style="width: 12em">上传时间</th>
</tr>
EOD;
$image_hosting_print_row = function($row) {
$user_link = getUserLink($row['uploader']);
if ($row['size'] < 1024 * 512) {
$size = strval(round($row['size'] * 1.0 / 1024, 1)) . ' KB';
} else {
$size = strval(round($row['size'] * 1.0 / 1024 / 1024, 1)) . ' MB';
}
echo <<<EOD
<tr>
<td>{$row['id']}</td>
<td>$user_link</td>
<td><img src="{$row['path']}" width="250"></td>
<td>$size</td>
<td>{$row['upload_time']}</td>
</tr>
EOD;
};
$image_deleter = new UOJForm('image_deleter');
$image_deleter->submit_button_config['align'] = 'compressed';
$image_deleter->submit_button_config['text'] = '删除';
$image_deleter->submit_button_config['class_str'] = 'btn btn-danger';
$image_deleter->addInput('image_deleter_id', 'text', '图片 ID', '',
function ($x, &$vdata) {
if (!validateUInt($x)) {
return 'ID 不合法';
}
if (!DB::selectCount("select count(*) from users_images where id = $x")) {
return '图片不存在';
}
$vdata['id'] = $x;
return '';
},
null
);
$image_deleter->handle = function(&$vdata) {
$id = $vdata['id'];
$result = DB::selectFirst("SELECT * from users_images WHERE id = $id");
unlink(UOJContext::storagePath().$result['path']);
DB::delete("DELETE FROM users_images WHERE id = $id");
};
$image_deleter->runAtServer();
$change_user_image_total_size_limit_form = new UOJForm('change_user_image_total_size_limit');
$change_user_image_total_size_limit_form->submit_button_config['align'] = 'compressed';
$change_user_image_total_size_limit_form->addInput('change_user_image_total_size_limit_username', 'text', '用户名', '',
function ($x, &$vdata) {
if (!validateUsername($x)) {
return '用户名不合法';
}
if (!queryUser($x)) {
return '用户不存在';
}
$vdata['username'] = $x;
return '';
},
null
);
$change_user_image_total_size_limit_form->addInput('change_user_image_total_size_limit_limit', 'text', '存储限制单位Byte', '104857600',
function ($x, &$vdata) {
if (!validateUInt($x, 10)) {
return '限制不合法';
}
if (intval($x) > 2147483648) {
return '限制不能大于 2 GB';
}
$vdata['limit'] = $x;
return '';
},
null
);
$change_user_image_total_size_limit_form->handle = function(&$vdata) {
DB::update("UPDATE user_info SET images_size_limit = {$vdata['limit']} WHERE username = '{$vdata['username']}'");
};
$change_user_image_total_size_limit_form->runAtServer();
$tabs_info = array(
'users' => array(
'name' => '用户管理',
'url' => "/super-manage/users"
),
'blogs' => array(
'name' => '博客管理',
'url' => "/super-manage/blogs"
),
'index' => array(
'name' => '首页管理',
'url' => '/super-manage/index'
),
'submissions' => array(
'name' => '提交记录',
'url' => "/super-manage/submissions"
),
'custom-test' => array(
'name' => '自定义测试',
'url' => '/super-manage/custom-test'
),
'judger' => array(
'name' => '评测机管理',
'url' => '/super-manage/judger'
),
'image_hosting' => array(
'name' => '图床管理',
'url' => '/super-manage/image_hosting'
)
);
if (!isset($tabs_info[$cur_tab])) {
become404Page();
}
?>
<?php
requireLib('shjs');
requireLib('morris');
?>
<?php echoUOJPageHeader('系统管理') ?>
<div class="row">
<div class="col-sm-3">
<?= HTML::tablist($tabs_info, $cur_tab, 'nav-pills flex-column') ?>
</div>
<div class="col-sm-9">
<?php if ($cur_tab === 'users'): ?>
<h3>添加新用户</h3>
<?php $register_form->printHTML(); ?>
<h3>修改用户密码</h3>
<?php $change_password_form->printHTML(); ?>
<h3>用户类别设置</h3>
<p>在此处更新用户所属类别后会自动重置用户权限。</p>
<?php $user_form->printHTML(); ?>
<h3>用户权限管理</h3>
<?php $usertype_form->printHTML(); ?>
<h3>修改用户真实姓名</h3>
<?php $change_realname_form->printHTML(); ?>
<h3>修改用户学校名称</h3>
<?php $change_school_form->printHTML(); ?>
<h3>用户名单</h3>
<div id="user-query">
<form class="form-horizontal uoj-form-compressed" target="_self" method="GET">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-3">
<input type="text" class="form-control" name="username" id="user-query-username" value="" />
</div>
</div>
<div class="form-group">
<label for="usergroup" class="col-sm-2 control-label">用户类别</label>
<div class="col-sm-3">
<select class="form-control" id="user-query-usergroup" name="usergroup">
<option value="">*: 所有用户</option>
<option value="B">B: 封禁用户</option>
<option value="U">U: 普通用户</option>
<option value="S">S: 超级用户</option>
</select>
</div>
</div><div class="text-center"><button type="submit" id="user-query-submit" class="mt-2 btn btn-secondary">查询</button></div>
</form>
</div>
<?php echoLongTable($userlist_cols, 'user_info', $user_list_cond, 'order by username asc', $userlist_header_row, $userlist_print_row, $userlist_config) ?>
<?php elseif ($cur_tab === 'blogs'): ?>
<div>
<h4>添加到公告</h4>
<?php $blog_link_index->printHTML(); ?>
</div>
<div>
<h4>删除博客</h4>
<?php $blog_deleter->printHTML(); ?>
</div>
<?php elseif ($cur_tab === 'index'): ?>
<div>
<h4>倒计时</h4>
<?php echoLongTable(array('id', 'title', 'endtime'), 'countdowns', '1', 'order by endtime asc', $countdowns_header_row, $countdowns_print_row, $userlist_config) ?>
<h5>添加倒计时</h5>
<?php $countdown_adder->printHTML(); ?>
<h5>删除倒计时</h5>
<?php $countdown_deleter->printHTML(); ?>
<h4>友情链接</h4>
<?php echoLongTable(array('id', 'title', 'url', 'level'), 'friend_links', '1', 'order by level desc, id asc', $friend_links_header_row, $friend_links_print_row, $userlist_config) ?>
<h5>添加友情链接</h5>
<?php $friend_link_adder->printHTML(); ?>
<h5>删除友情链接</h5>
<?php $friend_link_deleter->printHTML(); ?>
</div>
<?php elseif ($cur_tab === 'submissions'): ?>
<div>
<h4>删除赛前提交记录</h4>
<?php $contest_submissions_deleter->printHTML(); ?>
</div>
<div>
<h4>测评失败的提交记录</h4>
<?php echoSubmissionsList("result_error = 'Judgement Failed'", 'order by id desc', array('result_hidden' => ''), $myUser); ?>
</div>
<?php elseif ($cur_tab === 'custom-test'): ?>
<?php $custom_test_deleter->printHTML() ?>
<?php
$submissions_pag = new Paginator(array(
'col_names' => array('*'),
'table_name' => 'custom_test_submissions',
'cond' => '1',
'tail' => 'order by id asc',
'page_len' => 5
));
foreach ($submissions_pag->get() as $submission) {
$problem = queryProblemBrief($submission['problem_id']);
$submission_result = json_decode($submission['result'], true);
echo '<dl class="dl-horizontal">';
echo '<dt>id</dt>';
echo '<dd>', "#{$submission['id']}", '</dd>';
echo '<dt>problem_id</dt>';
echo '<dd>', "#{$submission['problem_id']}", '</dd>';
echo '<dt>submit time</dt>';
echo '<dd>', $submission['submit_time'], '</dd>';
echo '<dt>submitter</dt>';
echo '<dd>', $submission['submitter'], '</dd>';
echo '<dt>judge_time</dt>';
echo '<dd>', $submission['judge_time'], '</dd>';
echo '</dl>';
echoSubmissionContent($submission, getProblemCustomTestRequirement($problem));
echoCustomTestSubmissionDetails($submission_result['details'], "submission-{$submission['id']}-details");
}
?>
<?= $submissions_pag->pagination() ?>
<?php elseif ($cur_tab === 'judger'): ?>
<div>
<h4>添加评测机</h4>
<?php $judger_adder->printHTML(); ?>
</div>
<div>
<h4>删除评测机</h4>
<?php $judger_deleter->printHTML(); ?>
</div>
<h3>评测机列表</h3>
<?php echoLongTable($judgerlist_cols, 'judger_info', "1=1", '', $judgerlist_header_row, $judgerlist_print_row, $judgerlist_config) ?>
<?php elseif ($cur_tab === 'image_hosting'): ?>
<h3>图床管理</h3>
<?php echoLongTable($image_hosting_cols, 'users_images', "1=1", 'order by id desc', $image_hosting_header_row, $image_hosting_print_row, $image_hosting_config) ?>
<div>
<h4>删除图片</h4>
<?php $image_deleter->printHTML() ?>
</div>
<div>
<h4>修改用户存储上限</h4>
<?php $change_user_image_total_size_limit_form->printHTML() ?>
</div>
<?php endif ?>
</div>
</div>
<?php echoUOJPageFooter() ?>