S2OJ/web/app/controllers/assignment.php
2022-09-20 08:28:38 +08:00

98 lines
2.8 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()) {
become403Page(UOJLocale::get('need login'));
}
if (!isNormalUser($myUser)) {
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"><i class="fa fa-times"></i></td>';
} else {
echo '<td class="success"><i class="fa fa-check"></i></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() ?>