From 60ceddc9908944d3397c9cf66fce9ad720107f94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Sat, 30 Jan 2021 22:50:20 +0100
Subject: [PATCH] =?UTF-8?q?org=5Fsubmit=5Flist:=20Nejd=C5=99=C3=ADve=20mus?=
 =?UTF-8?q?=C3=ADme=20vyhodnotit=20submit=20SetFinalForm?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Jaký formulář byl poslán musíme poznat podle jména submit tlačítka.
---
 mo/web/org_contest.py                 | 96 +++++++++++++--------------
 mo/web/templates/org_submit_list.html |  4 +-
 2 files changed, 50 insertions(+), 50 deletions(-)

diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 172f9684..bae547ee 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -634,7 +634,7 @@ class SubmitForm(FlaskForm):
 class SetFinalForm(FlaskForm):
     type = wtforms.StringField()
     paper_id = wtforms.IntegerField()
-    submit = wtforms.SubmitField("Prohlásit za finální")
+    submit_final = wtforms.SubmitField("Prohlásit za finální")
 
 
 @app.route('/org/contest/c/<int:contest_id>/submit/<int:user_id>/<int:task_id>/', methods=('GET', 'POST'))
@@ -651,6 +651,53 @@ def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Option
            .filter_by(user_id=user_id, task_id=task_id)
            .one_or_none())
 
+    set_final_form: Optional[SetFinalForm] = None
+    if sol and sc.allow_upload_feedback:
+        set_final_form = SetFinalForm()
+        if set_final_form.validate_on_submit() and set_final_form.submit_final.data:
+            is_submit = set_final_form.type.data == "submit"
+            is_feedback = set_final_form.type.data == "feedback"
+            paper = sess.query(db.Paper).get(set_final_form.paper_id.data)
+            if not paper:
+                flash('Chyba: Papír s takovým ID neexistuje', 'danger')
+            elif paper.for_user != user_id or paper.for_task != task_id:
+                flash('Chyba: Papír nepatří k dané úloze a uživateli', 'danger')
+            elif (is_submit and sol.final_submit_obj == paper) or (is_feedback and sol.final_feedback_obj == paper):
+                flash('Žádná změna', 'warning')
+            elif is_submit:
+                app.logger.info(f"Finální submit úlohy {task_id} pro uživatele {user_id} změněn na {paper.paper_id}")
+                mo.util.log(
+                    type=db.LogType.participant,
+                    what=user_id,
+                    details={
+                        'action': 'task-final-submit-changed',
+                        'task': task_id,
+                        'old_paper': sol.final_submit,
+                        'new_paper': paper.paper_id
+                    },
+                )
+                sol.final_submit = paper.paper_id
+                sess.commit()
+                flash('Finální řešení změněno', 'success')
+            elif is_feedback:
+                app.logger.info(f"Finální feedback úlohy {task_id} pro uživatele {user_id} změněn na {paper.paper_id}")
+                mo.util.log(
+                    type=db.LogType.participant,
+                    what=user_id,
+                    details={
+                        'action': 'task-final-feedback-changed',
+                        'task': task_id,
+                        'old_paper': sol.final_feedback,
+                        'new_paper': paper.paper_id
+                    },
+                )
+                sol.final_feedback = paper.paper_id
+                sess.commit()
+                flash('Finální oprava změněna', 'success')
+            else:
+                flash('Chyba: Neplatná akce', 'danger')
+            return redirect(self_url)
+
     form = SubmitForm(obj=sol)
     if form.validate_on_submit():
         points = form.points.data
@@ -747,53 +794,6 @@ def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Option
                 flash(prefix + ' odevzdáno', 'success')
         return redirect(self_url)
 
-    set_final_form: Optional[SetFinalForm] = None
-    if sol and sc.allow_upload_feedback:
-        set_final_form = SetFinalForm()
-        if set_final_form.validate_on_submit():
-            is_submit = set_final_form.type.data == "submit"
-            is_feedback = set_final_form.type.data == "feedback"
-            paper = sess.query(db.Paper).get(set_final_form.paper_id.data)
-            if not paper:
-                flash('Chyba: Papír s takovým ID neexistuje', 'danger')
-            elif paper.for_user != user_id or paper.for_task != task_id:
-                flash('Chyba: Papír nepatří k dané úloze a uživateli', 'danger')
-            elif (is_submit and sol.final_submit_obj == paper) or (is_feedback and sol.final_feedback_obj == paper):
-                flash('Žádná změna', 'warning')
-            elif is_submit:
-                app.logger.info(f"Finální submit úlohy {task_id} pro uživatele {user_id} změněn na {paper.paper_id}")
-                mo.util.log(
-                    type=db.LogType.participant,
-                    what=user_id,
-                    details={
-                        'action': 'task-final-submit-changed',
-                        'task': task_id,
-                        'old_paper': sol.final_submit,
-                        'new_paper': paper.paper_id
-                    },
-                )
-                sol.final_submit = paper.paper_id
-                sess.commit()
-                flash('Finální řešení změněno', 'success')
-            elif is_feedback:
-                app.logger.info(f"Finální feedback úlohy {task_id} pro uživatele {user_id} změněn na {paper.paper_id}")
-                mo.util.log(
-                    type=db.LogType.participant,
-                    what=user_id,
-                    details={
-                        'action': 'task-final-feedback-changed',
-                        'task': task_id,
-                        'old_paper': sol.final_feedback,
-                        'new_paper': paper.paper_id
-                    },
-                )
-                sol.final_feedback = paper.paper_id
-                sess.commit()
-                flash('Finální oprava změněna', 'success')
-            else:
-                flash('Chyba: Neplatná akce', 'danger')
-            return redirect(self_url)
-
     papers = (sess.query(db.Paper)
               .filter_by(for_user_obj=sc.user, task=sc.task)
               .options(joinedload(db.Paper.uploaded_by_obj))
diff --git a/mo/web/templates/org_submit_list.html b/mo/web/templates/org_submit_list.html
index 76061a6e..ac13d207 100644
--- a/mo/web/templates/org_submit_list.html
+++ b/mo/web/templates/org_submit_list.html
@@ -53,7 +53,7 @@ Existuje více než jedna verze řešení, finální je podbarvená.
 				<form class="btn-group" method="POST">
 					{{ set_final_form.csrf_token }}
 					<input type="hidden" name="type" value="submit"><input type="hidden" name="paper_id" value="{{ p.paper_id }}">
-					{{ wtf.form_field(set_final_form.submit, class="btn btn-xs btn-default") }}
+					{{ wtf.form_field(set_final_form.submit_final, class="btn btn-xs btn-default") }}
 				</form>
 				{% endif %}
 			</div>
@@ -104,7 +104,7 @@ Existuje více než jedna verze oprav, finální je podbarvená.
 				<form class="btn-group" method="POST">
 					{{ set_final_form.csrf_token }}
 					<input type="hidden" name="type" value="feedback"><input type="hidden" name="paper_id" value="{{ p.paper_id }}">
-					{{ wtf.form_field(set_final_form.submit, class="btn btn-xs btn-default") }}
+					{{ wtf.form_field(set_final_form.submit_final, class="btn btn-xs btn-default") }}
 				</form>
 				{% endif %}
 			</div>
-- 
GitLab