diff --git a/mo/web/org_users.py b/mo/web/org_users.py index 0066ba8fa0987f619afdb59e74909ba9a7fbe9a1..f0abd8eb2dbfb7a5c738fad2b941cfcf182bf824 100644 --- a/mo/web/org_users.py +++ b/mo/web/org_users.py @@ -329,10 +329,6 @@ class ResendInviteForm(FlaskForm): flash('Tento uživatel už má účet aktivovaný.', 'danger') -class UpgradeToOrgForm(FlaskForm): - upgrade = SubmitField() - - @app.route('/org/org/<int:id>/', methods=('GET', 'POST')) def org_org(id: int): sess = db.get_session() @@ -440,19 +436,6 @@ def org_user(id: int): resend_invite_form.do(user) return redirect(url_for('org_user', id=id)) - upgrade_form: Optional[UpgradeToOrgForm] = None - if rr.can_edit_user: - upgrade_form = UpgradeToOrgForm() - if upgrade_form.upgrade.data and upgrade_form.validate_on_submit(): - try: - mo.users.change_user_to_org(user, reason='web') - sess.commit() - flash('Účet změněn na organizátorský.', 'success') - return redirect(url_for('org_org', id=user.user_id)) - except mo.CheckError as e: - flash(str(e), 'danger') - return redirect(url_for('org_user', id=user.user_id)) - participants = sess.query(db.Participant).filter_by(user_id=user.user_id) participations = ( sess.query(db.Participation, db.Contest, db.Round) @@ -470,7 +453,6 @@ def org_user(id: int): can_incarnate=g.user.is_admin, participants=participants, participations=participations, resend_invite_form=resend_invite_form, - upgrade_form=upgrade_form, ) @@ -852,3 +834,39 @@ def org_user_dsn(user_id: int): .all()) return render_template('org_user_dsn.html', user=user, dsns=dsns) + + +class UpgradeToOrgForm(FlaskForm): + upgrade = SubmitField() + + +@app.route('/org/user/<int:user_id>/upgrade', methods=('GET', 'POST')) +def org_user_upgrade(user_id: int): + sess = db.get_session() + user = mo.users.user_by_uid(user_id) + if not user: + raise werkzeug.exceptions.NotFound() + + rr = g.gatekeeper.rights_generic() + if not rr.can_edit_user(user): + raise werkzeug.exceptions.Forbidden() + + if user.is_org or user.is_admin: + flash('Účet již je organizátorský.', 'warning') + return redirect(url_for('org_org', id=user.user_id)) + + form = UpgradeToOrgForm() + if form.validate_on_submit(): + try: + mo.users.change_user_to_org(user, reason='web') + sess.commit() + flash('Účet změněn na organizátorský.', 'success') + return redirect(url_for('org_org', id=user.user_id)) + except mo.CheckError as e: + flash(str(e), 'danger') + return redirect(url_for('org_user', id=user.user_id)) + + return render_template( + 'org_user_upgrade.html', user=user, + form=form, + ) diff --git a/mo/web/templates/org_user.html b/mo/web/templates/org_user.html index 301211481b1c5b610b4f1f4c2b71baebc9b2f564..a0cf2cd402353ce9100cb3b7fdd2cd3adf8324c3 100644 --- a/mo/web/templates/org_user.html +++ b/mo/web/templates/org_user.html @@ -32,12 +32,8 @@ </button> </form> {% endif %} -{% if upgrade_form %} -<form method=POST class='btn-group' onsubmit='return confirm("Změnit účastnický účet na organizátorský?");'> - {{ upgrade_form.csrf_token }} - <button class="btn btn-default" type='submit' name='upgrade' value='yes'> - Změnit na organizátora - </button> +{% if can_edit and not (user.is_admin or user.is_org) %} + <a class="btn btn-default" href="{{ url_for('org_user_upgrade', user_id=user.user_id) }}">Změnit na organizátora</a> </form> {% endif %} {% if g.user.is_admin %} diff --git a/mo/web/templates/org_user_upgrade.html b/mo/web/templates/org_user_upgrade.html new file mode 100644 index 0000000000000000000000000000000000000000..a7daf6bd480b85642b704c6a308ad39ad4cc6f0d --- /dev/null +++ b/mo/web/templates/org_user_upgrade.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} +{% block title %}Změna účtu na organizátorský{% endblock %} +{% block body %} + +<p> + Chystáte se převést účet {{ user.full_name() }} ({{ user.email }}) na organizátorský. +</p> + +<p> + <b>Opravdu si to přejete udělat? Pozor, tato změna je nevratná.</b> +</p> + +<div class='btn-group' role='group'> +<form method=POST class='btn-group'> + <button class="btn btn-primary" type='submit' name='upgrade' value='yes'> + Provést + </button> + {{ form.csrf_token }} + <a class="btn btn-default" href="{{ url_for('org_user', id=user.user_id) }}">Vrátit se zpět</a> +</form> +</div> + +{% endblock %}