diff --git a/mo/web/acct.py b/mo/web/acct.py index 5aeb7acbe4296c973249236fed94000361cc0e09..72ee25fe7615756ae900e03c5c7b5b45798f0148 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 d5215f1e8cee5a79d54cca7d2d3dcb00fe036008..29470c2e99b5fd2f6736897f51d2036b8c22c58a 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>