<?php requirePHPLib('form'); requirePHPLib('judger'); requirePHPLib('data'); Auth::check() || redirectToLogin(); UOJUser::checkPermission(Auth::user(), 'lists.view') || UOJResponse::page403(); if (UOJList::userCanCreateList(Auth::user())) { $new_list_form = new UOJForm('new_list'); $new_list_form->handle = function () { DB::insert([ "insert into lists", DB::bracketed_fields(['title', 'is_hidden']), "values", DB::tuple(['未命名题单', 1]), ]); $list_id = DB::insert_id(); DB::insert([ "insert into lists_contents", DB::bracketed_fields(['id', 'content', 'content_md']), "values", DB::tuple([$list_id, '', '']), ]); redirectTo("/list/{$list_id}"); die(); }; $new_list_form->config['submit_container']['class'] = 'text-end'; $new_list_form->config['submit_button']['class'] = 'btn btn-primary'; $new_list_form->config['submit_button']['text'] = UOJLocale::get('problems::add new list'); $new_list_form->config['confirm']['smart'] = true; $new_list_form->runAtServer(); } function getListTR($info) { $list = new UOJList($info); $problems = $list->getProblemIDs(); if (Auth::check() && !empty($problems)) { $accepted = DB::selectCount([ "select count(*)", "from best_ac_submissions", "where", [ "submitter" => Auth::id(), ["problem_id", "in", DB::rawtuple($problems)], ], ]); } else { $accepted = -1; } $html = HTML::tag_begin('tr', ['class' => 'text-center']); $html .= HTML::tag('td', ['class' => $accepted == count($problems) ? 'table-success' : ''], "#{$list->info['id']}"); $html .= HTML::tag_begin('td', ['class' => 'text-start']); $html .= $list->getLink(); if ($list->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 ($list->queryTags() as $tag) { $html .= ' <a class="uoj-list-tag"><span class="badge text-bg-secondary">' . HTML::escape($tag) . '</span></a> '; } } $html .= HTML::tag('td', [], max(0, $accepted)); $html .= HTML::tag('td', [], count($problems)); $html .= HTML::tag_end('td'); return $html; } $cond = []; $search_tag = UOJRequest::get('tag', 'is_string', null); if (is_string($search_tag)) { $cond[] = [ DB::rawvalue($search_tag), "in", DB::rawbracket([ "select tag from lists_tags", "where", ["lists_tags.list_id" => DB::raw("lists.id")] ]) ]; } if (empty($cond)) { $cond = '1'; } $header = HTML::tag('tr', [], [ HTML::tag('th', ['class' => 'text-center', 'style' => 'width:5em'], 'ID'), HTML::tag('th', [], UOJLocale::get('problems::problem list')), HTML::tag('th', ['class' => 'text-center', 'style' => 'width:5em'], UOJLocale::get('problems::ac')), HTML::tag('th', ['class' => 'text-center', 'style' => 'width:5em'], UOJLocale::get('problems::total')), ]); $pag = new Paginator([ 'col_names' => ['*'], 'table_name' => 'lists', 'cond' => $cond, 'tail' => "order by id desc", 'page_len' => 40, 'post_filter' => function ($info) { return (new UOJList($info))->userCanView(Auth::user()); } ]); ?> <?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> <?= UOJLocale::get('problems lists') ?> </h1> <?php if (isset($new_list_form)) : ?> <div class="text-end"> <?php $new_list_form->printHTML(); ?> </div> <?php endif ?> </div> <!-- end title container --> <div class="text-end"> <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> <script type="text/javascript"> $('#input-show_tags_mode').click(function() { if (this.checked) { $.cookie('show_tags_mode', '', { path: '/lists', expires: 365, }); } else { $.removeCookie('show_tags_mode', { path: '/lists', }); } location.reload(); }); </script> <?= $pag->pagination() ?> <div class="card my-3"> <?= HTML::responsive_table($header, $pag->get(), [ 'table_attr' => [ 'class' => ['table', 'uoj-table', 'mb-0'], ], 'tr' => function ($row, $idx) { return getListTR($row); } ]); ?> </div> <?= $pag->pagination() ?> </div> <!-- end left col --> <!-- right col --> <aside class="col-lg-3 mt-3 mt-lg-0"> <?php uojIncludeView('sidebar') ?> </aside> <!-- end right col --> </div> <?php echoUOJPageFooter() ?>