diff --git a/mo/db.py b/mo/db.py index a89d819a00ac27daa94c45fcf351d469c724efd7..97391edf7a0612837e9fe1f7b7c12c948c46c4e0 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 1772b747f66e422b95c846fee592465dfa061db0..99f0b5993dbdf9d65fcf035e2a258961c715d583 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 550a042f4449cbaa3332faef0382ccbe39b72181..0a01bc271c53327eca5f2c50fc109f83667d6afa 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 d1e8c5a0deea29bb8d5d5924e40e3b80b46fc5a5..fc4e8867a4cd72aeca91985af7feae841a6e0797 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 }}