From 5b7b328bea6f829ee0b1a1431e0dfbbf8c07c5e2 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Wed, 6 Oct 2021 19:24:24 +0200
Subject: [PATCH] =?UTF-8?q?Na=20str=C3=A1nku=20=C3=BA=C4=8Dastnick=C3=A9ho?=
 =?UTF-8?q?=20=C3=BA=C4=8Dtu=20p=C5=99id=C3=A1n=20upgrade=20na=20organiz?=
 =?UTF-8?q?=C3=A1tora?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_users.py            | 18 ++++++++++++++++++
 mo/web/templates/org_user.html |  8 ++++++++
 2 files changed, 26 insertions(+)

diff --git a/mo/web/org_users.py b/mo/web/org_users.py
index aba8b24d..3ef60af3 100644
--- a/mo/web/org_users.py
+++ b/mo/web/org_users.py
@@ -266,6 +266,10 @@ 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()
@@ -373,6 +377,19 @@ 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)
@@ -390,6 +407,7 @@ 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,
     )
 
 
diff --git a/mo/web/templates/org_user.html b/mo/web/templates/org_user.html
index 9595d856..9155eb29 100644
--- a/mo/web/templates/org_user.html
+++ b/mo/web/templates/org_user.html
@@ -28,6 +28,14 @@
 	</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>
+</form>
+{% endif %}
 {% if g.user.is_admin %}
 	<a class="btn btn-default" href="{{ log_url('user', user.user_id) }}">Historie</a>
 {% endif %}
-- 
GitLab