refactor(contest): uoj_form_v2

This commit is contained in:
Baoshuo Ren 2023-01-15 21:35:24 +08:00
parent e2c3a3eb4e
commit 9d66356566
Signed by: baoshuo
GPG Key ID: 00CB9680AB29F51A
2 changed files with 35 additions and 42 deletions

View File

@ -80,12 +80,10 @@ if (UOJContest::cur()->userCanStartFinalTest(Auth::user())) {
if ($cur_tab == 'dashboard') {
if ($contest['cur_progress'] <= CONTEST_IN_PROGRESS) {
$post_question = new UOJBs4Form('post_question');
$post_question->addVTextArea(
'qcontent',
'问题',
'',
function ($content, &$vdata) {
$post_question = new UOJForm('post_question');
$post_question->addTextArea('qcontent', [
'label' => '问题',
'validator_php' => function ($content, &$vdata) {
if (!Auth::check()) {
return '您尚未登录';
}
@ -100,12 +98,11 @@ if ($cur_tab == 'dashboard') {
return '';
},
null
);
]);
$post_question->handle = function (&$vdata) use ($contest) {
DB::insert([
"insert into contests_asks",
"(contest_id, question, answer, username, post_time, is_hidden)",
DB::bracketed_fields(["contest_id", "question", "answer", "username", "post_time", "is_hidden"]),
"values", DB::tuple([$contest['id'], $vdata['content'], '', Auth::id(), DB::now(), 1])
]);
};
@ -115,13 +112,11 @@ if ($cur_tab == 'dashboard') {
}
} elseif ($cur_tab == 'backstage') {
if ($is_manager) {
$post_notice = new UOJBs4Form('post_notice');
$post_notice->addInput(
'title',
'text',
'标题',
'',
function ($title, &$vdata) {
$post_notice = new UOJForm('post_notice');
$post_notice->addInput('title', [
'div_class' => 'mb-3',
'label' => '标题',
'validator_php' => function ($title, &$vdata) {
if (!$title) {
return '标题不能为空';
}
@ -130,13 +125,10 @@ if ($cur_tab == 'dashboard') {
return '';
},
null
);
$post_notice->addTextArea(
'content',
'正文',
'',
function ($content, &$vdata) {
]);
$post_notice->addTextArea('content', [
'label' => '正文',
'validator_php' => function ($content, &$vdata) {
if (!$content) {
return '公告不能为空';
}
@ -145,8 +137,7 @@ if ($cur_tab == 'dashboard') {
return '';
},
null
);
]);
$post_notice->handle = function (&$vdata) use ($contest) {
DB::insert([
"insert into contests_notice",
@ -160,7 +151,7 @@ if ($cur_tab == 'dashboard') {
}
if ($is_manager) {
$reply_question = new UOJBs4Form('reply_question');
$reply_question = new UOJForm('reply_question');
$reply_question->addHidden(
'rid',
'0',
@ -183,18 +174,21 @@ if ($cur_tab == 'dashboard') {
},
null
);
$reply_question->addVSelect('rtype', [
$reply_question->addSelect('rtype', [
'div_class' => 'mb-3',
'label' => '回复类型',
'default' => 'private',
'options' => [
'public' => '公开(如果该问题反复被不同人提出,或指出了题目中的错误,请选择该项)',
'private' => '非公开',
'statement' => '请仔细阅读题面(非公开)',
'no_comment' => '无可奉告(非公开)',
'no_play' => '请认真比赛(非公开)',
], '回复类型', 'private');
$reply_question->addVTextArea(
'rcontent',
'回复',
'',
function ($content, &$vdata) {
],
]);
$reply_question->addTextArea('rcontent', [
'label' => '回复',
'validator_php' => function ($content, &$vdata) {
if (!Auth::check()) {
return '您尚未登录';
}
@ -209,9 +203,8 @@ if ($cur_tab == 'dashboard') {
$vdata['content'] = HTML::escape($content);
return '';
},
null
);
$reply_question->handle = function (&$vdata) use ($contest) {
]);
$reply_question->handle = function (&$vdata) {
$content = $vdata['content'];
$is_hidden = 1;
switch ($_POST['rtype']) {

View File

@ -167,7 +167,7 @@ class UOJForm {
$this->add($name, $html, $config['validator_php'], $config['validator_js']);
}
public function addTextarea($name, $config) {
public function addTextArea($name, $config) {
$config += [
'type' => 'text',
'div_class' => '',