From 2345c9418f7efa2cf0806a841628c42ecd085801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz> Date: Wed, 6 Jan 2021 22:37:06 +0100 Subject: [PATCH] =?UTF-8?q?Kola:=20Z=C3=A1kladn=C3=AD=20editace=20parametr?= =?UTF-8?q?=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/rights.py | 2 + mo/web/org_round.py | 58 +++++++++++++++++++++++++++- mo/web/templates/org_round.html | 5 ++- mo/web/templates/org_round_edit.html | 11 ++++++ 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 mo/web/templates/org_round_edit.html diff --git a/mo/rights.py b/mo/rights.py index 384b94d5..09fdf167 100644 --- a/mo/rights.py +++ b/mo/rights.py @@ -11,6 +11,7 @@ class Right(Enum): assign_rights = auto() edit_region = auto() edit_place = auto() + manage_round = auto() manage_contest = auto() upload_solutions = auto() upload_feedback = auto() @@ -42,6 +43,7 @@ roles: List[Role] = [ rights={ Right.assign_rights, Right.edit_place, + Right.manage_round, Right.manage_contest, Right.add_users, Right.edit_users, diff --git a/mo/web/org_round.py b/mo/web/org_round.py index e8e18dcc..e0f47131 100644 --- a/mo/web/org_round.py +++ b/mo/web/org_round.py @@ -3,8 +3,12 @@ from flask import render_template, g, redirect, url_for, flash, request import locale import os import secrets +from flask_wtf.form import FlaskForm from sqlalchemy.orm import joinedload import werkzeug.exceptions +import wtforms +from wtforms import validators +from wtforms.fields.html5 import DateTimeLocalField import mo import mo.csv @@ -60,7 +64,8 @@ def org_round(id: int): round=round, contests=contests, level_names=mo.db.place_level_names, - can_manage=rr.have_right(mo.rights.Right.manage_contest), + can_manage_round=rr.have_right(mo.rights.Right.manage_round), + can_manage_contestants=rr.have_right(mo.rights.Right.manage_contest), ) @@ -125,3 +130,54 @@ def org_round_import(id: int): form=form, errs=errs, ) + + +class RoundEditForm(FlaskForm): + state = wtforms.SelectField("Stav kola", choices=db.RoundState.choices()) + # Only the desktop Firefox does not support datetime-local field nowadays, + # other browsers does provide date and time picker UI :( + submit_start = DateTimeLocalField( + "Začátek kola", validators=[validators.Optional()], + description="Ve formátu 2020-01-01 00:00:00" + ) + ct_submit_end = DateTimeLocalField( + "Konec odevzdávání pro účastníky", validators=[validators.Optional()], + description="Ve formátu 2020-01-01 00:00:00" + ) + pr_submit_end = DateTimeLocalField( + "Konec odevzdávání pro dozor", validators=[validators.Optional()], + description="Ve formátu 2020-01-01 00:00:00" + ) + submit = wtforms.SubmitField('Uložit') + + +@app.route('/org/contest/r/<int:id>/edit', methods=('GET', 'POST')) +def org_round_edit(id: int): + sess = db.get_session() + round, rr = get_round_rr(id, mo.rights.Right.manage_round) + + form = RoundEditForm(obj=round) + if form.validate_on_submit(): + form.populate_obj(round) + + if sess.is_modified(round): + changes = db.get_object_changes(round) + + app.logger.info(f"Round {id} modified, changes: {changes}") + mo.util.log( + type=db.LogType.round, + what=id, + details={'action': 'edit', 'changes': changes}, + ) + sess.commit() + flash('Změny kola uloženy', 'success') + else: + flash(u'Žádné změny k uložení', 'info') + + return redirect(url_for('org_round', id=id)) + + return render_template( + 'org_round_edit.html', + round=round, + form=form, + ) diff --git a/mo/web/templates/org_round.html b/mo/web/templates/org_round.html index 5e9d8a3e..0509d3fc 100644 --- a/mo/web/templates/org_round.html +++ b/mo/web/templates/org_round.html @@ -18,9 +18,12 @@ <div class="btn-group"> -{% if can_manage %} +{% if can_manage_contestants %} <a class="btn btn-primary" href='{{ url_for('org_round_import', id=round.round_id) }}'>Importovat účastníky</a> {% endif %} +{% if can_manage_round %} +<a class="btn btn-primary" href='{{ url_for('org_round_edit', id=round.round_id) }}'>Editovat nastavení kola</a> +{% endif %} </div> <h3>Soutěže</h3> diff --git a/mo/web/templates/org_round_edit.html b/mo/web/templates/org_round_edit.html new file mode 100644 index 00000000..1f558c75 --- /dev/null +++ b/mo/web/templates/org_round_edit.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} +{% block body %} +<h2> + <a href='{{ url_for('org_round', id=round.round_id) }}'>Kolo {{ round.round_code() }}</a> + » Editace +</h2> + +{{ wtf.quick_form(form, form_type='horizontal') }} + +{% endblock %} -- GitLab