Reformated with php-cs-fixer

This commit is contained in:
Leo Lu 2020-06-25 20:41:16 +08:00 committed by billchenchina
parent 8ca70fc87c
commit b8f82be3dc
31 changed files with 333 additions and 281 deletions

View File

@ -11,7 +11,7 @@ $handlers = [
if (func_num_args() != 1) { if (func_num_args() != 1) {
die("php cli.php upgrade:up <name>\n"); die("php cli.php upgrade:up <name>\n");
} }
Upgrader::transaction(function() use($name) { Upgrader::transaction(function() use ($name) {
Upgrader::up($name); Upgrader::up($name);
}); });
die("finished!\n"); die("finished!\n");
@ -20,7 +20,7 @@ $handlers = [
if (func_num_args() != 1) { if (func_num_args() != 1) {
die("php cli.php upgrade:down <name>\n"); die("php cli.php upgrade:down <name>\n");
} }
Upgrader::transaction(function() use($name) { Upgrader::transaction(function() use ($name) {
Upgrader::down($name); Upgrader::down($name);
}); });
die("finished!\n"); die("finished!\n");
@ -29,7 +29,7 @@ $handlers = [
if (func_num_args() != 1) { if (func_num_args() != 1) {
die("php cli.php upgrade:refresh <name>\n"); die("php cli.php upgrade:refresh <name>\n");
} }
Upgrader::transaction(function() use($name) { Upgrader::transaction(function() use ($name) {
Upgrader::refresh($name); Upgrader::refresh($name);
}); });
die("finished!\n"); die("finished!\n");
@ -38,7 +38,7 @@ $handlers = [
if (func_num_args() != 1) { if (func_num_args() != 1) {
die("php cli.php upgrade:remove <name>\n"); die("php cli.php upgrade:remove <name>\n");
} }
Upgrader::transaction(function() use($name) { Upgrader::transaction(function() use ($name) {
Upgrader::remove($name); Upgrader::remove($name);
}); });
die("finished!\n"); die("finished!\n");

View File

@ -1,8 +1,7 @@
<?php <?php
requirePHPLib('form'); requirePHPLib('form');
if (!isSuperUser($myUser)) if (!isSuperUser($myUser)) {
{
become403Page(); become403Page();
} }
$time_form = new UOJForm('time'); $time_form = new UOJForm('time');

View File

@ -4,20 +4,16 @@
} }
function handlePost() { function handlePost() {
global $myUser; global $myUser;
if (!isset($_POST['old_password'])) if (!isset($_POST['old_password'])) {
{
return '无效表单'; return '无效表单';
} }
$old_password = $_POST['old_password']; $old_password = $_POST['old_password'];
if (!validatePassword($old_password) || !checkPassword($myUser, $old_password)) if (!validatePassword($old_password) || !checkPassword($myUser, $old_password)) {
{
return "失败:密码错误。"; return "失败:密码错误。";
} }
if ($_POST['ptag']) if ($_POST['ptag']) {
{
$password = $_POST['password']; $password = $_POST['password'];
if (!validatePassword($password)) if (!validatePassword($password)) {
{
return "失败:无效密码。"; return "失败:无效密码。";
} }
$password = getPasswordToStore($password, $myUser['username']); $password = getPasswordToStore($password, $myUser['username']);
@ -25,27 +21,23 @@
} }
$email = $_POST['email']; $email = $_POST['email'];
if (!validateEmail($email)) if (!validateEmail($email)) {
{
return "失败:无效电子邮箱。"; return "失败:无效电子邮箱。";
} }
$esc_email = DB::escape($email); $esc_email = DB::escape($email);
DB::update("update user_info set email = '$esc_email' where username = '{$myUser['username']}'"); DB::update("update user_info set email = '$esc_email' where username = '{$myUser['username']}'");
if ($_POST['Qtag']) if ($_POST['Qtag']) {
{
$qq = $_POST['qq']; $qq = $_POST['qq'];
if (!validateQQ($qq)) if (!validateQQ($qq)) {
{
return "失败无效QQ。"; return "失败无效QQ。";
} }
$esc_qq = DB::escape($qq); $esc_qq = DB::escape($qq);
DB::update("update user_info set qq = '$esc_qq' where username = '{$myUser['username']}'"); DB::update("update user_info set qq = '$esc_qq' where username = '{$myUser['username']}'");
} } else {
else
DB::update("update user_info set QQ = NULL where username = '{$myUser['username']}'"); DB::update("update user_info set QQ = NULL where username = '{$myUser['username']}'");
if ($_POST['sex'] == "U" || $_POST['sex'] == 'M' || $_POST['sex'] == 'F') }
{ if ($_POST['sex'] == "U" || $_POST['sex'] == 'M' || $_POST['sex'] == 'F') {
$sex = $_POST['sex']; $sex = $_POST['sex'];
$esc_sex = DB::escape($sex); $esc_sex = DB::escape($sex);
DB::update("update user_info set sex = '$esc_sex' where username = '{$myUser['username']}'"); DB::update("update user_info set sex = '$esc_sex' where username = '{$myUser['username']}'");

View File

@ -1,13 +1,17 @@
<?php <?php
function validateZan() { function validateZan() {
if (!validateUInt($_POST['id'])) if (!validateUInt($_POST['id'])) {
return false; return false;
if (!validateInt($_POST['delta'])) }
if (!validateInt($_POST['delta'])) {
return false; return false;
if ($_POST['delta'] != 1 && $_POST['delta'] != -1) }
if ($_POST['delta'] != 1 && $_POST['delta'] != -1) {
return false; return false;
if ($_POST['type'] != 'B' && $_POST['type'] != 'BC' && $_POST['type'] != 'P' && $_POST['type'] != 'C') }
if ($_POST['type'] != 'B' && $_POST['type'] != 'BC' && $_POST['type'] != 'P' && $_POST['type'] != 'C') {
return false; return false;
}
return true; return true;
} }
if (!validateZan()) { if (!validateZan()) {
@ -46,7 +50,7 @@
$cur += $delta; $cur += $delta;
if ($cur == 0) { if ($cur == 0) {
DB::query("delete from click_zans where username = '{$myUser['username']}' and type = '$type' and target_id = $id"); DB::query("delete from click_zans where username = '{$myUser['username']}' and type = '$type' and target_id = $id");
} else if ($cur != $delta) { } elseif ($cur != $delta) {
DB::query("update click_zans set val = '$cur' where username = '{$myUser['username']}' and type = '$type' and target_id = $id"); DB::query("update click_zans set val = '$cur' where username = '{$myUser['username']}' and type = '$type' and target_id = $id");
} else { } else {
DB::query("insert into click_zans (username, type, target_id, val) values ('{$myUser['username']}', '$type', $id, $cur)"); DB::query("insert into click_zans (username, type, target_id, val) values ('{$myUser['username']}', '$type', $id, $cur)");

View File

@ -86,7 +86,7 @@
$result = DB::query("select id, problem_id, content from submissions where contest_id = {$contest['id']}"); $result = DB::query("select id, problem_id, content from submissions where contest_id = {$contest['id']}");
while ($submission = DB::fetch($result, MYSQLI_ASSOC)) { while ($submission = DB::fetch($result, MYSQLI_ASSOC)) {
if (!isset($contest['extra_config']["problem_{$submission['problem_id']}"])) { if (!isset($contest['extra_config']["problem_{$submission['problem_id']}"])) {
$content = json_decode($submission['content'], true); $content = json_decode($submission['content'], true);
if (isset($content['final_test_config'])) { if (isset($content['final_test_config'])) {
$content['config'] = $content['final_test_config']; $content['config'] = $content['final_test_config'];
unset($content['final_test_config']); unset($content['final_test_config']);
@ -225,14 +225,14 @@ EOD;
$reply_question = new UOJForm('reply_question'); $reply_question = new UOJForm('reply_question');
$reply_question->addHidden('rid', '0', $reply_question->addHidden('rid', '0',
function($id) { function($id) {
global $contest; global $contest;
if (!validateUInt($id)) { if (!validateUInt($id)) {
return '无效ID'; return '无效ID';
} }
$q = DB::selectFirst("select * from contests_asks where id = $id"); $q = DB::selectFirst("select * from contests_asks where id = $id");
if ($q['contest_id'] != $contest['id']) { if ($q['contest_id'] != $contest['id']) {
return '无效ID'; return '无效ID';
} }
return ''; return '';
}, },
@ -247,15 +247,15 @@ EOD;
], '回复类型', 'private'); ], '回复类型', 'private');
$reply_question->addVTextArea('rcontent', '回复', '', $reply_question->addVTextArea('rcontent', '回复', '',
function($content) { function($content) {
if (!Auth::check()) { if (!Auth::check()) {
return '您尚未登录'; return '您尚未登录';
} }
switch ($_POST['rtype']) { switch ($_POST['rtype']) {
case 'public': case 'public':
case 'private': case 'private':
if (strlen($content) == 0) { if (strlen($content) == 0) {
return '回复不能为空'; return '回复不能为空';
} }
break; break;
} }
return ''; return '';
@ -406,10 +406,10 @@ EOD;
function echoContestCountdown() { function echoContestCountdown() {
global $contest; global $contest;
$rest_second = $contest['end_time']->getTimestamp() - UOJTime::$time_now->getTimestamp(); $rest_second = $contest['end_time']->getTimestamp() - UOJTime::$time_now->getTimestamp();
$time_str = UOJTime::$time_now_str; $time_str = UOJTime::$time_now_str;
$contest_ends_in = UOJLocale::get('contests::contest ends in'); $contest_ends_in = UOJLocale::get('contests::contest ends in');
echo <<<EOD echo <<<EOD
<div class="card border-info"> <div class="card border-info">
<div class="card-header bg-info"> <div class="card-header bg-info">
<h3 class="card-title">$contest_ends_in</h3> <h3 class="card-title">$contest_ends_in</h3>
@ -497,7 +497,7 @@ EOD;
<?php <?php
if ($contest['cur_progress'] <= CONTEST_IN_PROGRESS) { if ($contest['cur_progress'] <= CONTEST_IN_PROGRESS) {
echoContestCountdown(); echoContestCountdown();
} else if ($contest['cur_progress'] <= CONTEST_TESTING) { } elseif ($contest['cur_progress'] <= CONTEST_TESTING) {
echoContestJudgeProgress(); echoContestJudgeProgress();
} else { } else {
echoContestFinished(); echoContestFinished();

View File

@ -61,7 +61,7 @@
global $contest; global $contest;
if ($type == '+') { if ($type == '+') {
DB::query("insert into contests_permissions (contest_id, username) values (${contest['id']}, '$username')"); DB::query("insert into contests_permissions (contest_id, username) values (${contest['id']}, '$username')");
} else if ($type == '-') { } elseif ($type == '-') {
DB::query("delete from contests_permissions where contest_id = ${contest['id']} and username = '$username'"); DB::query("delete from contests_permissions where contest_id = ${contest['id']} and username = '$username'");
} }
} }
@ -92,7 +92,7 @@
if ($type == '+') { if ($type == '+') {
DB::insert("insert into contests_problems (contest_id, problem_id) values ({$contest['id']}, '$problem_id')"); DB::insert("insert into contests_problems (contest_id, problem_id) values ({$contest['id']}, '$problem_id')");
} else if ($type == '-') { } elseif ($type == '-') {
DB::delete("delete from contests_problems where contest_id = {$contest['id']} and problem_id = '$problem_id'"); DB::delete("delete from contests_problems where contest_id = {$contest['id']} and problem_id = '$problem_id'");
} }

View File

@ -41,7 +41,7 @@ EOD;
$mailer->addAddress($user['email'], $user['username']); $mailer->addAddress($user['email'], $user['username']);
$mailer->Subject = $oj_name_short."密码找回"; $mailer->Subject = $oj_name_short."密码找回";
$mailer->msgHTML($html); $mailer->msgHTML($html);
if (!$mailer->send()) { if (!$mailer->send()) {
error_log($mailer->ErrorInfo); error_log($mailer->ErrorInfo);
becomeMsgPage('<div class="text-center"><h2>邮件发送失败,请重试 <span class="glyphicon glyphicon-remove"></span></h2></div>'); becomeMsgPage('<div class="text-center"><h2>邮件发送失败,请重试 <span class="glyphicon glyphicon-remove"></span></h2></div>');
} else { } else {

View File

@ -5,29 +5,29 @@
$q_submission_id = isset($_GET['submission_id']) && validateUInt($_GET['submission_id']) ? $_GET['submission_id'] : null; $q_submission_id = isset($_GET['submission_id']) && validateUInt($_GET['submission_id']) ? $_GET['submission_id'] : null;
$q_hacker = isset($_GET['hacker']) && validateUsername($_GET['hacker']) ? $_GET['hacker'] : null; $q_hacker = isset($_GET['hacker']) && validateUsername($_GET['hacker']) ? $_GET['hacker'] : null;
$q_owner = isset($_GET['owner']) && validateUsername($_GET['owner']) ? $_GET['owner'] : null; $q_owner = isset($_GET['owner']) && validateUsername($_GET['owner']) ? $_GET['owner'] : null;
if($q_problem_id != null) { if ($q_problem_id != null) {
$conds[] = "problem_id = $q_problem_id"; $conds[] = "problem_id = $q_problem_id";
} }
if($q_submission_id != null) { if ($q_submission_id != null) {
$conds[] = "submission_id = $q_submission_id"; $conds[] = "submission_id = $q_submission_id";
} }
if($q_hacker != null) { if ($q_hacker != null) {
$conds[] = "hacker = '$q_hacker'"; $conds[] = "hacker = '$q_hacker'";
} }
if($q_owner != null) { if ($q_owner != null) {
$conds[] = "owner = '$q_owner'"; $conds[] = "owner = '$q_owner'";
} }
$selected_all = ' selected="selected"'; $selected_all = ' selected="selected"';
$selected_succ =''; $selected_succ ='';
$selected_fail =''; $selected_fail ='';
if(isset($_GET['status']) && validateUInt($_GET['status'])) { if (isset($_GET['status']) && validateUInt($_GET['status'])) {
if($_GET['status'] == 1) { if ($_GET['status'] == 1) {
$selected_all = ''; $selected_all = '';
$selected_succ =' selected="selected"'; $selected_succ =' selected="selected"';
$conds[] = 'success = 1'; $conds[] = 'success = 1';
} }
if($_GET['status'] == 2) { if ($_GET['status'] == 2) {
$selected_all = ''; $selected_all = '';
$selected_fail = ' selected="selected"'; $selected_fail = ' selected="selected"';
$conds[] = 'success = 0'; $conds[] = 'success = 0';

View File

@ -53,7 +53,7 @@
if ($custom_test_requirement && $_GET['get'] == 'custom-test-status-details' && Auth::check()) { if ($custom_test_requirement && $_GET['get'] == 'custom-test-status-details' && Auth::check()) {
if ($custom_test_submission == null) { if ($custom_test_submission == null) {
echo json_encode(null); echo json_encode(null);
} else if ($custom_test_submission['status'] != 'Judged') { } elseif ($custom_test_submission['status'] != 'Judged') {
echo json_encode(array( echo json_encode(array(
'judged' => false, 'judged' => false,
'html' => getSubmissionStatusDetails($custom_test_submission) 'html' => getSubmissionStatusDetails($custom_test_submission)
@ -114,7 +114,7 @@
} else { } else {
DB::query("insert into submissions (problem_id, submit_time, submitter, content, language, tot_size, status, result, is_hidden) values (${problem['id']}, now(), '${myUser['username']}', '$esc_content', '$esc_language', $tot_size, '${result['status']}', '$result_json', {$problem['is_hidden']})"); DB::query("insert into submissions (problem_id, submit_time, submitter, content, language, tot_size, status, result, is_hidden) values (${problem['id']}, now(), '${myUser['username']}', '$esc_content', '$esc_language', $tot_size, '${result['status']}', '$result_json', {$problem['is_hidden']})");
} }
} }
function handleCustomTestUpload($zip_file_name, $content, $tot_size) { function handleCustomTestUpload($zip_file_name, $content, $tot_size) {
global $problem, $contest, $myUser; global $problem, $contest, $myUser;
@ -139,7 +139,7 @@
$result_json = json_encode($result); $result_json = json_encode($result);
DB::insert("insert into custom_test_submissions (problem_id, submit_time, submitter, content, status, result) values ({$problem['id']}, now(), '{$myUser['username']}', '$esc_content', '{$result['status']}', '$result_json')"); DB::insert("insert into custom_test_submissions (problem_id, submit_time, submitter, content, status, result) values ({$problem['id']}, now(), '{$myUser['username']}', '$esc_content', '{$result['status']}', '$result_json')");
} }
if ($can_use_zip_upload) { if ($can_use_zip_upload) {
$zip_answer_form = newZipSubmissionForm('zip_answer', $zip_answer_form = newZipSubmissionForm('zip_answer',

View File

@ -44,72 +44,71 @@
//上传数据 //上传数据
if($_POST['problem_data_file_submit']=='submit'){ if ($_POST['problem_data_file_submit']=='submit') {
if ($_FILES["problem_data_file"]["error"] > 0){ if ($_FILES["problem_data_file"]["error"] > 0) {
$errmsg = "Error: ".$_FILES["problem_data_file"]["error"]; $errmsg = "Error: ".$_FILES["problem_data_file"]["error"];
becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>'); becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>');
} } else {
else{
$zip_mime_types = array('application/zip', 'application/x-zip', 'application/x-zip-compressed'); $zip_mime_types = array('application/zip', 'application/x-zip', 'application/x-zip-compressed');
if(in_array($_FILES["problem_data_file"]["type"], $zip_mime_types)){ if (in_array($_FILES["problem_data_file"]["type"], $zip_mime_types)) {
$up_filename="/tmp/".rand(0,100000000)."data.zip"; $up_filename="/tmp/".rand(0,100000000)."data.zip";
move_uploaded_file($_FILES["problem_data_file"]["tmp_name"], $up_filename); move_uploaded_file($_FILES["problem_data_file"]["tmp_name"], $up_filename);
$zip = new ZipArchive; $zip = new ZipArchive;
if ($zip->open($up_filename) === TRUE){ if ($zip->open($up_filename) === TRUE) {
$zip->extractTo("/var/uoj_data/upload/{$problem['id']}"); $zip->extractTo("/var/uoj_data/upload/{$problem['id']}");
$zip->close(); $zip->close();
exec("cd /var/uoj_data/upload/{$problem['id']}; if [ `find . -maxdepth 1 -type f`File = File ]; then for sub_dir in `find -maxdepth 1 -type d ! -name .`; do mv -f \$sub_dir/* . && rm -rf \$sub_dir; done; fi"); exec("cd /var/uoj_data/upload/{$problem['id']}; if [ `find . -maxdepth 1 -type f`File = File ]; then for sub_dir in `find -maxdepth 1 -type d ! -name .`; do mv -f \$sub_dir/* . && rm -rf \$sub_dir; done; fi");
echo "<script>alert('上传成功!')</script>"; echo "<script>alert('上传成功!')</script>";
}else{ } else {
$errmsg = "解压失败!"; $errmsg = "解压失败!";
becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>'); becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>');
} }
unlink($up_filename); unlink($up_filename);
}else{ } else {
$errmsg = "请上传zip格式"; $errmsg = "请上传zip格式";
becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>'); becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>');
} }
} }
} }
//添加配置文件 //添加配置文件
if($_POST['problem_settings_file_submit']=='submit'){ if ($_POST['problem_settings_file_submit']=='submit') {
if($_POST['use_builtin_checker'] and $_POST['n_tests'] and $_POST['input_pre'] and $_POST['input_suf'] and $_POST['output_pre'] and $_POST['output_suf'] and $_POST['time_limit'] and $_POST['memory_limit']){ if ($_POST['use_builtin_checker'] and $_POST['n_tests'] and $_POST['input_pre'] and $_POST['input_suf'] and $_POST['output_pre'] and $_POST['output_suf'] and $_POST['time_limit'] and $_POST['memory_limit']) {
$set_filename="/var/uoj_data/upload/{$problem['id']}/problem.conf"; $set_filename="/var/uoj_data/upload/{$problem['id']}/problem.conf";
$has_legacy=false; $has_legacy=false;
if(file_exists($set_filename)){ if (file_exists($set_filename)) {
$has_legacy=true; $has_legacy=true;
unlink($set_filename); unlink($set_filename);
} }
$setfile = fopen($set_filename, "w"); $setfile = fopen($set_filename, "w");
fwrite($setfile, "use_builtin_judger on\n"); fwrite($setfile, "use_builtin_judger on\n");
if($_POST['use_builtin_checker'] != 'ownchk'){ if ($_POST['use_builtin_checker'] != 'ownchk') {
fwrite($setfile, "use_builtin_checker ".$_POST['use_builtin_checker']."\n"); fwrite($setfile, "use_builtin_checker ".$_POST['use_builtin_checker']."\n");
} }
fwrite($setfile, "n_tests ".$_POST['n_tests']."\n"); fwrite($setfile, "n_tests ".$_POST['n_tests']."\n");
if($_POST['n_ex_tests']){ if ($_POST['n_ex_tests']) {
fwrite($setfile, "n_ex_tests ".$_POST['n_ex_tests']."\n"); fwrite($setfile, "n_ex_tests ".$_POST['n_ex_tests']."\n");
}else{ } else {
fwrite($setfile, "n_ex_tests 0\n"); fwrite($setfile, "n_ex_tests 0\n");
} }
if($_POST['n_sample_tests']){ if ($_POST['n_sample_tests']) {
fwrite($setfile, "n_sample_tests ".$_POST['n_sample_tests']."\n"); fwrite($setfile, "n_sample_tests ".$_POST['n_sample_tests']."\n");
}else{ } else {
fwrite($setfile, "n_sample_tests 0\n"); fwrite($setfile, "n_sample_tests 0\n");
} }
fwrite($setfile, "input_pre ".$_POST['input_pre']."\n"); fwrite($setfile, "input_pre ".$_POST['input_pre']."\n");
fwrite($setfile, "input_suf ".$_POST['input_suf']."\n"); fwrite($setfile, "input_suf ".$_POST['input_suf']."\n");
fwrite($setfile, "output_pre ".$_POST['output_pre']."\n"); fwrite($setfile, "output_pre ".$_POST['output_pre']."\n");
fwrite($setfile, "output_suf ".$_POST['output_suf']."\n"); fwrite($setfile, "output_suf ".$_POST['output_suf']."\n");
fwrite($setfile, "time_limit ".$_POST['time_limit']."\n"); fwrite($setfile, "time_limit ".$_POST['time_limit']."\n");
fwrite($setfile, "memory_limit ".$_POST['memory_limit']."\n"); fwrite($setfile, "memory_limit ".$_POST['memory_limit']."\n");
fclose($setfile); fclose($setfile);
if(!$has_legacy){ if (!$has_legacy) {
echo "<script>alert('添加成功!')</script>"; echo "<script>alert('添加成功!')</script>";
}else{ } else {
echo "<script>alert('替换成功!')</script>"; echo "<script>alert('替换成功!')</script>";
} }
}else{ } else {
$errmsg = "添加配置文件失败,请检查是否所有输入框都已填写!"; $errmsg = "添加配置文件失败,请检查是否所有输入框都已填写!";
becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>'); becomeMsgPage('<div>' . $errmsg . '</div><a href="/problem/'.$problem['id'].'/manage/data">返回</a>');
} }
@ -226,7 +225,9 @@ EOD
} }
if (!isset($data_files)) { if (!isset($data_files)) {
$this->data_files = array_filter(scandir($data_dir), function($x){return $x !== '.' && $x !== '..' && $x !== 'problem.conf';}); $this->data_files = array_filter(scandir($data_dir), function($x) {
return $x !== '.' && $x !== '..' && $x !== 'problem.conf';
});
natsort($this->data_files); natsort($this->data_files);
array_unshift($this->data_files, 'problem.conf'); array_unshift($this->data_files, 'problem.conf');
} else { } else {
@ -309,10 +310,12 @@ EOD
global $data_dir; global $data_dir;
global $problem; global $problem;
$allow_files = array_flip(array_filter(scandir($data_dir), function($x){return $x !== '.' && $x !== '..';})); $allow_files = array_flip(array_filter(scandir($data_dir), function($x) {
return $x !== '.' && $x !== '..';
}));
$getDisplaySrcFunc = function($name) use($allow_files) { $getDisplaySrcFunc = function($name) use ($allow_files) {
return function() use($name, $allow_files) { return function() use ($name, $allow_files) {
$src_name = $name . '.cpp'; $src_name = $name . '.cpp';
if (isset($allow_files[$src_name])) { if (isset($allow_files[$src_name])) {
echoFilePre($src_name); echoFilePre($src_name);
@ -358,7 +361,7 @@ EOD
$data_disp = new DataDisplayer($problem_conf, array('problem.conf')); $data_disp = new DataDisplayer($problem_conf, array('problem.conf'));
$data_disp->addDisplayer('tests', $data_disp->addDisplayer('tests',
function($self) use($problem_conf, $allow_files, $n_tests, $n_ex_tests) { function($self) use ($problem_conf, $allow_files, $n_tests, $n_ex_tests) {
for ($num = 1; $num <= $n_tests; $num++) { for ($num = 1; $num <= $n_tests; $num++) {
$input_file_name = getUOJProblemInputFileName($problem_conf, $num); $input_file_name = getUOJProblemInputFileName($problem_conf, $num);
$output_file_name = getUOJProblemOutputFileName($problem_conf, $num); $output_file_name = getUOJProblemOutputFileName($problem_conf, $num);
@ -388,7 +391,7 @@ EOD
} }
$data_disp->addDisplayer('extra tests', $data_disp->addDisplayer('extra tests',
function($self) use($problem_conf, $allow_files, $n_tests, $n_ex_tests) { function($self) use ($problem_conf, $allow_files, $n_tests, $n_ex_tests) {
for ($num = 1; $num <= $n_ex_tests; $num++) { for ($num = 1; $num <= $n_ex_tests; $num++) {
$input_file_name = getUOJProblemExtraInputFileName($problem_conf, $num); $input_file_name = getUOJProblemExtraInputFileName($problem_conf, $num);
$output_file_name = getUOJProblemExtraOutputFileName($problem_conf, $num); $output_file_name = getUOJProblemExtraOutputFileName($problem_conf, $num);
@ -584,9 +587,9 @@ EOD
$esc_content = DB::escape(json_encode($content)); $esc_content = DB::escape(json_encode($content));
$esc_language = DB::escape('C++'); $esc_language = DB::escape('C++');
$result = array(); $result = array();
$result['status'] = "Waiting"; $result['status'] = "Waiting";
$result_json = json_encode($result); $result_json = json_encode($result);
$is_hidden = $problem['is_hidden'] ? 1 : 0; $is_hidden = $problem['is_hidden'] ? 1 : 0;
DB::insert("insert into submissions (problem_id, submit_time, submitter, content, language, tot_size, status, result, is_hidden) values ({$problem['id']}, now(), '{$user_std['username']}', '$esc_content', '$esc_language', $tot_size, '{$result['status']}', '$result_json', $is_hidden)"); DB::insert("insert into submissions (problem_id, submit_time, submitter, content, language, tot_size, status, result, is_hidden) values ({$problem['id']}, now(), '{$user_std['username']}', '$esc_content', '$esc_language', $tot_size, '{$result['status']}', '$result_json', $is_hidden)");

View File

@ -19,7 +19,7 @@
global $problem; global $problem;
if ($type == '+') { if ($type == '+') {
DB::query("insert into problems_permissions (problem_id, username) values (${problem['id']}, '$username')"); DB::query("insert into problems_permissions (problem_id, username) values (${problem['id']}, '$username')");
} else if ($type == '-') { } elseif ($type == '-') {
DB::query("delete from problems_permissions where problem_id = ${problem['id']} and username = '$username'"); DB::query("delete from problems_permissions where problem_id = ${problem['id']} and username = '$username'");
} }
} }

View File

@ -71,8 +71,8 @@ EOD;
if ($search_tag) { if ($search_tag) {
$cond[] = "'".DB::escape($search_tag)."' in (select tag from problems_tags where problems_tags.problem_id = problems.id)"; $cond[] = "'".DB::escape($search_tag)."' in (select tag from problems_tags where problems_tags.problem_id = problems.id)";
} }
if (isset($_GET["search"])) { if (isset($_GET["search"])) {
$cond[]="title like '%".DB::escape($_GET["search"])."%' or id like '%".DB::escape($_GET["search"])."%'"; $cond[]="title like '%".DB::escape($_GET["search"])."%' or id like '%".DB::escape($_GET["search"])."%'";
} }
if ($cond) { if ($cond) {

View File

@ -24,7 +24,7 @@
while ($row = DB::fetch($result, MYSQLI_NUM)) { while ($row = DB::fetch($result, MYSQLI_NUM)) {
if ($row[0] == 0) { if ($row[0] == 0) {
$has_score_0 = true; $has_score_0 = true;
} else if ($row[0] == 100) { } elseif ($row[0] == 100) {
$has_score_100 = true; $has_score_100 = true;
} }
$score = $row[0] * 100; $score = $row[0] * 100;

View File

@ -34,10 +34,11 @@
$esc_email = DB::escape($email); $esc_email = DB::escape($email);
$svn_pw = uojRandString(10); $svn_pw = uojRandString(10);
if (!DB::selectCount("SELECT COUNT(*) FROM user_info")) if (!DB::selectCount("SELECT COUNT(*) FROM user_info")) {
DB::query("insert into user_info (username, email, password, svn_password, register_time, usergroup) values ('$username', '$esc_email', '$password', '$svn_pw', now(), 'S')"); DB::query("insert into user_info (username, email, password, svn_password, register_time, usergroup) values ('$username', '$esc_email', '$password', '$svn_pw', now(), 'S')");
else } else {
DB::query("insert into user_info (username, email, password, svn_password, register_time) values ('$username', '$esc_email', '$password', '$svn_pw', now())"); DB::query("insert into user_info (username, email, password, svn_password, register_time) values ('$username', '$esc_email', '$password', '$svn_pw', now())");
}
return "欢迎你!" . $username . ",你已成功注册。"; return "欢迎你!" . $username . ",你已成功注册。";
} }

View File

@ -18,7 +18,7 @@
$user = queryUser($username); $user = queryUser($username);
if ($user == null) { if ($user == null) {
return '不明错误'; return '不明错误';
} }
if ($check_code !== md5($user['username'] . '+' . $user['password'])) { if ($check_code !== md5($user['username'] . '+' . $user['password'])) {
return '不明错误'; return '不明错误';
} }

View File

@ -45,5 +45,4 @@ call_user_func(function() { // to prevent variable scope leak
Route::any("$prefix/post/{id}/delete", '/subdomain/blog/blog_delete.php'); Route::any("$prefix/post/{id}/delete", '/subdomain/blog/blog_delete.php');
} }
); );
}); });

View File

@ -6,10 +6,10 @@
$q_min_score = isset($_GET['min_score']) && validateUInt($_GET['min_score']) ? $_GET['min_score'] : null; $q_min_score = isset($_GET['min_score']) && validateUInt($_GET['min_score']) ? $_GET['min_score'] : null;
$q_max_score = isset($_GET['max_score']) && validateUInt($_GET['max_score']) ? $_GET['max_score'] : null; $q_max_score = isset($_GET['max_score']) && validateUInt($_GET['max_score']) ? $_GET['max_score'] : null;
$q_language = isset($_GET['language']) ? $_GET['language'] : null; $q_language = isset($_GET['language']) ? $_GET['language'] : null;
if($q_problem_id != null) { if ($q_problem_id != null) {
$conds[] = "problem_id = $q_problem_id"; $conds[] = "problem_id = $q_problem_id";
} }
if($q_submitter != null) { if ($q_submitter != null) {
$conds[] = "submitter = '$q_submitter'"; $conds[] = "submitter = '$q_submitter'";
} }
if ($q_min_score != null) { if ($q_min_score != null) {

View File

@ -46,16 +46,24 @@
$blog_link_contests = new UOJForm('blog_link_contests'); $blog_link_contests = new UOJForm('blog_link_contests');
$blog_link_contests->addInput('blog_id', 'text', '博客ID', '', $blog_link_contests->addInput('blog_id', 'text', '博客ID', '',
function ($x) { function ($x) {
if (!validateUInt($x)) return 'ID不合法'; if (!validateUInt($x)) {
if (!queryBlog($x)) return '博客不存在'; return 'ID不合法';
}
if (!queryBlog($x)) {
return '博客不存在';
}
return ''; return '';
}, },
null null
); );
$blog_link_contests->addInput('contest_id', 'text', '比赛ID', '', $blog_link_contests->addInput('contest_id', 'text', '比赛ID', '',
function ($x) { function ($x) {
if (!validateUInt($x)) return 'ID不合法'; if (!validateUInt($x)) {
if (!queryContest($x)) return '比赛不存在'; return 'ID不合法';
}
if (!queryContest($x)) {
return '比赛不存在';
}
return ''; return '';
}, },
null null
@ -87,12 +95,13 @@
$config[$n] = $row; $config[$n] = $row;
} }
if ($_POST['op-type'] == 'del') { if ($_POST['op-type'] == 'del') {
for ($i = 0; $i < $n; $i++) for ($i = 0; $i < $n; $i++) {
if ($config[$i][1] == $blog_id) { if ($config[$i][1] == $blog_id) {
$config[$i] = $config[$n - 1]; $config[$i] = $config[$n - 1];
unset($config[$n - 1]); unset($config[$n - 1]);
break; break;
} }
}
} }
$all_config['links'] = $config; $all_config['links'] = $config;
@ -105,16 +114,24 @@
$blog_link_index = new UOJForm('blog_link_index'); $blog_link_index = new UOJForm('blog_link_index');
$blog_link_index->addInput('blog_id2', 'text', '博客ID', '', $blog_link_index->addInput('blog_id2', 'text', '博客ID', '',
function ($x) { function ($x) {
if (!validateUInt($x)) return 'ID不合法'; if (!validateUInt($x)) {
if (!queryBlog($x)) return '博客不存在'; return 'ID不合法';
}
if (!queryBlog($x)) {
return '博客不存在';
}
return ''; return '';
}, },
null null
); );
$blog_link_index->addInput('blog_level', 'text', '置顶级别(删除不用填)', '0', $blog_link_index->addInput('blog_level', 'text', '置顶级别(删除不用填)', '0',
function ($x) { function ($x) {
if (!validateUInt($x)) return '数字不合法'; if (!validateUInt($x)) {
if ($x > 3) return '该级别不存在'; return '数字不合法';
}
if ($x > 3) {
return '该级别不存在';
}
return ''; return '';
}, },
null null
@ -215,7 +232,7 @@
if (!validateUsername($x)) { if (!validateUsername($x)) {
return '不合法'; return '不合法';
} }
if(DB::selectCount("select count(*) from judger_info where judger_name='$x'")!=0) { if (DB::selectCount("select count(*) from judger_info where judger_name='$x'")!=0) {
return '不合法'; return '不合法';
} }
$vdata['name'] = $x; $vdata['name'] = $x;
@ -235,7 +252,7 @@
if (!validateUsername($x)) { if (!validateUsername($x)) {
return '不合法'; return '不合法';
} }
if(DB::selectCount("select count(*) from judger_info where judger_name='$x'")!=1) { if (DB::selectCount("select count(*) from judger_info where judger_name='$x'")!=1) {
return '不合法'; return '不合法';
} }
$vdata['name'] = $x; $vdata['name'] = $x;
@ -367,8 +384,7 @@ EOD;
'tail' => 'order by id asc', 'tail' => 'order by id asc',
'page_len' => 5 'page_len' => 5
)); ));
foreach ($submissions_pag->get() as $submission) foreach ($submissions_pag->get() as $submission) {
{
$problem = queryProblemBrief($submission['problem_id']); $problem = queryProblemBrief($submission['problem_id']);
$submission_result = json_decode($submission['result'], true); $submission_result = json_decode($submission['result'], true);
echo '<dl class="dl-horizontal">'; echo '<dl class="dl-horizontal">';

View File

@ -10,11 +10,10 @@
$esc_qq = HTML::escape($user['qq'] != 0 ? $user['qq'] : 'Unfilled'); $esc_qq = HTML::escape($user['qq'] != 0 ? $user['qq'] : 'Unfilled');
$esc_sex = HTML::escape($user['sex']); $esc_sex = HTML::escape($user['sex']);
$col_sex="color:blue"; $col_sex="color:blue";
if($esc_sex == "M") { if ($esc_sex == "M") {
$esc_sex=""; $esc_sex="";
$col_sex="color:blue"; $col_sex="color:blue";
} } elseif ($esc_sex == "F") {
else if($esc_sex == "F") {
$esc_sex=""; $esc_sex="";
$col_sex="color:red"; $col_sex="color:red";
} else { } else {

View File

@ -4,51 +4,55 @@
} }
function handleMsgPost() { function handleMsgPost() {
global $myUser; global $myUser;
if (!isset($_POST['receiver'])) { if (!isset($_POST['receiver'])) {
return 'fail'; return 'fail';
} }
if (!isset($_POST['message'])) { if (!isset($_POST['message'])) {
return 'fail'; return 'fail';
} }
if (0 > strlen($_POST['message']) || strlen($_POST['message']) > 65535) { if (0 > strlen($_POST['message']) || strlen($_POST['message']) > 65535) {
return 'fail'; return 'fail';
} }
$receiver = $_POST['receiver']; $receiver = $_POST['receiver'];
$esc_message = DB::escape($_POST['message']); $esc_message = DB::escape($_POST['message']);
$sender = $myUser['username']; $sender = $myUser['username'];
if (!validateUsername($receiver) || !queryUser($receiver)) { if (!validateUsername($receiver) || !queryUser($receiver)) {
return 'fail'; return 'fail';
} }
DB::query("insert into user_msg (sender, receiver, message, send_time) values ('$sender', '$receiver', '$esc_message', now())"); DB::query("insert into user_msg (sender, receiver, message, send_time) values ('$sender', '$receiver', '$esc_message', now())");
return "ok"; return "ok";
} }
function getConversations() { function getConversations() {
global $myUser; global $myUser;
$username = $myUser['username']; $username = $myUser['username'];
$result = DB::query( "select * from user_msg where sender = '$username' or receiver = '$username' order by send_time DESC" ); $result = DB::query( "select * from user_msg where sender = '$username' or receiver = '$username' order by send_time DESC" );
$ret = array(); $ret = array();
while ($msg = DB::fetch($result)) { while ($msg = DB::fetch($result)) {
if ($msg['sender'] !== $username) { if ($msg['sender'] !== $username) {
if (isset($ret[$msg['sender']])) { if (isset($ret[$msg['sender']])) {
$ret[$msg['sender']][1] |= ($msg['read_time'] == null); $ret[$msg['sender']][1] |= ($msg['read_time'] == null);
continue; continue;
} }
$ret[$msg['sender']] = array($msg['send_time'], ($msg['read_time'] == null)); $ret[$msg['sender']] = array($msg['send_time'], ($msg['read_time'] == null));
} else { } else {
if (isset($ret[$msg['receiver']])) continue; if (isset($ret[$msg['receiver']])) {
$ret[$msg['receiver']] = array($msg['send_time'], 0); continue;
} }
$ret[$msg['receiver']] = array($msg['send_time'], 0);
} }
$res = []; }
foreach ($ret as $name => $con) { $res = [];
$res[] = [$con[0], $con[1], $name]; foreach ($ret as $name => $con) {
} $res[] = [$con[0], $con[1], $name];
usort($res, function($a, $b) { return -strcmp($a[0], $b[0]); }); }
return json_encode($res); usort($res, function($a, $b) {
return -strcmp($a[0], $b[0]);
});
return json_encode($res);
} }
function getHistory() { function getHistory() {
@ -95,11 +99,11 @@ EOD;
*/ */
if (isset($_POST['user_msg'])) { if (isset($_POST['user_msg'])) {
die(handleMsgPost()); die(handleMsgPost());
} elseif (isset($_GET['getConversations'])) { } elseif (isset($_GET['getConversations'])) {
die(getConversations()); die(getConversations());
} elseif (isset($_GET['getHistory'])) { } elseif (isset($_GET['getHistory'])) {
die(getHistory()); die(getHistory());
} }
?> ?>

View File

@ -35,11 +35,13 @@ function calcRating($standings, $K = 400) {
$weight[$i] = pow(7, $rating[$i] / $DELTA); $weight[$i] = pow(7, $rating[$i] / $DELTA);
} }
$exp = array_fill(0, $n, 0); $exp = array_fill(0, $n, 0);
for ($i = 0; $i < $n; ++$i) for ($i = 0; $i < $n; ++$i) {
for ($j = 0; $j < $n; ++$j) for ($j = 0; $j < $n; ++$j) {
if ($j != $i) { if ($j != $i) {
$exp[$i] += $weight[$i] / ($weight[$i] + $weight[$j]); $exp[$i] += $weight[$i] / ($weight[$i] + $weight[$j]);
} }
}
}
$new_rating = array(); $new_rating = array();
for ($i = 0; $i < $n; $i++) { for ($i = 0; $i < $n; $i++) {
@ -105,14 +107,14 @@ function genMoreContestInfo(&$contest) {
if ($contest['status'] == 'unfinished') { if ($contest['status'] == 'unfinished') {
if (UOJTime::$time_now < $contest['start_time']) { if (UOJTime::$time_now < $contest['start_time']) {
$contest['cur_progress'] = CONTEST_NOT_STARTED; $contest['cur_progress'] = CONTEST_NOT_STARTED;
} else if (UOJTime::$time_now < $contest['end_time']) { } elseif (UOJTime::$time_now < $contest['end_time']) {
$contest['cur_progress'] = CONTEST_IN_PROGRESS; $contest['cur_progress'] = CONTEST_IN_PROGRESS;
} else { } else {
$contest['cur_progress'] = CONTEST_PENDING_FINAL_TEST; $contest['cur_progress'] = CONTEST_PENDING_FINAL_TEST;
} }
} else if ($contest['status'] == 'testing') { } elseif ($contest['status'] == 'testing') {
$contest['cur_progress'] = CONTEST_TESTING; $contest['cur_progress'] = CONTEST_TESTING;
} else if ($contest['status'] == 'finished') { } elseif ($contest['status'] == 'finished') {
$contest['cur_progress'] = CONTEST_FINISHED; $contest['cur_progress'] = CONTEST_FINISHED;
} }
$contest['extra_config'] = json_decode($contest['extra_config'], true); $contest['extra_config'] = json_decode($contest['extra_config'], true);
@ -190,7 +192,7 @@ function calcStandings($contest, $contest_data, &$score, &$standings, $update_co
foreach ($contest_data['people'] as $person) { foreach ($contest_data['people'] as $person) {
$score[$person[0]] = array(); $score[$person[0]] = array();
} }
foreach ($contest_data['data'] as $submission) { foreach ($contest_data['data'] as $submission) {
$penalty = (new DateTime($submission[1]))->getTimestamp() - $contest['start_time']->getTimestamp(); $penalty = (new DateTime($submission[1]))->getTimestamp() - $contest['start_time']->getTimestamp();
if ($contest['extra_config']['standings_version'] >= 2) { if ($contest['extra_config']['standings_version'] >= 2) {
if ($submission[4] == 0) { if ($submission[4] == 0) {
@ -220,7 +222,7 @@ function calcStandings($contest, $contest_data, &$score, &$standings, $update_co
usort($standings, function($lhs, $rhs) { usort($standings, function($lhs, $rhs) {
if ($lhs[0] != $rhs[0]) { if ($lhs[0] != $rhs[0]) {
return $rhs[0] - $lhs[0]; return $rhs[0] - $lhs[0];
} else if ($lhs[1] != $rhs[1]) { } elseif ($lhs[1] != $rhs[1]) {
return $lhs[1] - $rhs[1]; return $lhs[1] - $rhs[1];
} else { } else {
return strcmp($lhs[2][0], $rhs[2][0]); return strcmp($lhs[2][0], $rhs[2][0]);

View File

@ -178,7 +178,9 @@
throw new UOJProblemConfException("syntax error"); throw new UOJProblemConfException("syntax error");
} }
$this->allow_files = array_flip(array_filter(scandir($this->upload_dir), function($x){return $x !== '.' && $x !== '..';})); $this->allow_files = array_flip(array_filter(scandir($this->upload_dir), function($x) {
return $x !== '.' && $x !== '..';
}));
$zip_file = new ZipArchive(); $zip_file = new ZipArchive();
if ($zip_file->open("{$this->prepare_dir}/download.zip", ZipArchive::CREATE) !== true) { if ($zip_file->open("{$this->prepare_dir}/download.zip", ZipArchive::CREATE) !== true) {

View File

@ -21,7 +21,8 @@
public function __construct($form_name) { public function __construct($form_name) {
$this->form_name = $form_name; $this->form_name = $form_name;
$this->succ_href = $_SERVER['REQUEST_URI']; $this->succ_href = $_SERVER['REQUEST_URI'];
$this->handle = function(&$vdata){}; $this->handle = function(&$vdata) {
};
$this->run_at_server_handler["check-{$this->form_name}"] = function() { $this->run_at_server_handler["check-{$this->form_name}"] = function() {
die(json_encode($this->validateAtServer())); die(json_encode($this->validateAtServer()));
@ -53,7 +54,7 @@
$esc_err = htmlspecialchars($err); $esc_err = htmlspecialchars($err);
$err_str .= "$name: $esc_err<br />"; $err_str .= "$name: $esc_err<br />";
} }
becomeMsgPage($err_str); becomeMsgPage($err_str);
} }
$fun = $this->handle; $fun = $this->handle;
$fun($this->vdata); $fun($this->vdata);
@ -244,7 +245,7 @@ EOD;
$name = $editor->name; $name = $editor->name;
$this->addVInput("{$name}_title", 'text', '标题', $editor->cur_data['title'], $this->addVInput("{$name}_title", 'text', '标题', $editor->cur_data['title'],
function ($title) use($editor) { function ($title) use ($editor) {
return $editor->validateTitle(); return $editor->validateTitle();
}, },
null null
@ -253,7 +254,7 @@ EOD;
$content_md_html = HTML::div_vtextarea("{$name}_content_md", '内容', $editor->cur_data['content_md']); $content_md_html = HTML::div_vtextarea("{$name}_content_md", '内容', $editor->cur_data['content_md']);
$this->add("{$name}_content_md", $content_md_html, $this->add("{$name}_content_md", $content_md_html,
function ($content_md) use($editor) { function ($content_md) use ($editor) {
return $editor->validateContentMd(); return $editor->validateContentMd();
}, },
'always_ok' 'always_ok'
@ -264,7 +265,7 @@ EOD;
EOD EOD
); );
$this->run_at_server_handler["save-{$name}"] = function() use($name, $editor) { $this->run_at_server_handler["save-{$name}"] = function() use ($name, $editor) {
if ($this->no_submit) { if ($this->no_submit) {
become404Page(); become404Page();
} }
@ -311,7 +312,7 @@ EOD;
public function addSourceCodeInput($name, $text, $languages) { public function addSourceCodeInput($name, $text, $languages) {
$this->add("{$name}_upload_type", '', $this->add("{$name}_upload_type", '',
function($type, &$vdata) use($name) { function($type, &$vdata) use ($name) {
if ($type == 'editor') { if ($type == 'editor') {
if (!isset($_POST["{$name}_editor"])) { if (!isset($_POST["{$name}_editor"])) {
return '你在干啥……怎么什么都没交过来……?'; return '你在干啥……怎么什么都没交过来……?';
@ -362,7 +363,7 @@ EOD
} }
public function addTextFileInput($name, $text) { public function addTextFileInput($name, $text) {
$this->add("{$name}_upload_type", '', $this->add("{$name}_upload_type", '',
function($type, &$vdata) use($name) { function($type, &$vdata) use ($name) {
if ($type == 'editor') { if ($type == 'editor') {
if (!isset($_POST["{$name}_editor"])) { if (!isset($_POST["{$name}_editor"])) {
return '你在干啥……怎么什么都没交过来……?'; return '你在干啥……怎么什么都没交过来……?';
@ -616,7 +617,7 @@ EOD;
$form = new UOJForm($form_name); $form = new UOJForm($form_name);
$form->addTextArea( $form->addTextArea(
$form_name . '_cmds', '命令', '', $form_name . '_cmds', '命令', '',
function($str, &$vdata) use($validate) { function($str, &$vdata) use ($validate) {
$cmds = array(); $cmds = array();
foreach (explode("\n", $str) as $line_id => $raw_line) { foreach (explode("\n", $str) as $line_id => $raw_line) {
$line = trim($raw_line); $line = trim($raw_line);
@ -639,13 +640,13 @@ EOD;
null null
); );
if (!isset($final)) { if (!isset($final)) {
$form->handle = function(&$vdata) use($handle) { $form->handle = function(&$vdata) use ($handle) {
foreach ($vdata['cmds'] as $cmd) { foreach ($vdata['cmds'] as $cmd) {
$handle($cmd['type'], $cmd['obj']); $handle($cmd['type'], $cmd['obj']);
} }
}; };
} else { } else {
$form->handle = function(&$vdata) use($handle, $final) { $form->handle = function(&$vdata) use ($handle, $final) {
foreach ($vdata['cmds'] as $cmd) { foreach ($vdata['cmds'] as $cmd) {
$handle($cmd['type'], $cmd['obj']); $handle($cmd['type'], $cmd['obj']);
} }
@ -662,11 +663,11 @@ EOD;
$languages = isset($req['languages']) ? $req['languages'] : $GLOBALS['uojSupportedLanguages']; $languages = isset($req['languages']) ? $req['languages'] : $GLOBALS['uojSupportedLanguages'];
$form->addSourceCodeInput("{$form_name}_{$req['name']}", UOJLocale::get('problems::source code').':'.$req['name'], $languages); $form->addSourceCodeInput("{$form_name}_{$req['name']}", UOJLocale::get('problems::source code').':'.$req['name'], $languages);
} elseif ($req['type'] == "text") { } elseif ($req['type'] == "text") {
$form->addTextFileInput("{$form_name}_{$req['name']}", UOJLocale::get('problems::text file').':'.$req['file_name']); $form->addTextFileInput("{$form_name}_{$req['name']}", UOJLocale::get('problems::text file').':'.$req['file_name']);
} }
} }
$form->handle = function(&$vdata) use($form_name, $requirement, $zip_file_name_gen, $handle) { $form->handle = function(&$vdata) use ($form_name, $requirement, $zip_file_name_gen, $handle) {
global $myUser; global $myUser;
if ($myUser == null) { if ($myUser == null) {
@ -724,7 +725,9 @@ EOD;
function newZipSubmissionForm($form_name, $requirement, $zip_file_name_gen, $handle) { function newZipSubmissionForm($form_name, $requirement, $zip_file_name_gen, $handle) {
$form = new UOJForm($form_name); $form = new UOJForm($form_name);
$name = "zip_ans_{$form_name}"; $name = "zip_ans_{$form_name}";
$text = UOJLocale::get('problems::zip file upload introduction', join(array_map(function($req){return $req['file_name'];}, $requirement), ', ')); $text = UOJLocale::get('problems::zip file upload introduction', join(array_map(function($req) {
return $req['file_name'];
}, $requirement), ', '));
$browse_text = UOJLocale::get('browse'); $browse_text = UOJLocale::get('browse');
$html = <<<EOD $html = <<<EOD
<div id="div-{$name}"> <div id="div-{$name}">
@ -744,7 +747,7 @@ EOD;
$form->is_big = true; $form->is_big = true;
$form->has_file = true; $form->has_file = true;
$form->handle = function() use($name, $requirement, $zip_file_name_gen, $handle) { $form->handle = function() use ($name, $requirement, $zip_file_name_gen, $handle) {
global $myUser; global $myUser;
if ($myUser == null) { if ($myUser == null) {
@ -791,7 +794,7 @@ EOD;
} }
foreach ($requirement as $req) { foreach ($requirement as $req) {
$zip_file->addFromString($req['file_name'], $zip_content[$req['name']]); $zip_file->addFromString($req['file_name'], $zip_content[$req['name']]);
} }
$zip_file->close(); $zip_file->close();

View File

@ -2,7 +2,7 @@
function uojHandleAtSign($str, $uri) { function uojHandleAtSign($str, $uri) {
$referrers = array(); $referrers = array();
$res = preg_replace_callback('/@(@|[a-zA-Z0-9_]{1,20})/', function($matches) use(&$referrers) { $res = preg_replace_callback('/@(@|[a-zA-Z0-9_]{1,20})/', function($matches) use (&$referrers) {
if ($matches[1] === '@') { if ($matches[1] === '@') {
return '@'; return '@';
} else { } else {
@ -89,7 +89,7 @@ function getUserLink($username, $rating = null) {
function getProblemLink($problem, $problem_title = '!title_only') { function getProblemLink($problem, $problem_title = '!title_only') {
if ($problem_title == '!title_only') { if ($problem_title == '!title_only') {
$problem_title = $problem['title']; $problem_title = $problem['title'];
} else if ($problem_title == '!id_and_title') { } elseif ($problem_title == '!id_and_title') {
$problem_title = "#${problem['id']}. ${problem['title']}"; $problem_title = "#${problem['id']}. ${problem['title']}";
} }
return '<a href="/problem/'.$problem['id'].'">'.$problem_title.'</a>'; return '<a href="/problem/'.$problem['id'].'">'.$problem_title.'</a>';
@ -97,7 +97,7 @@ function getProblemLink($problem, $problem_title = '!title_only') {
function getContestProblemLink($problem, $contest_id, $problem_title = '!title_only') { function getContestProblemLink($problem, $contest_id, $problem_title = '!title_only') {
if ($problem_title == '!title_only') { if ($problem_title == '!title_only') {
$problem_title = $problem['title']; $problem_title = $problem['title'];
} else if ($problem_title == '!id_and_title') { } elseif ($problem_title == '!id_and_title') {
$problem_title = "#{$problem['id']}. {$problem['title']}"; $problem_title = "#{$problem['id']}. {$problem['title']}";
} }
return '<a href="/contest/'.$contest_id.'/problem/'.$problem['id'].'">'.$problem_title.'</a>'; return '<a href="/contest/'.$contest_id.'/problem/'.$problem['id'].'">'.$problem_title.'</a>';
@ -116,20 +116,21 @@ function getClickZanBlock($type, $id, $cnt, $val = null) {
function getLongTablePageRawUri($page) { function getLongTablePageRawUri($page) {
$path = strtok(UOJContext::requestURI(), '?'); $path = strtok(UOJContext::requestURI(), '?');
$query_string = strtok('?'); $query_string = strtok('?');
parse_str($query_string, $param); parse_str($query_string, $param);
$param['page'] = $page; $param['page'] = $page;
if ($page == 1) if ($page == 1) {
unset($param['page']); unset($param['page']);
if ($param) {
return $path . '?' . http_build_query($param);
} else {
return $path;
}
} }
if ($param) {
return $path . '?' . http_build_query($param);
} else {
return $path;
}
}
function getLongTablePageUri($page) { function getLongTablePageUri($page) {
return HTML::escape(getLongTablePageRawUri($page)); return HTML::escape(getLongTablePageRawUri($page));
} }
@ -190,7 +191,7 @@ function getSubmissionStatusDetails($submission) {
if ($submission['status_details'] !== '') { if ($submission['status_details'] !== '') {
$status_img = $fly; $status_img = $fly;
$status_text = HTML::escape($submission['status_details']); $status_text = HTML::escape($submission['status_details']);
} else { } else {
$status_img = $think; $status_img = $think;
$status_text = $out_status; $status_text = $out_status;
} }
@ -249,10 +250,12 @@ function echoSubmission($submission, $config, $user) {
} }
echo '</td>'; echo '</td>';
} }
if (!isset($config['used_time_hidden'])) if (!isset($config['used_time_hidden'])) {
echo '<td>', $used_time_str, '</td>'; echo '<td>', $used_time_str, '</td>';
if (!isset($config['used_memory_hidden'])) }
if (!isset($config['used_memory_hidden'])) {
echo '<td>', $used_memory_str, '</td>'; echo '<td>', $used_memory_str, '</td>';
}
echo '<td>', '<a href="/submission/', $submission['id'], '">', $submission['language'], '</a>', '</td>'; echo '<td>', '<a href="/submission/', $submission['id'], '">', $submission['language'], '</a>', '</td>';
@ -263,10 +266,12 @@ function echoSubmission($submission, $config, $user) {
} }
echo '<td>', $size_str, '</td>'; echo '<td>', $size_str, '</td>';
if (!isset($config['submit_time_hidden'])) if (!isset($config['submit_time_hidden'])) {
echo '<td><small>', $submission['submit_time'], '</small></td>'; echo '<td><small>', $submission['submit_time'], '</small></td>';
if (!isset($config['judge_time_hidden'])) }
if (!isset($config['judge_time_hidden'])) {
echo '<td><small>', $submission['judge_time'], '</small></td>'; echo '<td><small>', $submission['judge_time'], '</small></td>';
}
echo '</tr>'; echo '</tr>';
if ($show_status_details) { if ($show_status_details) {
echo '<tr id="', "status_details_{$submission['id']}", '" class="info">'; echo '<tr id="', "status_details_{$submission['id']}", '" class="info">';
@ -282,24 +287,32 @@ function echoSubmissionsListOnlyOne($submission, $config, $user) {
echo '<table class="table table-bordered table-text-center">'; echo '<table class="table table-bordered table-text-center">';
echo '<thead>'; echo '<thead>';
echo '<tr>'; echo '<tr>';
if (!isset($config['id_hidden'])) if (!isset($config['id_hidden'])) {
echo '<th>ID</th>'; echo '<th>ID</th>';
if (!isset($config['problem_hidden'])) }
if (!isset($config['problem_hidden'])) {
echo '<th>'.UOJLocale::get('problems::problem').'</th>'; echo '<th>'.UOJLocale::get('problems::problem').'</th>';
if (!isset($config['submitter_hidden'])) }
if (!isset($config['submitter_hidden'])) {
echo '<th>'.UOJLocale::get('problems::submitter').'</th>'; echo '<th>'.UOJLocale::get('problems::submitter').'</th>';
if (!isset($config['result_hidden'])) }
if (!isset($config['result_hidden'])) {
echo '<th>'.UOJLocale::get('problems::result').'</th>'; echo '<th>'.UOJLocale::get('problems::result').'</th>';
if (!isset($config['used_time_hidden'])) }
if (!isset($config['used_time_hidden'])) {
echo '<th>'.UOJLocale::get('problems::used time').'</th>'; echo '<th>'.UOJLocale::get('problems::used time').'</th>';
if (!isset($config['used_memory_hidden'])) }
if (!isset($config['used_memory_hidden'])) {
echo '<th>'.UOJLocale::get('problems::used memory').'</th>'; echo '<th>'.UOJLocale::get('problems::used memory').'</th>';
}
echo '<th>'.UOJLocale::get('problems::language').'</th>'; echo '<th>'.UOJLocale::get('problems::language').'</th>';
echo '<th>'.UOJLocale::get('problems::file size').'</th>'; echo '<th>'.UOJLocale::get('problems::file size').'</th>';
if (!isset($config['submit_time_hidden'])) if (!isset($config['submit_time_hidden'])) {
echo '<th>'.UOJLocale::get('problems::submit time').'</th>'; echo '<th>'.UOJLocale::get('problems::submit time').'</th>';
if (!isset($config['judge_time_hidden'])) }
if (!isset($config['judge_time_hidden'])) {
echo '<th>'.UOJLocale::get('problems::judge time').'</th>'; echo '<th>'.UOJLocale::get('problems::judge time').'</th>';
}
echo '</tr>'; echo '</tr>';
echo '</thead>'; echo '</thead>';
echo '<tbody>'; echo '<tbody>';
@ -375,7 +388,7 @@ function echoSubmissionsList($cond, $tail, $config, $user) {
$table_config = isset($config['table_config']) ? $config['table_config'] : null; $table_config = isset($config['table_config']) ? $config['table_config'] : null;
echoLongTable($col_names, $table_name, $cond, $tail, $header_row, echoLongTable($col_names, $table_name, $cond, $tail, $header_row,
function($submission) use($config, $user) { function($submission) use ($config, $user) {
echoSubmission($submission, $config, $user); echoSubmission($submission, $config, $user);
}, $table_config); }, $table_config);
} }
@ -429,8 +442,7 @@ function echoSubmissionContent($submission, $requirement) {
echo '</div>'; echo '</div>';
echo '<div class="card-footer">'.$footer_text.'</div>'; echo '<div class="card-footer">'.$footer_text.'</div>';
echo '</div>'; echo '</div>';
} } elseif ($req['type'] == "text") {
else if ($req['type'] == "text") {
$file_content = $zip_file->getFromName("{$req['file_name']}", 504); $file_content = $zip_file->getFromName("{$req['file_name']}", 504);
$file_content = strOmit($file_content, 500); $file_content = strOmit($file_content, 500);
$file_content = uojTextEncode($file_content, array('allow_CR' => true, 'html_escape' => true)); $file_content = uojTextEncode($file_content, array('allow_CR' => true, 'html_escape' => true));
@ -476,8 +488,7 @@ class JudgementDetailsPrinter {
echo '<div id="', $this->name, '_details_accordion">'; echo '<div id="', $this->name, '_details_accordion">';
if ($this->styler->show_small_tip) { if ($this->styler->show_small_tip) {
echo '<div class="text-right text-muted">', '小提示:点击横条可展开更详细的信息', '</div>'; echo '<div class="text-right text-muted">', '小提示:点击横条可展开更详细的信息', '</div>';
} } elseif ($this->styler->ioi_contest_is_running) {
elseif ($this->styler->ioi_contest_is_running) {
echo '<div class="text-right text-muted">', 'IOI赛制比赛中不支持显示详细信息', '</div>'; echo '<div class="text-right text-muted">', 'IOI赛制比赛中不支持显示详细信息', '</div>';
} }
$this->_print_c($node); $this->_print_c($node);
@ -774,10 +785,12 @@ function echoHackDetails($hack_details, $name) {
function echoHack($hack, $config, $user) { function echoHack($hack, $config, $user) {
$problem = queryProblemBrief($hack['problem_id']); $problem = queryProblemBrief($hack['problem_id']);
echo '<tr>'; echo '<tr>';
if (!isset($config['id_hidden'])) if (!isset($config['id_hidden'])) {
echo '<td><a href="/hack/', $hack['id'], '">#', $hack['id'], '</a></td>'; echo '<td><a href="/hack/', $hack['id'], '">#', $hack['id'], '</a></td>';
if (!isset($config['submission_hidden'])) }
if (!isset($config['submission_hidden'])) {
echo '<td><a href="/submission/', $hack['submission_id'], '">#', $hack['submission_id'], '</a></td>'; echo '<td><a href="/submission/', $hack['submission_id'], '">#', $hack['submission_id'], '</a></td>';
}
if (!isset($config['problem_hidden'])) { if (!isset($config['problem_hidden'])) {
if ($hack['contest_id']) { if ($hack['contest_id']) {
echo '<td>', getContestProblemLink($problem, $hack['contest_id'], '!id_and_title'), '</td>'; echo '<td>', getContestProblemLink($problem, $hack['contest_id'], '!id_and_title'), '</td>';
@ -785,13 +798,14 @@ function echoHack($hack, $config, $user) {
echo '<td>', getProblemLink($problem, '!id_and_title'), '</td>'; echo '<td>', getProblemLink($problem, '!id_and_title'), '</td>';
} }
} }
if (!isset($config['hacker_hidden'])) if (!isset($config['hacker_hidden'])) {
echo '<td>', getUserLink($hack['hacker']), '</td>'; echo '<td>', getUserLink($hack['hacker']), '</td>';
if (!isset($config['owner_hidden'])) }
if (!isset($config['owner_hidden'])) {
echo '<td>', getUserLink($hack['owner']), '</td>'; echo '<td>', getUserLink($hack['owner']), '</td>';
if (!isset($config['result_hidden'])) }
{ if (!isset($config['result_hidden'])) {
if($hack['judge_time'] == null) { if ($hack['judge_time'] == null) {
echo '<td><a href="/hack/', $hack['id'], '">Waiting</a></td>'; echo '<td><a href="/hack/', $hack['id'], '">Waiting</a></td>';
} elseif ($hack['success'] == null) { } elseif ($hack['success'] == null) {
echo '<td><a href="/hack/', $hack['id'], '">Judging</a></td>'; echo '<td><a href="/hack/', $hack['id'], '">Judging</a></td>';
@ -800,13 +814,15 @@ function echoHack($hack, $config, $user) {
} else { } else {
echo '<td><a href="/hack/', $hack['id'], '" class="uoj-status" data-success="0"><strong>Failed.</strong></a></td>'; echo '<td><a href="/hack/', $hack['id'], '" class="uoj-status" data-success="0"><strong>Failed.</strong></a></td>';
} }
} } else {
else
echo '<td>Hidden</td>'; echo '<td>Hidden</td>';
if (!isset($config['submit_time_hidden'])) }
if (!isset($config['submit_time_hidden'])) {
echo '<td>', $hack['submit_time'], '</td>'; echo '<td>', $hack['submit_time'], '</td>';
if (!isset($config['judge_time_hidden'])) }
if (!isset($config['judge_time_hidden'])) {
echo '<td>', $hack['judge_time'], '</td>'; echo '<td>', $hack['judge_time'], '</td>';
}
echo '</tr>'; echo '</tr>';
} }
function echoHackListOnlyOne($hack, $config, $user) { function echoHackListOnlyOne($hack, $config, $user) {
@ -814,22 +830,30 @@ function echoHackListOnlyOne($hack, $config, $user) {
echo '<table class="table table-bordered table-text-center">'; echo '<table class="table table-bordered table-text-center">';
echo '<thead>'; echo '<thead>';
echo '<tr>'; echo '<tr>';
if (!isset($config['id_hidden'])) if (!isset($config['id_hidden'])) {
echo '<th>ID</th>'; echo '<th>ID</th>';
if (!isset($config['submission_id_hidden'])) }
if (!isset($config['submission_id_hidden'])) {
echo '<th>'.UOJLocale::get('problems::submission id').'</th>'; echo '<th>'.UOJLocale::get('problems::submission id').'</th>';
if (!isset($config['problem_hidden'])) }
if (!isset($config['problem_hidden'])) {
echo '<th>'.UOJLocale::get('problems::problem').'</th>'; echo '<th>'.UOJLocale::get('problems::problem').'</th>';
if (!isset($config['hacker_hidden'])) }
if (!isset($config['hacker_hidden'])) {
echo '<th>'.UOJLocale::get('problems::hacker').'</th>'; echo '<th>'.UOJLocale::get('problems::hacker').'</th>';
if (!isset($config['owner_hidden'])) }
if (!isset($config['owner_hidden'])) {
echo '<th>'.UOJLocale::get('problems::owner').'</th>'; echo '<th>'.UOJLocale::get('problems::owner').'</th>';
if (!isset($config['result_hidden'])) }
if (!isset($config['result_hidden'])) {
echo '<th>'.UOJLocale::get('problems::result').'</th>'; echo '<th>'.UOJLocale::get('problems::result').'</th>';
if (!isset($config['submit_time_hidden'])) }
if (!isset($config['submit_time_hidden'])) {
echo '<th>'.UOJLocale::get('problems::submit time').'</th>'; echo '<th>'.UOJLocale::get('problems::submit time').'</th>';
if (!isset($config['judge_time_hidden'])) }
if (!isset($config['judge_time_hidden'])) {
echo '<th>'.UOJLocale::get('problems::judge time').'</th>'; echo '<th>'.UOJLocale::get('problems::judge time').'</th>';
}
echo '</tr>'; echo '</tr>';
echo '</thead>'; echo '</thead>';
echo '<tbody>'; echo '<tbody>';
@ -891,7 +915,7 @@ function echoHacksList($cond, $tail, $config, $user) {
} }
echoLongTable($col_names, 'hacks', $cond, $tail, $header_row, echoLongTable($col_names, 'hacks', $cond, $tail, $header_row,
function($hacks) use($config, $user) { function($hacks) use ($config, $user) {
echoHack($hacks, $config, $user); echoHack($hacks, $config, $user);
}, null); }, null);
} }
@ -935,10 +959,10 @@ function echoRanklist($config = array()) {
$header_row .= '</tr>'; $header_row .= '</tr>';
$users = array(); $users = array();
$print_row = function($user, $now_cnt) use(&$users) { $print_row = function($user, $now_cnt) use (&$users) {
if (!$users) { if (!$users) {
$rank = DB::selectCount("select count(*) from user_info where rating > {$user['rating']}") + 1; $rank = DB::selectCount("select count(*) from user_info where rating > {$user['rating']}") + 1;
} else if ($user['rating'] == $users[count($users) - 1]['rating']) { } elseif ($user['rating'] == $users[count($users) - 1]['rating']) {
$rank = $users[count($users) - 1]['rank']; $rank = $users[count($users) - 1]['rank'];
} else { } else {
$rank = $now_cnt; $rank = $now_cnt;

View File

@ -10,12 +10,15 @@ function hasProblemPermission($user, $problem) {
return DB::selectFirst("select * from problems_permissions where username = '{$user['username']}' and problem_id = {$problem['id']}") != null; return DB::selectFirst("select * from problems_permissions where username = '{$user['username']}' and problem_id = {$problem['id']}") != null;
} }
function hasViewPermission($str,$user,$problem,$submission) { function hasViewPermission($str,$user,$problem,$submission) {
if($str=='ALL') if ($str=='ALL') {
return true; return true;
if($str=='ALL_AFTER_AC') }
if ($str=='ALL_AFTER_AC') {
return hasAC($user,$problem); return hasAC($user,$problem);
if($str=='SELF') }
if ($str=='SELF') {
return $submission['submitter']==$user['username']; return $submission['submitter']==$user['username'];
}
return false; return false;
} }
@ -31,7 +34,7 @@ function hasContestPermission($user, $contest) {
function hasRegistered($user, $contest) { function hasRegistered($user, $contest) {
return DB::selectFirst("select * from contests_registrants where username = '${user['username']}' and contest_id = ${contest['id']}") != null; return DB::selectFirst("select * from contests_registrants where username = '${user['username']}' and contest_id = ${contest['id']}") != null;
} }
function hasAC($user, $problem) { function hasAC($user, $problem) {
return DB::selectFirst("select * from best_ac_submissions where submitter = '${user['username']}' and problem_id = ${problem['id']}") != null; return DB::selectFirst("select * from best_ac_submissions where submitter = '${user['username']}' and problem_id = ${problem['id']}") != null;
} }
@ -122,7 +125,7 @@ function isContestProblemVisibleToUser($problem, $contest, $user) {
function isSubmissionVisibleToUser($submission, $problem, $user) { function isSubmissionVisibleToUser($submission, $problem, $user) {
if (isSuperUser($user)) { if (isSuperUser($user)) {
return true; return true;
} else if (!$submission['is_hidden']) { } elseif (!$submission['is_hidden']) {
return true; return true;
} else { } else {
return hasProblemPermission($user, $problem); return hasProblemPermission($user, $problem);

View File

@ -4,7 +4,7 @@ function getPasswordToStore($password, $username) {
return md5($username . $password); return md5($username . $password);
} }
function checkPassword($user, $password) { function checkPassword($user, $password) {
return $user['password'] == md5($user['username'] . $password); return $user['password'] == md5($user['username'] . $password);
} }
function getPasswordClientSalt() { function getPasswordClientSalt() {
return UOJConfig::$data['security']['user']['client_salt']; return UOJConfig::$data['security']['user']['client_salt'];
@ -19,7 +19,7 @@ function crsf_token() {
function crsf_check() { function crsf_check() {
if (isset($_POST['_token'])) { if (isset($_POST['_token'])) {
$_token = $_POST['_token']; $_token = $_POST['_token'];
} else if (isset($_GET['_token'])) { } elseif (isset($_GET['_token'])) {
$_token = $_GET['_token']; $_token = $_GET['_token'];
} else { } else {
return false; return false;

View File

@ -1,7 +1,7 @@
<?php <?php
function mergeConfig(&$config, $default_config) { function mergeConfig(&$config, $default_config) {
foreach($default_config as $key => $val) { foreach ($default_config as $key => $val) {
if (!isset($config[$key])) { if (!isset($config[$key])) {
$config[$key] = $val; $config[$key] = $val;
} elseif (is_array($config[$key])) { } elseif (is_array($config[$key])) {
@ -69,11 +69,11 @@ function uojTextEncode($str, $config = array()) {
if ($config['html_escape']) { if ($config['html_escape']) {
if ($c == '&') { if ($c == '&') {
$res .= '&amp;'; $res .= '&amp;';
} else if ($c == '"') { } elseif ($c == '"') {
$res .= '&quot;'; $res .= '&quot;';
} else if ($c == '<') { } elseif ($c == '<') {
$res .= '&lt;'; $res .= '&lt;';
} else if ($c == '>') { } elseif ($c == '>') {
$res .= '&gt;'; $res .= '&gt;';
} else { } else {
$res .= $c; $res .= $c;
@ -108,11 +108,11 @@ function uojTextEncode($str, $config = array()) {
} }
} }
function base64url_encode($data) { function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
} }
function base64url_decode($data) { function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
} }
function blog_name_encode($name) { function blog_name_encode($name) {

View File

@ -131,7 +131,7 @@ class HTML {
$r = array(); $r = array();
foreach ((array)$q as $k => $v) { foreach ((array)$q as $k => $v) {
if ($array_name !== null) { if ($array_name !== null) {
if(is_numeric($k)) { if (is_numeric($k)) {
$k = $array_name."[]"; $k = $array_name."[]";
} else { } else {
$k = $array_name."[$k]"; $k = $array_name."[$k]";

View File

@ -25,7 +25,7 @@ class Paginator {
$this->cur_page = validateUInt($_GET['page']) ? (int)$_GET['page'] : 1; $this->cur_page = validateUInt($_GET['page']) ? (int)$_GET['page'] : 1;
if ($this->cur_page < 1) { if ($this->cur_page < 1) {
$this->cur_page = 1; $this->cur_page = 1;
} else if ($this->cur_page > $this->n_pages) { } elseif ($this->cur_page > $this->n_pages) {
$this->cur_page = $this->n_pages; $this->cur_page = $this->n_pages;
} }
$this->cur_start = ($this->cur_page - 1) * $this->page_len; $this->cur_start = ($this->cur_page - 1) * $this->page_len;
@ -47,8 +47,9 @@ class Paginator {
parse_str($query_string, $param); parse_str($query_string, $param);
$param['page'] = $page; $param['page'] = $page;
if ($page == 1) if ($page == 1) {
unset($param['page']); unset($param['page']);
}
if ($param) { if ($param) {
return $path . '?' . http_build_query($param); return $path . '?' . http_build_query($param);

View File

@ -113,7 +113,7 @@ class UOJBlogEditor {
} else { } else {
$this->post_data['content'] = $purifier->purify($this->post_data['content']); $this->post_data['content'] = $purifier->purify($this->post_data['content']);
} }
} else if ($this->type == 'slide') { } elseif ($this->type == 'slide') {
$content_array = yaml_parse($this->post_data['content_md']); $content_array = yaml_parse($this->post_data['content_md']);
if ($content_array === false || !is_array($content_array)) { if ($content_array === false || !is_array($content_array)) {
die(json_encode(array('content_md' => '不合法的 YAML 格式'))); die(json_encode(array('content_md' => '不合法的 YAML 格式')));
@ -150,7 +150,7 @@ EOD
die(json_encode(array('content_md' => '未知错误'))); die(json_encode(array('content_md' => '未知错误')));
} }
$marked = function($md) use($v8, $purifier) { $marked = function($md) use ($v8, $purifier) {
try { try {
$v8->md = $md; $v8->md = $md;
return $purifier->purify($v8->executeString('marked(PHP.md)')); return $purifier->purify($v8->executeString('marked(PHP.md)'));
@ -206,7 +206,7 @@ EOD
echo $this->post_data['content']; echo $this->post_data['content'];
echo '</article>'; echo '</article>';
echoUOJPageFooter(array('ShowPageFooter' => false)); echoUOJPageFooter(array('ShowPageFooter' => false));
} else if ($this->type == 'slide') { } elseif ($this->type == 'slide') {
uojIncludeView('slide', array_merge( uojIncludeView('slide', array_merge(
UOJContext::pageConfig(), UOJContext::pageConfig(),
array( array(

View File

@ -8,7 +8,7 @@ class UOJContext {
return array( return array(
'PageNav' => 'main-nav' 'PageNav' => 'main-nav'
); );
} else if (self::$data['type'] == 'blog') { } elseif (self::$data['type'] == 'blog') {
return array( return array(
'PageNav' => 'blog-nav', 'PageNav' => 'blog-nav',
'PageMainTitle' => UOJContext::$data['user']['username'] . '的博客', 'PageMainTitle' => UOJContext::$data['user']['username'] . '的博客',
@ -55,7 +55,7 @@ class UOJContext {
public static function httpHost() { public static function httpHost() {
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
return $_SERVER['HTTP_X_FORWARDED_HOST']; return $_SERVER['HTTP_X_FORWARDED_HOST'];
} else if (isset($_SERVER['HTTP_HOST'])) { } elseif (isset($_SERVER['HTTP_HOST'])) {
return $_SERVER['HTTP_HOST']; return $_SERVER['HTTP_HOST'];
} else { } else {
return $_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT'] == '80' ? '' : ':'.$_SERVER['SERVER_PORT']); return $_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT'] == '80' ? '' : ':'.$_SERVER['SERVER_PORT']);