S2OJ/web/app/controllers/assignment.php

98 lines
2.9 KiB
PHP
Raw Normal View History

2022-09-20 00:28:38 +00:00
<?php
if (!Auth::check() && UOJConfig::$data['switch']['force-login']) {
redirectToLogin();
2022-09-20 00:28:38 +00:00
}
if (!isNormalUser($myUser) && UOJConfig::$data['switch']['force-login']) {
2022-09-20 00:28:38 +00:00
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>';
2022-09-20 00:28:38 +00:00
} else {
echo '<td class="success"><span class="glyphicon glyphicon-ok"></span></td>';
2022-09-20 00:28:38 +00:00
}
}
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() ?>