From 7b97ac14cb90b3b6dafbbfe48aa5184699726655 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Fri, 19 Feb 2021 19:58:07 +0100
Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1n=C3=AD=20allow=5Fcreate=5Fsolut?=
 =?UTF-8?q?ions=20do=20SolutionContext=20a=20drobn=C3=BD=20refaktoring?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_contest.py                       | 11 +++++++----
 mo/web/templates/org_contest_solutions.html |  4 ++--
 mo/web/templates/org_contest_task.html      |  2 +-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index e3de4f55..956626ce 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -353,6 +353,7 @@ def org_contest(id: int, site_id: Optional[int] = None):
         can_manage=rr.have_right(Right.manage_contest),
         can_upload=rr.can_upload_feedback(round),
         can_edit_points=rr.can_edit_points(round),
+        can_create_solutions=rr.can_upload_feedback(round) or rr.can_upload_solutions(round),
         can_view_statement=rr.can_view_statement(round),
         tasks=tasks, places_counts=places_counts,
     )
@@ -556,6 +557,7 @@ class SolutionContext:
     allow_view: bool
     allow_upload_solutions: bool
     allow_upload_feedback: bool
+    allow_create_solutions: bool
     allow_edit_points: bool
 
 
@@ -608,6 +610,8 @@ def get_solution_context(contest_id: int, user_id: Optional[int], task_id: Optio
     if not allow_view:
         raise werkzeug.exceptions.Forbidden()
 
+    allow_upload_solutions = rr.can_upload_solutions(round)
+    allow_upload_feedback = rr.can_upload_feedback(round)
     return SolutionContext(
         contest=contest,
         round=round,
@@ -617,8 +621,9 @@ def get_solution_context(contest_id: int, user_id: Optional[int], task_id: Optio
         site=site,
         # XXX: Potřebujeme tohle všechno? Nechceme spíš vracet rr a nechat každého, ať na něm volá metody?
         allow_view=allow_view,
-        allow_upload_solutions=rr.can_upload_solutions(round),
-        allow_upload_feedback=rr.can_upload_feedback(round),
+        allow_upload_solutions=allow_upload_solutions,
+        allow_upload_feedback=allow_upload_feedback,
+        allow_create_solutions=allow_upload_solutions or allow_upload_feedback,
         allow_edit_points=rr.can_edit_points(round),
     )
 
@@ -1024,8 +1029,6 @@ def org_contest_solutions(id: int, site_id: Optional[int] = None):
         'org_contest_solutions.html',
         contest=sc.contest, site=sc.site, sc=sc,
         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 u, p: mo.web.util.org_paper_link(sc.contest, sc.site, u, p),
     )
 
diff --git a/mo/web/templates/org_contest_solutions.html b/mo/web/templates/org_contest_solutions.html
index 670a5472..dc718bae 100644
--- a/mo/web/templates/org_contest_solutions.html
+++ b/mo/web/templates/org_contest_solutions.html
@@ -36,7 +36,7 @@ konkrétní úlohu. Symbol <span class="icon">🗐</span> značí, že existuje
 			<th rowspan=2>Stav účasti</th>
 			{% for task in tasks %}<th colspan=4>
 				<a href="{{ url_for('org_contest_task', contest_id=contest.contest_id, site_id=site_id, task_id=task.task_id) }}">{{ task.code }}</a>
-				{% if can_edit_points %}
+				{% if sc.allow_edit_points %}
 				<a title="Editovat body" href="{{ url_for('org_contest_task_points', contest_id=contest.contest_id, task_id=task.task_id) }}" class="icon pull-right">✎</a>
 				{% endif %}
 			{% endfor %}
@@ -100,7 +100,7 @@ konkrétní úlohu. Symbol <span class="icon">🗐</span> značí, že existuje
 		{% for task in tasks %}
 			<td colspan=4><div class='btn-group'>
 				<a class='btn btn-xs btn-primary' href="{{ url_for('org_contest_task_download', contest_id=contest.contest_id, site_id=site_id, task_id=task.task_id) }}">Stáhnout</a>
-			{% if can_upload %}
+			{% if sc.allow_upload_feedback %}
 				<a class='btn btn-xs btn-primary' href="{{ url_for('org_contest_task_upload', contest_id=contest.contest_id, site_id=site_id, task_id=task.task_id) }}">Nahrát</a>
 			{% endif %}
 				</div>
diff --git a/mo/web/templates/org_contest_task.html b/mo/web/templates/org_contest_task.html
index 224fd89e..ec03f0d4 100644
--- a/mo/web/templates/org_contest_task.html
+++ b/mo/web/templates/org_contest_task.html
@@ -39,7 +39,7 @@
 {% else %}
 <div class='btn-group'>
 	<a class='btn btn-primary' href="{{ url_for('org_contest_task_download', contest_id=ct_id, site_id=site_id, task_id=task.task_id) }}">Stáhnout řešení</a>
-	{% if can_upload %}
+	{% if sc.allow_upload_feedback %}
 	<a class='btn btn-primary' href="{{ url_for('org_contest_task_upload', contest_id=ct_id, site_id=site_id, task_id=task.task_id) }}">Nahrát opravená řešení</a>
 	{% endif %}
 	{% if not site and sc.allow_edit_points %}
-- 
GitLab