Skip to content
Snippets Groups Projects
Commit 9830a038 authored by Martin Mareš's avatar Martin Mareš
Browse files

Opraveno: Účastnické rozhraní

parent 6a4983a6
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !113. Comments created here will be created in the context of that merge request.
...@@ -8,13 +8,11 @@ import bleach ...@@ -8,13 +8,11 @@ import bleach
from bleach.sanitizer import ALLOWED_TAGS from bleach.sanitizer import ALLOWED_TAGS
import markdown import markdown
import os import os
from sqlalchemy import func from sqlalchemy.orm import joinedload
from sqlalchemy.orm import joinedload, aliased
from sqlalchemy.sql.functions import coalesce
from typing import Optional, List, Dict, Tuple, Set from typing import Optional, List, Dict, Tuple, Set
import werkzeug.exceptions import werkzeug.exceptions
import wtforms import wtforms
from wtforms import validators, ValidationError from wtforms import validators
from wtforms.widgets.html5 import NumberInput from wtforms.widgets.html5 import NumberInput
import mo.config as config import mo.config as config
... ...
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
{% set state = contest.ct_state() %} {% set state = contest.ct_state() %}
{% block head %} {% block head %}
{% if contest.round.has_messages %} {% if round.has_messages %}
<script src="{{ asset_url('js/news-reloader.js') }}" type="text/javascript"></script> <script src="{{ asset_url('js/news-reloader.js') }}" type="text/javascript"></script>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
...@@ -69,29 +69,33 @@ Pokud si s tvorbou PDF nevíte rady, zkuste se podívat do <a href='https://docs ...@@ -69,29 +69,33 @@ Pokud si s tvorbou PDF nevíte rady, zkuste se podívat do <a href='https://docs
{% elif state == RoundState.grading %} {% elif state == RoundState.grading %}
<p>Odevzdávání bylo ukončeno. Vyčkejte prosím, až úlohy opravíme. <p>Odevzdávání bylo ukončeno. Vyčkejte prosím, až úlohy opravíme.
{% elif state == RoundState.closed %} {% elif state in [RoundState.graded, RoundState.closed] %}
<p>Soutěžní kolo bylo ukončeno, níže si můžete prohlédnout svá ohodnocená a okomentovaná řešení. <p>Soutěžní kolo bylo ukončeno, níže si můžete prohlédnout svá ohodnocená a okomentovaná řešení.
{% if contest.ct_state() == RoundState.closed and contest.scoretable_id %} {% if contest.scoretable_id %}
Také je již zveřejněna <strong><a href="{{ url_for('user_contest_score', id=contest.contest_id) }}">výsledková listina</a></strong>. Také je již zveřejněna <strong><a href="{{ url_for('user_contest_score', id=contest.contest_id) }}">výsledková listina</a></strong>.
{% endif %} {% endif %}
<p>Během několika dnů očekávejte uzavření kola{% if not contest.scoretable_id %}a zveřejnění oficiálních výsledkových listin{% endif %}.
{% if state == RoundState.graded %}
<p>Pokud máte k opravě úloh připomínky, ozvěte se prosím organizátorům tohoto kola.
{% endif %}
{% else %} {% else %}
<p>Soutěž se nachází v neznámém stavu. To by se nemělo stát :) <p>Soutěž se nachází v neznámém stavu. To by se nemělo stát :)
{% endif %} {% endif %}
{% if state != RoundState.preparing %} {% if state != RoundState.preparing %}
<h3>Úlohy</h3>
{% if contest.ct_task_statement_available() %} {% if contest.ct_task_statement_available() %}
<p>Můžete si stáhnout <a href='{{ url_for('user_task_statement', id=contest.contest_id) }}'>zadání úloh</a>. <p>Můžete si stáhnout <a href='{{ url_for('user_task_statement', id=contest.contest_id) }}'>zadání úloh</a>.
{% endif %} {% endif %}
<h3>Úlohy</h3>
<table class="table table-bordered table-hover"> <table class="table table-bordered table-hover">
<thead> <thead>
<tr> <tr>
<th>Úloha <th>Úloha
<th>Odevzdáno <th>Odevzdáno
{% if state == RoundState.closed %} {% if state in [RoundState.graded, RoundState.closed] %}
<th>Opraveno <th>Opraveno
<th>Body <th>Body
{% endif %} {% endif %}
...@@ -112,7 +116,7 @@ Také je již zveřejněna <strong><a href="{{ url_for('user_contest_score', id= ...@@ -112,7 +116,7 @@ Také je již zveřejněna <strong><a href="{{ url_for('user_contest_score', id=
{% else %} {% else %}
<td> <td>
{% endif %} {% endif %}
{% if state == RoundState.closed %} {% if state in [RoundState.graded, RoundState.closed] %}
<td> <td>
{% if sol.final_feedback_obj %} {% if sol.final_feedback_obj %}
<a href='{{ url_for('user_paper', contest_id=contest.contest_id, paper_id=sol.final_feedback_obj.paper_id) }}'> <a href='{{ url_for('user_paper', contest_id=contest.contest_id, paper_id=sol.final_feedback_obj.paper_id) }}'>
... ...
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<p>Žádné řešení k této úloze nebylo odevzdáno.</p> <p>Žádné řešení k této úloze nebylo odevzdáno.</p>
{% elif state == RoundState.grading %} {% elif state == RoundState.grading %}
<p>Odevzdávání bylo ukončeno. Vyčkejte prosím, až úlohu opravíme. <p>Odevzdávání bylo ukončeno. Vyčkejte prosím, až úlohu opravíme.
{% elif state == RoundState.closed %} {% elif state in [RoundState.graded, RoundState.closed] %}
<h3>Výsledky</h3> <h3>Výsledky</h3>
<p>Soutěžní kolo bylo ukončeno a úloha opravena a ohodnocena. <p>Soutěžní kolo bylo ukončeno a úloha opravena a ohodnocena.
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
<h3>Historie vašich řešení</h3> <h3>Historie vašich řešení</h3>
{% if papers %} {% if papers %}
{% if state == RoundState.closed and papers|length > 1 %} {% if state in [RoundState.graded, RoundState.closed] and papers|length > 1 %}
<p>Podbarvením je zvýrazněno řešení, podle kterého vám byly přiděleny body.</p> <p>Podbarvením je zvýrazněno řešení, podle kterého vám byly přiděleny body.</p>
{% endif %} {% endif %}
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
<th>Akce <th>Akce
<tbody> <tbody>
{% for p in papers %} {% for p in papers %}
<tr{% if state == RoundState.closed and papers|length > 1 and p.paper_id == sol.final_submit %} class="sol-active"{% endif %}> <tr{% if state in [RoundState.graded, RoundState.closed] and papers|length > 1 and p.paper_id == sol.final_submit %} class="sol-active"{% endif %}>
<td>{{ p.uploaded_at|timeformat }} <td>{{ p.uploaded_at|timeformat }}
<td>{% if p.is_broken() %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %} <td>{% if p.is_broken() %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %}
<td>{{ p.bytes|or_dash }} <td>{{ p.bytes|or_dash }}
... ...
......
...@@ -30,13 +30,13 @@ ...@@ -30,13 +30,13 @@
Odevzdat řešení Odevzdat řešení
{% elif state == RoundState.grading %} {% elif state == RoundState.grading %}
Odevzdaná řešení Odevzdaná řešení
{% elif state == RoundState.closed %} {% elif state in [RoundState.graded, RoundState.closed] %}
Prohlédnout opravy Prohlédnout opravy
{% else %} {% else %}
Detail kola Detail kola
{% endif %} {% endif %}
</a> </a>
{% if contest.ct_state() == RoundState.closed and contest.scoretable_id %} {% if contest.ct_state() in [RoundState.graded, RoundState.closed] and contest.scoretable_id %}
<a class='btn btn-xs btn-success' href="{{ url_for('user_contest_score', id=contest.contest_id) }}">Výsledková listina</a> <a class='btn btn-xs btn-success' href="{{ url_for('user_contest_score', id=contest.contest_id) }}">Výsledková listina</a>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
... ...
......
...@@ -479,9 +479,9 @@ def user_paper(contest_id: int, paper_id: int): ...@@ -479,9 +479,9 @@ def user_paper(contest_id: int, paper_id: int):
raise werkzeug.exceptions.Forbidden() raise werkzeug.exceptions.Forbidden()
if paper.type == db.PaperType.solution: if paper.type == db.PaperType.solution:
allowed_states = [db.RoundState.running, db.RoundState.grading, db.RoundState.closed] allowed_states = [db.RoundState.running, db.RoundState.grading, db.RoundState.graded, db.RoundState.closed]
elif paper.type == db.PaperType.feedback: elif paper.type == db.PaperType.feedback:
allowed_states = [db.RoundState.closed] allowed_states = [db.RoundState.graded, db.RoundState.closed]
else: else:
assert False assert False
...@@ -541,7 +541,7 @@ def user_contest_score(id: int): ...@@ -541,7 +541,7 @@ def user_contest_score(id: int):
# Výsledkovku zobrazíme jen pokud je soutěž již ukončená # Výsledkovku zobrazíme jen pokud je soutěž již ukončená
state = contest.ct_state() state = contest.ct_state()
if not contest.scoretable or state != db.RoundState.closed: if not contest.scoretable or state not in [db.RoundState.graded, db.RoundState.closed]:
raise werkzeug.exceptions.NotFound() raise werkzeug.exceptions.NotFound()
columns, table_rows = scoretable_construct(contest.scoretable, format != "") columns, table_rows = scoretable_construct(contest.scoretable, format != "")
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment