2016-07-18 16:39:37 +00:00
< ? php
2022-03-17 11:38:33 +00:00
$REQUIRE_LIB [ 'md5' ] = '' ;
$REQUIRE_LIB [ 'jquery.query' ] = '' ;
2016-07-18 16:39:37 +00:00
requirePHPLib ( 'form' );
requirePHPLib ( 'judger' );
2022-10-07 09:29:26 +00:00
if ( ! isSuperUser ( $myUser )) {
2016-07-18 16:39:37 +00:00
become403Page ();
}
2022-03-17 10:26:29 +00:00
2022-03-17 11:38:33 +00:00
$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
);
2022-10-01 11:09:16 +00:00
$register_form -> addInput ( 'new_school' , 'text' , '学校名称' , '' ,
function ( $new_school ) {
return '' ;
},
null
);
2022-03-17 11:38:33 +00:00
$register_form -> handle = function () {
$new_username = $_POST [ 'new_username' ];
$new_password = $_POST [ 'new_password' ];
2022-09-18 10:51:20 +00:00
$new_realname = DB :: escape ( $_POST [ 'new_realname' ]);
2022-10-01 11:09:16 +00:00
$new_school = DB :: escape ( $_POST [ 'new_school' ]);
2022-03-17 11:38:33 +00:00
$new_password = hash_hmac ( 'md5' , $new_password , getPasswordClientSalt ());
$new_password = getPasswordToStore ( $new_password , $new_username );
$svn_pw = uojRandString ( 10 );
2022-10-01 11:09:16 +00:00
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') " );
2022-03-17 11:38:33 +00:00
};
$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 ();
2022-03-17 10:26:29 +00:00
$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' ];
2022-09-18 10:51:20 +00:00
$r_realname = DB :: escape ( $_POST [ 'r_realname' ]);
2022-03-17 10:26:29 +00:00
DB :: query ( " update user_info set realname = ' $r_realname ' where username = ' $r_username ' " );
};
$change_realname_form -> runAtServer ();
2022-10-01 11:09:16 +00:00
$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 ();
2016-07-18 16:39:37 +00:00
$user_form = new UOJForm ( 'user' );
2022-03-17 11:35:43 +00:00
$user_form -> submit_button_config [ 'align' ] = 'compressed' ;
2016-07-18 16:39:37 +00:00
$user_form -> addInput ( 'username' , 'text' , '用户名' , '' ,
function ( $username ) {
if ( ! validateUsername ( $username )) {
return '用户名不合法' ;
}
if ( ! queryUser ( $username )) {
return '用户不存在' ;
}
return '' ;
},
null
);
$options = array (
2017-11-25 04:00:00 +00:00
'banneduser' => '设为封禁用户' ,
'normaluser' => '设为普通用户' ,
'superuser' => '设为超级用户'
2016-07-18 16:39:37 +00:00
);
2022-03-17 11:38:33 +00:00
$user_form -> addSelect ( 'op_type' , $options , '操作类型' , '' );
2016-07-18 16:39:37 +00:00
$user_form -> handle = function () {
global $user_form ;
$username = $_POST [ 'username' ];
2022-03-17 11:38:33 +00:00
switch ( $_POST [ 'op_type' ]) {
2017-11-25 04:00:00 +00:00
case 'banneduser' :
2016-07-18 16:39:37 +00:00
DB :: update ( " update user_info set usergroup = 'B' where username = ' { $username } ' " );
2022-03-17 13:52:10 +00:00
DB :: update ( " update user_info set usertype = 'banned' where username = ' { $username } ' " );
2016-07-18 16:39:37 +00:00
break ;
2017-11-25 04:00:00 +00:00
case 'normaluser' :
2016-07-18 16:39:37 +00:00
DB :: update ( " update user_info set usergroup = 'U' where username = ' { $username } ' " );
2022-03-17 13:52:10 +00:00
DB :: update ( " update user_info set usertype = 'student' where username = ' { $username } ' " );
break ;
2022-09-19 07:42:26 +00:00
case 'superuser' :
DB :: update ( " update user_info set usergroup = 'S' where username = ' { $username } ' " );
DB :: update ( " update user_info set usertype = 'student' where username = ' { $username } ' " );
2022-03-17 13:52:10 +00:00
break ;
2022-09-19 07:42:26 +00:00
}
};
$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 (
2022-10-01 11:29:40 +00:00
'student' => '学生' ,
'teacher' => '老师' ,
2022-09-19 07:42:26 +00:00
'problem_uploader' => '题目上传者' ,
'problem_manager' => '题目管理员' ,
2022-09-21 11:26:13 +00:00
'contest_judger' => '比赛评测员' ,
2022-09-19 07:42:26 +00:00
'contest_only' => '仅比赛参加者' ,
);
$usertype_form -> addSelect ( 'usertype_type' , $usertype_options , '角色' , '' );
$usertype_form -> addSelect ( 'usertype_op' , array ( 'add' => '添加' , 'remove' => '移除' ), '操作' , '' );
$usertype_form -> handle = function () {
global $usertype_form ;
2022-10-01 11:29:40 +00:00
2022-09-19 07:42:26 +00:00
$username = $_POST [ 'usertype_username' ];
2022-10-01 11:29:40 +00:00
$user = queryUser ( $username );
2022-09-19 07:42:26 +00:00
switch ( $_POST [ 'usertype_type' ]) {
2022-10-01 11:29:40 +00:00
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 ;
2022-03-17 13:52:10 +00:00
case 'problem_manager' :
2022-10-01 14:03:00 +00:00
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' :
2022-09-21 11:26:13 +00:00
case 'contest_judger' :
2022-04-03 10:18:17 +00:00
case 'contest_only' :
2022-09-19 07:42:26 +00:00
$user = $_POST [ 'usertype_op' ] === 'add'
? addUserType ( $user , $_POST [ 'usertype_type' ])
: removeUserType ( $user , $_POST [ 'usertype_type' ]);
2022-04-03 10:18:17 +00:00
break ;
2016-07-18 16:39:37 +00:00
}
2022-10-01 14:03:00 +00:00
DB :: update ( " update user_info set usertype = ' { $user [ 'usertype' ] } ' where username = ' { $username } ' " );
2016-07-18 16:39:37 +00:00
};
2022-09-19 07:42:26 +00:00
$usertype_form -> runAtServer ();
2016-07-18 16:39:37 +00:00
$blog_link_index = new UOJForm ( 'blog_link_index' );
$blog_link_index -> addInput ( 'blog_id2' , 'text' , '博客ID' , '' ,
function ( $x ) {
2020-06-25 12:41:16 +00:00
if ( ! validateUInt ( $x )) {
return 'ID不合法' ;
}
if ( ! queryBlog ( $x )) {
return '博客不存在' ;
}
2016-07-18 16:39:37 +00:00
return '' ;
},
null
);
$blog_link_index -> addInput ( 'blog_level' , 'text' , '置顶级别(删除不用填)' , '0' ,
function ( $x ) {
2020-06-25 12:41:16 +00:00
if ( ! validateUInt ( $x )) {
return '数字不合法' ;
}
if ( $x > 3 ) {
return '该级别不存在' ;
}
2016-07-18 16:39:37 +00:00
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 ();
2022-04-03 11:33:50 +00:00
$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 " ),
2022-09-18 04:58:35 +00:00
function ( $str , & $vdata ) {
try {
$vdata [ 'new_countdown_endtime' ] = new DateTime ( $str );
} catch ( Exception $e ) {
return '无效时间格式' ;
}
return '' ;
},
2022-04-03 11:33:50 +00:00
null
);
$countdown_adder -> handle = function () {
$new_countdown_title = $_POST [ 'new_countdown_title' ];
$new_countdown_endtime = $_POST [ 'new_countdown_endtime' ];
2022-09-21 03:00:12 +00:00
$esc_countdown_title = DB :: escape ( $new_countdown_title );
2022-04-03 11:33:50 +00:00
2022-09-21 03:00:12 +00:00
DB :: query ( " insert into countdowns (title, endtime) values (' $esc_countdown_title ', ' $new_countdown_endtime ') " );
2022-04-03 11:33:50 +00:00
};
$countdown_adder -> runAtServer ();
2022-09-18 04:58:35 +00:00
$countdown_deleter = new UOJForm ( 'delete_countdown' );
$countdown_deleter -> submit_button_config [ 'align' ] = 'compressed' ;
$countdown_deleter -> addInput ( 'delete_countdown_id' , 'text' , 'ID' , '' ,
2022-09-21 03:00:12 +00:00
function ( $x ) {
if ( ! validateUInt ( $x )) {
return 'ID不合法' ;
}
if ( ! DB :: selectFirst ( " select * from countdowns where id = $x " )) {
return '倒计时不存在' ;
}
2022-09-18 04:58:35 +00:00
return '' ;
},
null
);
$countdown_deleter -> handle = function () {
$delete_countdown_id = $_POST [ 'delete_countdown_id' ];
2022-04-03 11:33:50 +00:00
2022-09-21 03:00:12 +00:00
DB :: query ( " delete from countdowns where id = $delete_countdown_id " );
2022-09-18 04:58:35 +00:00
};
$countdown_deleter -> runAtServer ();
2022-04-03 11:33:50 +00:00
$countdowns_header_row = <<< EOD
< tr >
< th > ID </ th >
< th > 标题 </ th >
< th > 时间 </ th >
</ tr >
EOD ;
2022-09-18 04:58:35 +00:00
$countdowns_print_row = function ( $row ) {
echo <<< EOD
2022-04-03 11:33:50 +00:00
< tr >
< td > { $row [ 'id' ]} </ td >
< td > { $row [ 'title' ]} </ td >
< td > { $row [ 'endtime' ]} </ td >
</ tr >
EOD ;
2022-09-18 04:58:35 +00:00
};
2022-04-03 11:33:50 +00:00
2022-09-21 03:33:42 +00:00
$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 ;
};
2016-07-18 16:39:37 +00:00
$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 ();
2019-09-12 10:12:01 +00:00
$judger_adder = new UOJForm ( 'judger_adder' );
$judger_adder -> addInput ( 'judger_adder_name' , 'text' , '评测机名称' , '' ,
function ( $x , & $vdata ) {
if ( ! validateUsername ( $x )) {
return '不合法' ;
}
2020-06-25 12:41:16 +00:00
if ( DB :: selectCount ( " select count(*) from judger_info where judger_name=' $x ' " ) != 0 ) {
2019-09-12 10:12:01 +00:00
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 '不合法' ;
}
2020-06-25 12:41:16 +00:00
if ( DB :: selectCount ( " select count(*) from judger_info where judger_name=' $x ' " ) != 1 ) {
2019-09-12 10:12:01 +00:00
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 ();
2020-08-05 16:24:34 +00:00
2019-09-12 10:12:01 +00:00
$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 ;
};
2016-07-18 16:39:37 +00:00
2022-10-01 11:09:16 +00:00
$userlist_cols = array ( 'username' , 'school' , 'usergroup' , 'usertype' , 'register_time' );
2022-03-17 11:38:33 +00:00
$userlist_config = array ( 'page_len' => 20 ,
'table_classes' => array ( 'table' , 'table-bordered' , 'table-hover' , 'table-striped' ));
$userlist_header_row = <<< EOD
2016-07-18 16:39:37 +00:00
< tr >
< th > 用户名 </ th >
2022-10-01 11:09:16 +00:00
< th > 学校 </ th >
2022-03-17 11:38:33 +00:00
< th style = " width: 6em " > 用户类别 </ th >
< th style = " width: 12em " > 注册时间 </ th >
2016-07-18 16:39:37 +00:00
</ tr >
EOD ;
2022-03-17 11:38:33 +00:00
$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 ) {
2016-07-18 16:39:37 +00:00
$hislink = getUserLink ( $row [ 'username' ]);
echo <<< EOD
< tr >
< td > $ { hislink } </ td >
2022-10-01 11:09:16 +00:00
< td > { $row [ 'school' ]} </ td >
2022-04-02 09:09:49 +00:00
< td > { $row [ 'usergroup' ]}, { $row [ 'usertype' ]} </ td >
2022-03-17 11:38:33 +00:00
< td > { $row [ 'register_time' ]} </ td >
2016-07-18 16:39:37 +00:00
</ tr >
EOD ;
};
2022-03-17 11:38:33 +00:00
2022-10-13 12:20:51 +00:00
$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' );
2022-10-14 06:59:26 +00:00
$image_deleter -> submit_button_config [ 'align' ] = 'compressed' ;
$image_deleter -> submit_button_config [ 'text' ] = '删除' ;
$image_deleter -> submit_button_config [ 'class_str' ] = 'btn btn-danger' ;
2022-10-13 12:20:51 +00:00
$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 ();
2022-10-14 06:59:26 +00:00
$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 ();
2016-07-18 16:39:37 +00:00
$tabs_info = array (
'users' => array (
2022-03-17 11:38:33 +00:00
'name' => '用户管理' ,
2016-07-18 16:39:37 +00:00
'url' => " /super-manage/users "
),
'blogs' => array (
'name' => '博客管理' ,
'url' => " /super-manage/blogs "
),
2022-04-03 11:33:50 +00:00
'index' => array (
'name' => '首页管理' ,
'url' => '/super-manage/index'
),
2016-07-18 16:39:37 +00:00
'submissions' => array (
'name' => '提交记录' ,
'url' => " /super-manage/submissions "
),
'custom-test' => array (
'name' => '自定义测试' ,
'url' => '/super-manage/custom-test'
),
2019-09-12 10:12:01 +00:00
'judger' => array (
'name' => '评测机管理' ,
'url' => '/super-manage/judger'
2022-10-13 12:20:51 +00:00
),
'image_hosting' => array (
'name' => '图床管理' ,
'url' => '/super-manage/image_hosting'
2016-07-18 16:39:37 +00:00
)
);
if ( ! isset ( $tabs_info [ $cur_tab ])) {
become404Page ();
}
2022-09-18 04:58:35 +00:00
?>
2016-07-18 16:39:37 +00:00
< ? php
requireLib ( 'shjs' );
requireLib ( 'morris' );
2022-09-18 04:58:35 +00:00
?>
2016-07-18 16:39:37 +00:00
< ? php echoUOJPageHeader ( '系统管理' ) ?>
< div class = " row " >
< div class = " col-sm-3 " >
2019-09-10 02:15:20 +00:00
< ? = HTML :: tablist ( $tabs_info , $cur_tab , 'nav-pills flex-column' ) ?>
2016-07-18 16:39:37 +00:00
</ div >
< div class = " col-sm-9 " >
< ? php if ( $cur_tab === 'users' ) : ?>
2022-03-17 11:38:33 +00:00
< h3 > 添加新用户 </ h3 >
< ? php $register_form -> printHTML (); ?>
< h3 > 修改用户密码 </ h3 >
< ? php $change_password_form -> printHTML (); ?>
< h3 > 用户类别设置 </ h3 >
2022-09-19 07:42:26 +00:00
< p > 在此处更新用户所属类别后会自动重置用户权限。 </ p >
2016-07-18 16:39:37 +00:00
< ? php $user_form -> printHTML (); ?>
2022-09-19 07:42:26 +00:00
< h3 > 用户权限管理 </ h3 >
< ? php $usertype_form -> printHTML (); ?>
2022-03-17 10:26:29 +00:00
< h3 > 修改用户真实姓名 </ h3 >
< ? php $change_realname_form -> printHTML (); ?>
2022-10-01 11:09:16 +00:00
< h3 > 修改用户学校名称 </ h3 >
< ? php $change_school_form -> printHTML (); ?>
2022-03-17 11:38:33 +00:00
< 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 ) ?>
2016-07-18 16:39:37 +00:00
< ? php elseif ( $cur_tab === 'blogs' ) : ?>
< div >
< h4 > 添加到公告 </ h4 >
< ? php $blog_link_index -> printHTML (); ?>
</ div >
< div >
< h4 > 删除博客 </ h4 >
< ? php $blog_deleter -> printHTML (); ?>
</ div >
2022-04-03 11:33:50 +00:00
< ? php elseif ( $cur_tab === 'index' ) : ?>
< div >
2022-09-21 03:00:12 +00:00
< h4 > 倒计时 </ h4 >
2022-04-03 11:33:50 +00:00
< ? 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 (); ?>
2022-09-21 03:33:42 +00:00
< 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 (); ?>
2022-04-03 11:33:50 +00:00
</ div >
2016-07-18 16:39:37 +00:00
< ? php elseif ( $cur_tab === 'submissions' ) : ?>
< div >
< h4 > 删除赛前提交记录 </ h4 >
< ? php $contest_submissions_deleter -> printHTML (); ?>
</ div >
< div >
< h4 > 测评失败的提交记录 </ h4 >
2018-10-11 12:34:18 +00:00
< ? php echoSubmissionsList ( " result_error = 'Judgement Failed' " , 'order by id desc' , array ( 'result_hidden' => '' ), $myUser ); ?>
2016-07-18 16:39:37 +00:00
</ div >
< ? php elseif ( $cur_tab === 'custom-test' ) : ?>
< ? php $custom_test_deleter -> printHTML () ?>
< ? php
2022-09-18 04:58:35 +00:00
$submissions_pag = new Paginator ( array (
'col_names' => array ( '*' ),
'table_name' => 'custom_test_submissions' ,
'cond' => '1' ,
'tail' => 'order by id asc' ,
'page_len' => 5
));
2020-06-25 12:41:16 +00:00
foreach ( $submissions_pag -> get () as $submission ) {
2016-07-18 16:39:37 +00:00
$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 " );
}
2022-09-18 04:58:35 +00:00
?>
2016-07-18 16:39:37 +00:00
< ? = $submissions_pag -> pagination () ?>
2019-09-12 10:12:01 +00:00
< ? 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 ) ?>
2022-10-13 12:20:51 +00:00
< ? 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 >
2022-10-14 06:59:26 +00:00
< div >
< h4 > 修改用户存储上限 </ h4 >
< ? php $change_user_image_total_size_limit_form -> printHTML () ?>
</ div >
2016-07-18 16:39:37 +00:00
< ? php endif ?>
</ div >
</ div >
< ? php echoUOJPageFooter () ?>