Skip to content
Snippets Groups Projects

Editace emailu + zvací emaily

Merged Jiří Setnička requested to merge jirka/maily into devel
All threads resolved!
+ 57
20
@@ -7,6 +7,7 @@ from sqlalchemy import or_
from sqlalchemy.orm import joinedload, subqueryload
from wtforms import validators
from wtforms.fields.simple import SubmitField
from wtforms.validators import Required
@@ -210,6 +211,20 @@ class FormRemoveRole(FlaskForm):
remove = wtforms.SubmitField('Odebrat roli')
class ResendInviteForm(FlaskForm):
resend_invite = SubmitField()
def do(self, user: db.User):
token = mo.users.ask_reset_password(user)
db.get_session().commit()
if user.last_login_at is None and mo.util.send_new_account_email(user, token):
flash('Uvítací e-mail s odkazem pro nastavení hesla odeslán na {}'.format(user.email), 'success')
elif mo.util.send_password_reset_email(user, token):
flash('E-mail s odkazem pro resetování hesla odeslán na {}'.format(user.email), 'success')
else:
flash('Problém při odesílání e-mailu s odkazem pro nastavení hesla', 'danger')
@app.route('/org/org/<int:id>/', methods=('GET', 'POST'))
def org_org(id: int):
sess = db.get_session()
@@ -222,6 +237,13 @@ def org_org(id: int):
rr = g.gatekeeper.rights_generic()
can_assign_rights = rr.have_right(Right.assign_rights)
resend_invite_form: Optional[ResendInviteForm] = None
if rr.can_edit_user(user):
resend_invite_form = ResendInviteForm()
if resend_invite_form.validate_on_submit():
resend_invite_form.do(user)
return redirect(url_for('org_org', id=id))
form_add_role = FormAddRole()
form_remove_role = FormRemoveRole()
role_errors = []
@@ -286,6 +308,7 @@ def org_org(id: int):
can_incarnate=g.user.is_admin,
roles_by_type=mo.rights.roles_by_type, role_errors=role_errors,
form_add_role=form_add_role, form_remove_role=form_remove_role,
resend_invite_form=resend_invite_form,
)
@@ -300,6 +323,13 @@ def org_user(id: int):
rr = g.gatekeeper.rights_generic()
resend_invite_form: Optional[ResendInviteForm] = None
if rr.can_edit_user(user):
resend_invite_form = ResendInviteForm()
if resend_invite_form.validate_on_submit():
resend_invite_form.do(user)
return redirect(url_for('org_user', id=id))
participants = sess.query(db.Participant).filter_by(user_id=user.user_id)
participations = (
sess.query(db.Participation, db.Contest, db.Round)
@@ -316,20 +346,17 @@ def org_user(id: int):
'org_user.html', user=user, can_edit=rr.can_edit_user(user),
can_incarnate=g.user.is_admin,
participants=participants, participations=participations,
resend_invite_form=resend_invite_form,
)
class UserEditForm(FlaskForm):
first_name = wtforms.StringField("Jméno", validators=[Required()], render_kw={'autofocus': True})
last_name = wtforms.StringField("Příjmení", validators=[Required()])
email = wtforms.StringField("E-mail", validators=[Required()])
note = wtforms.TextAreaField("Poznámka")
submit = wtforms.SubmitField("Uložit")
class NewUserForm(UserEditForm):
email = wtforms.StringField("E-mail", validators=[Required()])
submit = wtforms.SubmitField("Vytvořit")
def validate_email(form, field):
try:
field.data = mo.users.normalize_email(field.data)
@@ -357,9 +384,18 @@ def org_user_edit(id: int):
raise werkzeug.exceptions.Forbidden()
form = UserEditForm(obj=user)
if (user.is_org or user.is_admin) and not g.user.is_admin:
# emaily u organizátorů může editovat jen správce
del form.email
if form.validate_on_submit():
form.populate_obj(user)
check = True
if mo.users.user_by_email(form.email.data) is not None:
flash('Zadaný e-mail nelze použít, existuje jiný účet s tímto e-mailem', 'danger')
check = False
if check:
form.populate_obj(user)
if sess.is_modified(user):
changes = db.get_object_changes(user)
@@ -392,7 +428,8 @@ def org_user_new():
elif not rr.have_right(Right.add_users):
raise werkzeug.exceptions.Forbidden()
form = NewUserForm()
form = UserEditForm()
form.submit.label.text = 'Vytvořit'
if form.validate_on_submit():
check = True
Loading