diff --git a/mo/web/org.py b/mo/web/org.py index 1cdf8c0fee50675ebdce4aa2d720772cbd53c49e..377f6ab34ef03b416f75c114c107405cb4ef6502 100644 --- a/mo/web/org.py +++ b/mo/web/org.py @@ -11,6 +11,7 @@ import mo.rights import mo.users from mo.web import app from mo.web.jinja import user_url +import mo.web.org_round from mo.web.table import Table, Row, Column @@ -103,7 +104,14 @@ def org_index(): get_stats(overview) overview = filter_overview(overview) - return render_template('org_index.html', overview=overview, role_type_names=db.role_type_names) + form_add_contest = mo.web.org_round.AddContestForm() + + return render_template( + 'org_index.html', + overview=overview, + role_type_names=db.role_type_names, + form_add_contest=form_add_contest, + ) def get_stats(overview: List[OrgOverview]) -> None: diff --git a/mo/web/org_round.py b/mo/web/org_round.py index ff7c75198cc140d6d37455d0e19c39b9079c5c88..fec02c9526278dd38cc13074b99ca62bdbca776e 100644 --- a/mo/web/org_round.py +++ b/mo/web/org_round.py @@ -81,6 +81,7 @@ def delete_task(round_id: int, form: TaskDeleteForm) -> bool: return False +# Používá se i přehledu soutěží na orgovské hlavní stránce class AddContestForm(FlaskForm): place = mo_fields.Place('Nová soutěž v oblasti:', validators=[validators.DataRequired()]) create_contest = wtforms.SubmitField('Založit') @@ -702,3 +703,20 @@ def org_round_create_contests(round_id: int): form=form, num_new_places=len(new_places), ) + + +# Používá se v zakládacím tlačítku v přehledu soutěží na orgovské hlavní stránce +@app.route('/org/contests/r/<int:round_id>/create-contest', methods=('POST',)) +def org_round_create_contest(round_id: int): + sess = db.get_session() + ctx = get_context(round_id=round_id) + + form_add_contest = AddContestForm() + if not add_contest(ctx.round, form_add_contest): + return redirect(url_for('org_index')) + + # Je jednodušší soutěž znovu najít, než se ji snažit vydolovat z mechanismu + # zakládání soutěží v dělených kolech. + contest = sess.query(db.Contest).filter_by(round=ctx.round, place=form_add_contest.place.place).first() + assert contest is not None + return redirect(ctx.url_for('org_contest', ct_id=contest.contest_id)) diff --git a/mo/web/templates/org_index.html b/mo/web/templates/org_index.html index 75bf04051c0b8c64cd5616a1ef4ef6c1901a0e26..a5962c432b06e1753b9f6c039ab227b24e6365ae 100644 --- a/mo/web/templates/org_index.html +++ b/mo/web/templates/org_index.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} {% block title %}Přístup pro organizátory{% endblock %} {% block body %} @@ -61,7 +62,12 @@ {% endif %} <td>{% for r in o.role_list %}{{ role_type_names[r] }}{% if not loop.last %}<br>{% endif %}{% endfor %} {% if create %} - <td><a class="btn btn-xs btn-success" href='{{ detail_url }}'>Založit</a> + <td> + <form action="{{ url_for('org_round_create_contest', round_id=o.round.round_id) }}" method="POST" class="form-inline"> + {{ form_add_contest.csrf_token() }} + <input name="place" type=hidden value="{{ o.place.get_code() }}"> + <input class="btn btn-xs btn-success" name="create_contest" type="submit" value="Založit"> + </form> {% else %} <td><a class="btn btn-xs btn-primary" href='{{ detail_url }}'>Detail</a> {% endif %}