<?php requireLib('bootstrap5'); requireLib('mathjax'); requirePHPLib('form'); requirePHPLib('judger'); requirePHPLib('data'); Auth::check() || redirectToLogin(); UOJList::init(UOJRequest::get('id')) || UOJResponse::page404(); UOJList::cur()->userCanView(Auth::user(), ['ensure' => true]); function getProblemTR($info) { $problem = new UOJProblem($info); $html = HTML::tag_begin('tr', ['class' => 'text-center']); $html .= HTML::tag('td', ['class' => $info['submission_id'] ? 'table-success' : ''], "#{$info['id']}"); $html .= HTML::tag_begin('td', ['class' => 'text-start']); $html .= $problem->getLink(['with' => 'none']); if ($problem->isUserOwnProblem(Auth::user())) { $html .= ' <span class="badge text-white bg-info">' . UOJLocale::get('problems::my problem') . '</span> '; } if ($info['type'] == 'remote') { $html .= ' ' . HTML::tag('span', ['class' => 'badge text-bg-success'], '远端评测题'); } if ($info['is_hidden']) { $html .= ' <span class="badge text-bg-danger"><i class="bi bi-eye-slash-fill"></i> ' . UOJLocale::get('hidden') . '</span> '; } if (isset($_COOKIE['show_tags_mode'])) { foreach ($problem->queryTags() as $tag) { $html .= ' <a class="uoj-problem-tag">' . '<span class="badge text-bg-secondary">' . HTML::escape($tag) . '</span>' . '</a> '; } } $html .= HTML::tag_end('td'); if (isset($_COOKIE['show_submit_mode'])) { $perc = $info['submit_num'] > 0 ? round(100 * $info['ac_num'] / $info['submit_num']) : 0; $html .= HTML::tag( 'td', [], HTML::tag( 'div', [ 'class' => 'progress', 'data-bs-toggle' => 'tooltip', 'data-bs-title' => "{$info['ac_num']} / {$info['submit_num']}", 'data-bs-placement' => 'bottom', ], HTML::tag('div', [ 'class' => 'progress-bar bg-success', 'role' => 'progressbar', 'aria-valuenow' => $perc, 'aria-valuemin' => 0, 'aria-valuemax' => 100, 'style' => "width: {$perc}%; min-width: 20px;", ], "{$perc}%") ) ); } $html .= HTML::tag('td', [], $problem->getDifficultyHTML()); $html .= HTML::tag('td', [], ClickZans::getCntBlock($problem->info['zan'])); $html .= HTML::tag_end('tr'); return $html; } $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:125px;">' . UOJLocale::get('problems::ac ratio') . '</th>'; } $header .= '<th class="text-center" style="width:4em;">' . UOJLocale::get('problems::difficulty') . '</th>'; $header .= '<th class="text-center" style="width:50px;">' . UOJLocale::get('appraisal') . '</th>'; $header .= '</tr>'; $pag_config = [ 'page_len' => 20, 'col_names' => [ 'best_ac_submissions.submission_id as submission_id', 'problems.*', ], 'table_name' => [ "problems", "left join best_ac_submissions", "on", [ "best_ac_submissions.submitter" => Auth::id(), "problems.id" => DB::raw("best_ac_submissions.problem_id") ], "inner join lists_problems", "on", [ "lists_problems.list_id" => UOJList::info('id'), "lists_problems.problem_id" => DB::raw("problems.id"), ], ], 'cond' => '1', 'tail' => "order by id asc", 'page_len' => 40, 'post_filter' => function ($problem) { return (new UOJProblem($problem))->userCanView(Auth::user()); } ]; $pag = new Paginator($pag_config); ?> <?php echoUOJPageHeader(UOJLocale::get('problems lists')); ?> <div class="row"> <!-- left col --> <div class="col-lg-9"> <!-- title container --> <div class="d-flex justify-content-between"> <h1> <?= UOJList::info('title') ?> <span class="fs-5">(ID: #<?= UOJList::info('id') ?>)</span> <?php if (UOJList::info('is_hidden')) : ?> <span class="badge text-bg-danger fs-6"> <i class="bi bi-eye-slash-fill"></i> <?= UOJLocale::get('hidden') ?> </span> <?php endif ?> </h1> <?php if (UOJList::cur()->userCanManage(Auth::user())) : ?> <div class="text-end"> <a class="btn btn-primary" href="/list/<?= UOJList::info('id') ?>/manage" role="button"> <?= UOJLocale::get('problems::manage') ?> </a> </div> <?php endif ?> </div> <!-- end title container --> <!-- description --> <div class="card my-2"> <div class="card-body"> <h2 class="h4 mb-3">题单简介</h2> <div class="markdown-body"> <?= UOJList::cur()->queryContent()['content'] ?> </div> </div> </div> <div class="row"> <div class="col-sm-4 col-12"></div> <div class="text-end p-2 col-12 col-sm-8"> <div class="form-check d-inline-block me-2"> <input type="checkbox" id="input-show_tags_mode" class="form-check-input" <?= isset($_COOKIE['show_tags_mode']) ? 'checked="checked" ' : '' ?> /> <label class="form-check-label" for="input-show_tags_mode"> <?= UOJLocale::get('problems::show tags') ?> </label> </div> <div class="form-check d-inline-block"> <input type="checkbox" id="input-show_submit_mode" class="form-check-input" <?= isset($_COOKIE['show_submit_mode']) ? 'checked="checked" ' : '' ?> /> <label class="form-check-label" for="input-show_submit_mode"> <?= UOJLocale::get('problems::show statistics') ?> </label> </div> </div> </div> <script type="text/javascript"> $('#input-show_tags_mode').click(function() { if (this.checked) { $.cookie('show_tags_mode', '', { path: '/list', expires: 365, }); } else { $.removeCookie('show_tags_mode', { path: '/list', }); } location.reload(); }); $('#input-show_submit_mode').click(function() { if (this.checked) { $.cookie('show_submit_mode', '', { path: '/list', expires: 365, }); } else { $.removeCookie('show_submit_mode', { path: '/list', }); } location.reload(); }); </script> <?= $pag->pagination() ?> <div class="card my-3 table-responsive"> <?= HTML::responsive_table($header, $pag->get(), [ 'table_attr' => [ 'class' => ['table', 'uoj-table', 'mb-0'], ], 'tr' => function ($row, $idx) { return getProblemTR($row); } ]); ?> </div> <?= $pag->pagination() ?> </div> <!-- end left col --> <aside class="col-lg-3 mt-3 mt-lg-0"> <?php uojIncludeView('sidebar') ?> </aside> </div> <?php echoUOJPageFooter() ?>