diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index 172f96842a5b11c4344ddd8f6ddf36de817af959..bae547ee81e02a23c899ab833506e2f526dc90d7 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 76061a6ee18fbe9c6788d921e4e8c26706db8103..ac13d207d5944d2d53db790bb92729278c7fe080 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>