def account_edit(newprofile=False): form = ProfileForm(obj=current_auth.user) form.edit_user = current_auth.user form.fullname.description = current_app.config.get('FULLNAME_REASON') form.email.description = current_app.config.get('EMAIL_REASON') form.username.description = current_app.config.get('USERNAME_REASON') form.timezone.description = current_app.config.get('TIMEZONE_REASON') if current_auth.user.email or newprofile is False: del form.email if form.validate_on_submit(): # Can't auto-populate here because user.email is read-only current_auth.user.fullname = form.fullname.data current_auth.user.username = form.username.data current_auth.user.timezone = form.timezone.data if newprofile and not current_auth.user.email: useremail = UserEmailClaim.get(user=current_auth.user, email=form.email.data) if useremail is None: useremail = UserEmailClaim(user=current_auth.user, email=form.email.data) db.session.add(useremail) send_email_verify_link(useremail) db.session.commit() user_data_changed.send(current_auth.user, changes=['profile', 'email-claim']) flash(_( "Your profile has been updated. We sent you an email to confirm your address" ), category='success') else: db.session.commit() user_data_changed.send(current_auth.user, changes=['profile']) flash(_("Your profile has been updated"), category='success') if newprofile: return render_redirect(get_next_url(), code=303) else: return render_redirect(url_for('account'), code=303) if newprofile: return render_form( form, title=_("Update profile"), formid='account_new', submit=_("Continue"), message=Markup( _(u"Hello, <strong>{fullname}</strong>. Please spare a minute to fill out your profile" ).format(fullname=escape(current_auth.user.fullname))), ajax=True) else: return render_form(form, title=_("Edit profile"), formid='account_edit', submit=_("Save changes"), ajax=True)
def validate_email(self, field): field.data = field.data.lower() # Convert to lowercase existing = UserEmail.get(email=field.data) if existing is not None: if existing.user == g.user: raise forms.ValidationError(_("You have already registered this email address")) else: raise forms.ValidationError(_("This email address has already been claimed")) existing = UserEmailClaim.get(email=field.data, user=g.user) if existing is not None: raise forms.ValidationError(_("This email address is pending verification"))
def add_email(): form = NewEmailAddressForm() if form.validate_on_submit(): useremail = UserEmailClaim.get(user=g.user, email=form.email.data) if useremail is None: useremail = UserEmailClaim(user=g.user, email=form.email.data) db.session.add(useremail) db.session.commit() send_email_verify_link(useremail) flash("We sent you an email to confirm your address.", 'success') user_data_changed.send(g.user, changes=['email-claim']) return render_redirect(url_for('.profile'), code=303) return render_form(form=form, title="Add an email address", formid="email_add", submit="Add email", ajax=True)
def add_email(): form = NewEmailAddressForm() if form.validate_on_submit(): useremail = UserEmailClaim.get(user=current_auth.user, email=form.email.data) if useremail is None: useremail = UserEmailClaim(user=current_auth.user, email=form.email.data, type=form.type.data) db.session.add(useremail) db.session.commit() send_email_verify_link(useremail) flash(_("We sent you an email to confirm your address"), 'success') user_data_changed.send(current_auth.user, changes=['email-claim']) return render_redirect(url_for('.account'), code=303) return render_form(form=form, title=_("Add an email address"), formid='email_add', submit=_("Add email"), ajax=True)
def validate_email(self, field): field.data = field.data.lower() # Convert to lowercase existing = UserEmail.get(email=field.data) if existing is not None: if existing.user == g.user: raise wtforms.ValidationError( "You have already registered this email address.") else: raise wtforms.ValidationError( "This email address has already been claimed.") existing = UserEmailClaim.get(email=field.data, user=g.user) if existing is not None: raise wtforms.ValidationError( "This email address is pending verification.")
def profile_edit(newprofile=False): form = ProfileForm(obj=g.user) form.edit_user = g.user form.fullname.description = current_app.config.get('FULLNAME_REASON') form.email.description = current_app.config.get('EMAIL_REASON') form.username.description = current_app.config.get('USERNAME_REASON') form.description.description = current_app.config.get('BIO_REASON') form.timezone.description = current_app.config.get('TIMEZONE_REASON') if g.user.email or newprofile is False: del form.email if newprofile is True: del form.description if form.validate_on_submit(): # Can't auto-populate here because user.email is read-only g.user.fullname = form.fullname.data g.user.username = form.username.data if not newprofile: g.user.description = form.description.data g.user.timezone = form.timezone.data if newprofile and not g.user.email: useremail = UserEmailClaim.get(user=g.user, email=form.email.data) if useremail is None: useremail = UserEmailClaim(user=g.user, email=form.email.data) db.session.add(useremail) send_email_verify_link(useremail) db.session.commit() user_data_changed.send(g.user, changes=['profile', 'email-claim']) flash("Your profile has been updated. We sent you an email to confirm your address", category='success') else: db.session.commit() user_data_changed.send(g.user, changes=['profile']) flash("Your profile has been updated.", category='success') if newprofile: return render_redirect(get_next_url(), code=303) else: return render_redirect(url_for('profile'), code=303) if newprofile: return render_form(form, title="Update profile", formid="profile_new", submit="Continue", message=Markup(u"Hello, <strong>{fullname}</strong>. Please spare a minute to fill out your profile.".format( fullname=escape(g.user.fullname))), ajax=True) else: return render_form(form, title="Edit profile", formid="profile_edit", submit="Save changes", ajax=True)