From 9b4a4e25ed7424a3e454b5f1721131c0617b6497 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Wed, 17 Nov 2021 00:14:14 +0100 Subject: [PATCH] =?UTF-8?q?Nastaven=C3=AD=20=C3=BA=C4=8Dtu=20obsahuje=20p?= =?UTF-8?q?=C5=99ep=C3=ADna=C4=8D=20emailov=C3=BDch=20notifikac=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit V DB jsme ho už měli. --- mo/web/acct.py | 29 +++++++++++++++++++++++++---- mo/web/templates/settings.html | 14 ++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/mo/web/acct.py b/mo/web/acct.py index 5aeb7acb..72ee25fe 100644 --- a/mo/web/acct.py +++ b/mo/web/acct.py @@ -107,9 +107,27 @@ def incarnate(id): return login_and_redirect(new_user, flash_msg='Převtělení proběhlo') -@app.route('/acct/settings') +class AcctSettingsForm(FlaskForm): + email_notify = wtforms.BooleanField('Posílat e-mailové notifikace') + submit = wtforms.SubmitField('Nastavit') + + +@app.route('/acct/settings', methods=('GET', 'POST')) def user_settings(): sess = db.get_session() + user = g.user + + form = AcctSettingsForm() + if not form.submit.data: + form.email_notify.data = user.email_notify + + if form.validate_on_submit(): + user.email_notify = form.email_notify.data + app.logger.info(f'Settings: Změněny preference uživatele #{user.user_id}: {db.get_object_changes(user)}') + # Do databázového logu nezapisujeme, nemá smysl logovat prkotiny. + sess.commit() + flash('Nastavení změněno.', 'success') + return redirect(url_for('user_settings')) roles = (sess.query(db.UserRole) .filter_by(user_id=g.user.user_id) @@ -121,10 +139,13 @@ def user_settings(): else: pant = sess.query(db.Participant).get((g.user.user_id, mo.current_year)) - return render_template('settings.html', user=g.user, pant=pant, roles=roles, roles_by_type=mo.rights.roles_by_type) + return render_template( + 'settings.html', + user=g.user, pant=pant, roles=roles, roles_by_type=mo.rights.roles_by_type, + form=form) -class SettingsForm(FlaskForm): +class PersonalSettingsForm(FlaskForm): email = mo_fields.Email(validators=[validators.DataRequired()]) current_passwd = mo_fields.Password('Aktuální heslo', validators=[validators.DataRequired()]) new_passwd = mo_fields.NewPassword( @@ -143,7 +164,7 @@ def user_settings_personal(): sess = db.get_session() user = g.user - form = SettingsForm() + form = PersonalSettingsForm() if not form.submit.data: form.email.data = user.email diff --git a/mo/web/templates/settings.html b/mo/web/templates/settings.html index d5215f1e..29470c2e 100644 --- a/mo/web/templates/settings.html +++ b/mo/web/templates/settings.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} {% block title %}Uživatel {{ user.full_name() }}{% endblock %} {% block body %} @@ -20,6 +21,19 @@ <p>Pokud potřebujete změnit jiné údaje, ozvěte se svému učiteli nebo garantovi. Neuspějete-li u nich, napište správci OSMO (kontakt viz patička stránky). + <h3>Nastavení</h3> + + <form action="" method="post" class="form" role="form"> + {{ form.csrf_token }} + + <div class='form-group'> + {{ wtf.form_field(form.email_notify, form_type='simple') }} + </div> + + {{ wtf.form_field(form.submit, form_type='simple', button_map={'submit': 'primary'}) }} + + </form> + {% if user.is_admin or user.is_org %} <h3>Práva</h3> -- GitLab