mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-30 01:36:21 +00:00
b77834a182
This commit changes the search box up the paginator, and fixes a security problem. ATTENTION! The version which has search box MUST update to the newest version IMMEDIATELY, the old version did not process the escape of the string, may cause SQL injection problems.
205 lines
6.9 KiB
PHP
205 lines
6.9 KiB
PHP
<?php
|
|
requirePHPLib('form');
|
|
requirePHPLib('judger');
|
|
requirePHPLib('svn');
|
|
|
|
if (isSuperUser($myUser)) {
|
|
$new_problem_form = new UOJForm('new_problem');
|
|
$new_problem_form->handle = function() {
|
|
mysql_query("insert into problems (title, is_hidden, submission_requirement) values ('New Problem', 1, '{}')");
|
|
$id = mysql_insert_id();
|
|
mysql_query("insert into problems_contents (id, statement, statement_md) values ($id, '', '')");
|
|
svnNewProblem($id);
|
|
};
|
|
$new_problem_form->submit_button_config['align'] = 'right';
|
|
$new_problem_form->submit_button_config['class_str'] = 'btn btn-primary';
|
|
$new_problem_form->submit_button_config['text'] = UOJLocale::get('problems::add new');
|
|
$new_problem_form->submit_button_config['smart_confirm'] = '';
|
|
|
|
$new_problem_form->runAtServer();
|
|
}
|
|
|
|
function echoProblem($problem) {
|
|
global $myUser;
|
|
if (isProblemVisibleToUser($problem, $myUser)) {
|
|
echo '<tr class="text-center">';
|
|
if ($problem['submission_id']) {
|
|
echo '<td class="success">';
|
|
} else {
|
|
echo '<td>';
|
|
}
|
|
echo '#', $problem['id'], '</td>';
|
|
echo '<td class="text-left">', '<a href="/problem/', $problem['id'], '">', $problem['title'], '</a>';
|
|
if (isset($_COOKIE['show_tags_mode'])) {
|
|
foreach (queryProblemTags($problem['id']) as $tag) {
|
|
echo '<a class="uoj-problem-tag">', '<span class="badge">', HTML::escape($tag), '</span>', '</a>';
|
|
}
|
|
}
|
|
echo '</td>';
|
|
if (isset($_COOKIE['show_submit_mode'])) {
|
|
$perc = $problem['submit_num'] > 0 ? round(100 * $problem['ac_num'] / $problem['submit_num']) : 0;
|
|
echo <<<EOD
|
|
<td><a href="/submissions?problem_id={$problem['id']}&min_score=100&max_score=100">×{$problem['ac_num']}</a></td>
|
|
<td><a href="/submissions?problem_id={$problem['id']}">×{$problem['submit_num']}</a></td>
|
|
<td>
|
|
<div class="progress bot-buffer-no">
|
|
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="$perc" aria-valuemin="0" aria-valuemax="100" style="width: $perc%; min-width: 20px;">{$perc}%</div>
|
|
</div>
|
|
</td>
|
|
EOD;
|
|
}
|
|
echo '<td class="text-left">', getClickZanBlock('P', $problem['id'], $problem['zan']), '</td>';
|
|
echo '</tr>';
|
|
}
|
|
}
|
|
|
|
$cond = array();
|
|
|
|
$search_tag = null;
|
|
|
|
$cur_tab = isset($_GET['tab']) ? $_GET['tab'] : 'all';
|
|
if ($cur_tab == 'template') {
|
|
$search_tag = "模板题";
|
|
}
|
|
if (isset($_GET['tag'])) {
|
|
$search_tag = $_GET['tag'];
|
|
}
|
|
if ($search_tag) {
|
|
$cond[] = "'".DB::escape($search_tag)."' in (select tag from problems_tags where problems_tags.problem_id = problems.id)";
|
|
}
|
|
if (isset($_GET["search"])) {
|
|
$cond[]="title like '%".DB::escape($_GET["search"])."%' or id like '%".DB::escape($_GET["search"])."%'";
|
|
}
|
|
|
|
if ($cond) {
|
|
$cond = join($cond, ' and ');
|
|
} else {
|
|
$cond = '1';
|
|
}
|
|
|
|
$header = '<tr>';
|
|
$header .= '<th class="text-center" style="width:5em;">ID</th>';
|
|
$header .= '<th>'.UOJLocale::get('problems::problem').'</th>';
|
|
if (isset($_COOKIE['show_submit_mode'])) {
|
|
$header .= '<th class="text-center" style="width:5em;">'.UOJLocale::get('problems::ac').'</th>';
|
|
$header .= '<th class="text-center" style="width:5em;">'.UOJLocale::get('problems::submit').'</th>';
|
|
$header .= '<th class="text-center" style="width:150px;">'.UOJLocale::get('problems::ac ratio').'</th>';
|
|
}
|
|
$header .= '<th class="text-center" style="width:180px;">'.UOJLocale::get('appraisal').'</th>';
|
|
$header .= '</tr>';
|
|
|
|
$tabs_info = array(
|
|
'all' => array(
|
|
'name' => UOJLocale::get('problems::all problems'),
|
|
'url' => "/problems"
|
|
),
|
|
'template' => array(
|
|
'name' => UOJLocale::get('problems::template problems'),
|
|
'url' => "/problems/template"
|
|
)
|
|
);
|
|
|
|
/*
|
|
<?php
|
|
echoLongTable(array('*'),
|
|
"problems left join best_ac_submissions on best_ac_submissions.submitter = '{$myUser['username']}' and problems.id = best_ac_submissions.problem_id", $cond, 'order by id asc',
|
|
$header,
|
|
'echoProblem',
|
|
array('page_len' => 3,
|
|
'table_classes' => array('table', 'table-bordered', 'table-hover', 'table-striped'),
|
|
'print_after_table' => function() {
|
|
global $myUser;
|
|
if (isSuperUser($myUser)) {
|
|
global $new_problem_form;
|
|
$new_problem_form->printHTML();
|
|
}
|
|
},
|
|
'head_pagination' => true
|
|
)
|
|
);
|
|
?>*/
|
|
|
|
$pag_config = array('page_len' => 100);
|
|
$pag_config['col_names'] = array('*');
|
|
$pag_config['table_name'] = "problems left join best_ac_submissions on best_ac_submissions.submitter = '{$myUser['username']}' and problems.id = best_ac_submissions.problem_id";
|
|
$pag_config['cond'] = $cond;
|
|
$pag_config['tail'] = "order by id asc";
|
|
$pag = new Paginator($pag_config);
|
|
|
|
$div_classes = array('table-responsive');
|
|
$table_classes = array('table', 'table-bordered', 'table-hover', 'table-striped');
|
|
?>
|
|
<?php echoUOJPageHeader(UOJLocale::get('problems')) ?>
|
|
<div class="row">
|
|
<div class="col-sm-4">
|
|
<?= HTML::tablist($tabs_info, $cur_tab, 'nav-pills') ?>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<form id="form-search" class="input-group form-group" method="get">
|
|
<input type="text" class="form-control" name="search" placeholder="<?= UOJLocale::get('search')?>" />
|
|
<span class="input-group-btn">
|
|
<button type="submit" class="btn btn-search btn-primary" id="submit-search"><span class="glyphicon glyphicon-search"></span></button>
|
|
</span>
|
|
</form>
|
|
</div>
|
|
<div class="col-sm-4 checkbox text-right">
|
|
<label class="checkbox-inline" for="input-show_tags_mode">
|
|
<input type="checkbox" id="input-show_tags_mode" <?= isset($_COOKIE['show_tags_mode']) ? 'checked="checked" ': ''?>/> <?= UOJLocale::get('problems::show tags') ?>
|
|
</label>
|
|
<label class="checkbox-inline" for="input-show_submit_mode">
|
|
<input type="checkbox" id="input-show_submit_mode" <?= isset($_COOKIE['show_submit_mode']) ? 'checked="checked" ': ''?>/> <?= UOJLocale::get('problems::show statistics') ?>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-xs-10 col-xs-push-1 col-sm-6 col-sm-push-3 input-group">
|
|
<?php echo $pag->pagination(); ?>
|
|
</div>
|
|
</div>
|
|
<div class="top-buffer-sm"></div>
|
|
<script type="text/javascript">
|
|
$('#input-show_tags_mode').click(function() {
|
|
if (this.checked) {
|
|
$.cookie('show_tags_mode', '', {path: '/problems'});
|
|
} else {
|
|
$.removeCookie('show_tags_mode', {path: '/problems'});
|
|
}
|
|
location.reload();
|
|
});
|
|
$('#input-show_submit_mode').click(function() {
|
|
if (this.checked) {
|
|
$.cookie('show_submit_mode', '', {path: '/problems'});
|
|
} else {
|
|
$.removeCookie('show_submit_mode', {path: '/problems'});
|
|
}
|
|
location.reload();
|
|
});
|
|
</script>
|
|
<?php
|
|
echo '<div class="', join($div_classes, ' '), '">';
|
|
echo '<table class="', join($table_classes, ' '), '">';
|
|
echo '<thead>';
|
|
echo $header;
|
|
echo '</thead>';
|
|
echo '<tbody>';
|
|
|
|
foreach ($pag->get() as $idx => $row) {
|
|
echoProblem($row);
|
|
echo "\n";
|
|
}
|
|
if ($pag->isEmpty()) {
|
|
echo '<tr><td class="text-center" colspan="233">'.UOJLocale::get('none').'</td></tr>';
|
|
}
|
|
|
|
echo '</tbody>';
|
|
echo '</table>';
|
|
echo '</div>';
|
|
|
|
if (isSuperUser($myUser)) {
|
|
$new_problem_form->printHTML();
|
|
}
|
|
|
|
echo $pag->pagination();
|
|
?>
|
|
<?php echoUOJPageFooter() ?>
|