Skip to content
Snippets Groups Projects
Commit 95118256 authored by Jiří Setnička's avatar Jiří Setnička
Browse files

org_submit_list: Nejdříve musíme vyhodnotit submit SetFinalForm

Jaký formulář byl poslán musíme poznat podle jména submit tlačítka.
parent e5cf5326
No related branches found
No related tags found
1 merge request!28Formulář na vše na stránce řešení
...@@ -634,7 +634,7 @@ class SubmitForm(FlaskForm): ...@@ -634,7 +634,7 @@ class SubmitForm(FlaskForm):
class SetFinalForm(FlaskForm): class SetFinalForm(FlaskForm):
type = wtforms.StringField() type = wtforms.StringField()
paper_id = wtforms.IntegerField() 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')) @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 ...@@ -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) .filter_by(user_id=user_id, task_id=task_id)
.one_or_none()) .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) form = SubmitForm(obj=sol)
if form.validate_on_submit(): if form.validate_on_submit():
points = form.points.data points = form.points.data
...@@ -747,53 +794,6 @@ def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Option ...@@ -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') flash(prefix + ' odevzdáno', 'success')
return redirect(self_url) 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) papers = (sess.query(db.Paper)
.filter_by(for_user_obj=sc.user, task=sc.task) .filter_by(for_user_obj=sc.user, task=sc.task)
.options(joinedload(db.Paper.uploaded_by_obj)) .options(joinedload(db.Paper.uploaded_by_obj))
......
...@@ -64,7 +64,7 @@ Existuje více než jedna verze řešení, finální je podbarvená. ...@@ -64,7 +64,7 @@ Existuje více než jedna verze řešení, finální je podbarvená.
<form class="btn-group" method="POST"> <form class="btn-group" method="POST">
{{ set_final_form.csrf_token }} {{ set_final_form.csrf_token }}
<input type="hidden" name="type" value="submit"><input type="hidden" name="paper_id" value="{{ p.paper_id }}"> <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> </form>
{% endif %} {% endif %}
</div> </div>
...@@ -115,7 +115,7 @@ Existuje více než jedna verze oprav, finální je podbarvená. ...@@ -115,7 +115,7 @@ Existuje více než jedna verze oprav, finální je podbarvená.
<form class="btn-group" method="POST"> <form class="btn-group" method="POST">
{{ set_final_form.csrf_token }} {{ set_final_form.csrf_token }}
<input type="hidden" name="type" value="feedback"><input type="hidden" name="paper_id" value="{{ p.paper_id }}"> <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> </form>
{% endif %} {% endif %}
</div> </div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment