From 10e196acebaaae8486df198ebcb148a0cad239a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Pracha=C5=99?= <jan.prachar@gmail.com> Date: Wed, 27 Apr 2022 10:42:47 +0200 Subject: [PATCH] =?UTF-8?q?Nezobrazovat=20"Odevzd=C3=A1no=20po=20dozorov?= =?UTF-8?q?=C3=A9m=20term=C3=ADnu",=20pokud=20=C5=99e=C5=A1en=C3=AD=20odev?= =?UTF-8?q?zdal=20garant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/db.py | 9 ++++++++- mo/web/templates/org_contest_solutions.html | 2 +- mo/web/templates/org_submit_list.html | 2 +- mo/web/templates/parts/org_solution_table.html | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/mo/db.py b/mo/db.py index a89d819a..97391edf 100644 --- a/mo/db.py +++ b/mo/db.py @@ -604,14 +604,21 @@ class Paper(Base): for_user_obj = relationship('User', primaryjoin='Paper.for_user == User.user_id') uploaded_by_obj = relationship('User', primaryjoin='Paper.uploaded_by == User.user_id') - def check_deadline(self, round: Round) -> Optional[str]: + def check_deadline(self, round: Round, contest: Contest) -> Optional[str]: # K round se dá dostat přes self.task.round, ale nejspíš to není nakešované. if self.uploaded_by == self.for_user: deadline = round.ct_submit_end suffix = ' účastnickém termínu' else: + gk = mo.rights.Gatekeeper(self.uploaded_by_obj) + rights = gk.rights_for_contest(contest) + + if rights.have_right(mo.rights.Right.upload_submits): + return None + deadline = round.pr_submit_end suffix = ' dozorovém termínu' + if deadline is not None and self.uploaded_at > deadline: return timedelta(self.uploaded_at, deadline, descriptive=True) + suffix else: diff --git a/mo/web/templates/org_contest_solutions.html b/mo/web/templates/org_contest_solutions.html index 1772b747..99f0b599 100644 --- a/mo/web/templates/org_contest_solutions.html +++ b/mo/web/templates/org_contest_solutions.html @@ -84,7 +84,7 @@ Odkazem v záhlaví se lze dostat na podrobný výpis odevzdání všech účast {% set sol = tasks_sols[task.task_id][u.user_id] %} {% if sol.final_submit_obj %} {% set p = sol.final_submit_obj %} - {% set late = p.check_deadline(round) %} + {% set late = p.check_deadline(round, contest) %} <td class="{% if late or p.broken %}danger{% else %}success{% endif %}"> <a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }}{% if p.is_broken() %} – nekorektní PDF{% endif %}{% if p.pages != None %} – {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}{% if late %} – {{ late }}{% endif %}" class="pdf-icon">📄</a> {% set key = (u.user_id, task.task_id, "solution") %} diff --git a/mo/web/templates/org_submit_list.html b/mo/web/templates/org_submit_list.html index 550a042f..0a01bc27 100644 --- a/mo/web/templates/org_submit_list.html +++ b/mo/web/templates/org_submit_list.html @@ -70,7 +70,7 @@ Existuje více než jedna verze řešení, finální je podbarvená. {% set active_sol_id = None %} {% endif %} {% for p in sol_papers %} - {% set late = p.check_deadline(ctx.round) %} + {% set late = p.check_deadline(ctx.round, ctx.contest) %} <tr{% if p.paper_id == active_sol_id %} class='warning'{% endif %}> <td{% if late %} class='danger'{% endif %}>{{ p.uploaded_at|timeformat }} <td>{% if p.is_broken() %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %} diff --git a/mo/web/templates/parts/org_solution_table.html b/mo/web/templates/parts/org_solution_table.html index d1e8c5a0..fc4e8867 100644 --- a/mo/web/templates/parts/org_solution_table.html +++ b/mo/web/templates/parts/org_solution_table.html @@ -57,7 +57,7 @@ finální (ve výchozím stavu poslední nahrané).{% elif rights.can_upload_sol {% if sol %} <td>{% if sol.final_submit_obj %} {% set p = sol.final_submit_obj %} - {% set late = p.check_deadline(round) %} + {% set late = p.check_deadline(round, contest) %} {% if late %}<span class='text-danger icon' title="{{ late }}">⚠</span>{% endif %} <a href='{{ paper_link(u, p) }}'> {{- p.uploaded_at|timeformat }} -- GitLab