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

org_paper_link dostává i účastníka

org_submit_paper() už nekontroluje celé jméno souboru, jen to,
že končí na ".pdf".
parent 37ec6ae2
No related branches found
No related tags found
1 merge request!25Odkazy na papíry
......@@ -609,6 +609,7 @@ class SetFinalForm(FlaskForm):
@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/submit/<int:user_id>/<int:task_id>/', methods=('GET', 'POST'))
def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Optional[int] = None):
sc = get_solution_context(contest_id, user_id, task_id, site_id)
assert sc.user is not None
sess = db.get_session()
self_url = url_for('org_submit_list', contest_id=contest_id, user_id=user_id, task_id=task_id, site_id=site_id)
......@@ -741,7 +742,7 @@ def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Option
fb_papers=fb_papers,
points_history=points_history,
for_site=(site_id is not None),
paper_link=lambda p: mo.web.util.org_paper_link(sc.contest, sc.site, p),
paper_link=lambda p: mo.web.util.org_paper_link(sc.contest, sc.site, sc.user, p),
form=form,
set_final_form=set_final_form,
)
......@@ -756,7 +757,7 @@ def org_submit_paper(contest_id: int, paper_id: int, filename: str, site_id: Opt
if not paper:
raise werkzeug.exceptions.NotFound()
if filename != mo.web.util.task_paper_filename(paper):
if not filename.endswith('.pdf'):
raise werkzeug.exceptions.NotFound()
get_solution_context(contest_id, paper.for_user, paper.for_task, site_id)
......@@ -856,7 +857,7 @@ def org_contest_task(contest_id: int, task_id: int, site_id: Optional[int] = Non
return render_template(
"org_contest_task.html",
sc=sc, rows=rows, paper_counts=paper_counts,
paper_link=lambda p: mo.web.util.org_paper_link(sc.contest, sc.site, p),
paper_link=lambda u, p: mo.web.util.org_paper_link(sc.contest, sc.site, u, p),
can_upload=sc.allow_upload_feedback,
points_form=points_form, request_form=request.form,
)
......@@ -916,7 +917,7 @@ def org_contest_solutions(id: int, site_id: Optional[int] = None):
pions=pions, tasks=tasks, tasks_sols=task_sols, paper_counts=paper_counts,
can_upload=sc.allow_upload_feedback,
can_edit_points=sc.allow_edit_points,
paper_link=lambda p: mo.web.util.org_paper_link(sc.contest, sc.site, p),
paper_link=lambda u, p: mo.web.util.org_paper_link(sc.contest, sc.site, u, p),
)
......@@ -1102,6 +1103,6 @@ def org_contest_user(contest_id: int, user_id: int):
return render_template(
'org_contest_user.html',
sc=sc, pant=pant, task_sols=task_sols,
paper_link=lambda p: mo.web.util.org_paper_link(sc.contest, None, p),
paper_link=lambda u, p: mo.web.util.org_paper_link(sc.contest, None, u, p),
paper_counts=paper_counts,
)
......@@ -39,10 +39,12 @@ class OrderCell(Cell):
class SolPointsCell(Cell):
contest_id: int
user: db.User
sol: Optional[db.Solution]
def __init__(self, contest_id: int):
def __init__(self, contest_id: int, user: db.User):
self.contest_id = contest_id
self.user = user
self.sol = None
def __str__(self) -> str:
......@@ -64,10 +66,10 @@ class SolPointsCell(Cell):
points = str(self.sol.points)
if self.sol.final_feedback_obj:
url = mo.web.util.org_paper_link(self.contest_id, None, self.sol.final_feedback_obj)
url = mo.web.util.org_paper_link(self.contest_id, None, self.user, self.sol.final_feedback_obj)
return f'<td><a href="{url}" title="Zobrazit finální opravu">{points}</a>'
elif self.sol.final_submit_obj:
url = mo.web.util.org_paper_link(self.contest_id, None, self.sol.final_submit_obj)
url = mo.web.util.org_paper_link(self.contest_id, None, self.user, self.sol.final_submit_obj)
return f'<td><a href="{url}" title="Zobrazit finální řešení od účastníka">{points}</a>'
else:
return f'<td>{points}' # no paper no link
......@@ -180,7 +182,7 @@ def org_score(round_id: Optional[int] = None, contest_id: Optional[int] = None):
'birth_year': pant.birth_year,
})
for task in tasks:
row.keys[f'task_{task.task_id}'] = SolPointsCell(contest_id=pion.contest_id)
row.keys[f'task_{task.task_id}'] = SolPointsCell(contest_id=pion.contest_id, user=user)
rows_map[user.user_id] = row
for sol in sols:
rows_map[sol.user_id].keys[f'task_{sol.task_id}'].set_sol(sol)
......
......@@ -52,7 +52,7 @@ konkrétní úlohu. Symbol <b>+</b> značí, že existuje více verzí dostupný
{% set p = sol.final_submit_obj %}
{% set late = p.check_deadline(round) %}
<td class="sol {% if late %}sol-late{% endif %}">
<a href="{{ paper_link(p) }}" title="{{ p.uploaded_at|timeformat }} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% if late %} - {{ late }}{% endif %}">🖺</a>
<a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% if late %} - {{ late }}{% endif %}">🖺</a>
{% set key = (u.user_id, task.task_id, "solution") %}
{% if key in paper_counts and paper_counts[key] > 1 %}
<b title="Celkem {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}">+</b>
......@@ -63,7 +63,7 @@ konkrétní úlohu. Symbol <b>+</b> značí, že existuje více verzí dostupný
<td class="sol">
{% if sol.final_feedback_obj %}
{% set p = sol.final_feedback_obj %}
<a href="{{ paper_link(p) }}" title="{{ p.uploaded_at|timeformat }} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}">🖺</a>
<a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}">🖺</a>
{% set key = (u.user_id, task.task_id, "feedback") %}
{% if key in paper_counts and paper_counts[key] > 1 %}
<b title="Celkem {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}">+</b>
......
......@@ -35,7 +35,7 @@ finální (ve výchozím stavu poslední nahrané).{% endif %}
{% set p = sol.final_submit_obj %}
{% set late = p.check_deadline(round) %}
{% if late %}<span class='sol-late' title="{{ late }}"><b></b></span> {% endif %}
<a href='{{ paper_link(p) }}'>
<a href='{{ paper_link(u, p) }}'>
{{- p.uploaded_at|timeformat }} ({{ p.pages|inflected('strana', 'strany', 'stran') }})
</a>
{% if p.uploaded_by_obj != u %}
......@@ -48,7 +48,7 @@ finální (ve výchozím stavu poslední nahrané).{% endif %}
{% else %}–{% endif %}
<td>{% if sol.final_feedback_obj %}
{% set p = sol.final_feedback_obj %}
<a title="nahrál {{ p.uploaded_by_obj.full_name() }}" href='{{ paper_link(p) }}'>
<a title="nahrál {{ p.uploaded_by_obj.full_name() }}" href='{{ paper_link(u, p) }}'>
{{ (p.uploaded_at if p else None)|timeformat }} ({{ p.pages|inflected('strana', 'strany', 'stran') }})
</a>
{% set key = (obj.task_id if for_user else obj.user_id, "feedback") %}
......
......@@ -63,7 +63,11 @@ def task_paper_filename(paper: db.Paper) -> str:
assert False
def org_paper_link(contest_or_id: Union[db.Contest, int], site: Optional[db.Place], paper: db.Paper) -> str:
def org_paper_link(contest_or_id: Union[db.Contest, int],
site: Optional[db.Place],
user: db.User,
paper: db.Paper) -> str:
if isinstance(contest_or_id, db.Contest):
contest_or_id = contest_or_id.contest_id
return url_for('org_submit_paper',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment