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