S2OJ/web/app/controllers/assignment.php
Baoshuo 63b7768f78
All checks were successful
continuous-integration/drone/push Build is passing
feat: force-login and open-register config
2022-10-07 17:29:26 +08:00

98 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

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

<?php
if (!Auth::check() && UOJConfig::$data['switch']['force-login']) {
redirectToLogin();
}
if (!isNormalUser($myUser) && UOJConfig::$data['switch']['force-login']) {
become403Page();
}
requirePHPLib('form');
$assignment_id = $_GET['id'];
$assignment = queryAssignment($assignment_id);
if (!$assignment) {
become404Page();
}
$group = queryGroup($assignment['group_id']);
$list = queryProblemList($assignment['list_id']);
?>
<?php echoUOJPageHeader(UOJLocale::get('assignments')) ?>
<h2 style="margin-top: 24px">作业详细信息</h2>
<div class="row">
<div class="col-sm-12 mt-4">
<h5>作业信息</h5>
<ul>
<li><b>小组</b><a href="/group/<?= $group['id'] ?>"><?= $group['title'] ?></a></li>
<li><b>题单</b><a href="/problem_list/<?= $list['id'] ?>"><?= $list['title'] ?></a></li>
<li><b>创建时间</b><?= $assignment['create_time'] ?></li>
<li><b>截止时间</b><?= $assignment['deadline'] ?></li>
</ul>
</div>
</div>
<div class="row">
<div class="col-sm-12 mt-4">
<h5>完成状况</h5>
<?php
$query = DB::query("select problem_id from lists_problems where list_id = {$list['id']}");
$problem_ids = [];
while ($row = DB::fetch($query)) {
$problem_ids[] = $row['problem_id'];
}
$query = DB::query("select a.username as username, c.problem_id as problem_id from user_info a inner join groups_users b on a.username = b.username and b.group_id = {$group['id']} inner join best_ac_submissions c on a.username = c.submitter inner join lists_problems d on c.problem_id = d.problem_id and d.list_id = {$list['id']}");
$finished = [];
while ($row = DB::fetch($query)) {
$username = $row['username'];
$problem_id = $row['problem_id'];
if (!isset($finished[$username])) {
$finished[$username] = [];
}
$finished[$username][$problem_id] = 1;
}
$header_row = '';
$header_row .= '<tr>';
$header_row .= '<th style="width: 14em;">'.UOJLocale::get('username').'</th>';
foreach ($problem_ids as $problem_id) {
$header_row .= '<th style="width: 2em;">' . "<a href=\"/problem/{$problem_id}\">#{$problem_id}</a>" . '</th>';
}
$header_row .= '</tr>';
$print_row = function($row) use ($problem_ids, $finished) {
$username = $row['username'];
echo '<tr>';
echo '<td>' . getUserLink($username) . '</td>';
foreach ($problem_ids as $problem_id) {
if (!isset($finished[$username]) || !isset($finished[$username][$problem_id])) {
echo '<td class="failed"><span class="glyphicon glyphicon-remove"></span></td>';
} else {
echo '<td class="success"><span class="glyphicon glyphicon-ok"></span></td>';
}
}
echo '</tr>';
};
$from = "user_info a inner join groups_users b on (b.group_id = {$group['id']} and a.username = b.username)";
$col_names = array('a.username as username');
$cond = "1";
$tail = "order by a.username asc";
$config = array('page_len' => 100);
echoLongTable($col_names, $from, $cond, $tail, $header_row, $print_row, $config);
?>
</div>
</div>
<?php echoUOJPageFooter() ?>