Add account form to account settings page
This commit is contained in:
parent
12bcdf2d47
commit
0054f362a7
|
@ -35,14 +35,9 @@ def get_setting_tabs(user):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
# Define the User profile form
|
|
||||||
class UserProfileForm(FlaskForm):
|
class UserProfileForm(FlaskForm):
|
||||||
display_name = StringField("Display name", [Optional(), Length(2, 100)])
|
|
||||||
forums_username = StringField("Forums Username", [Optional(), Length(2, 50)])
|
|
||||||
github_username = StringField("GitHub Username", [Optional(), Length(2, 50)])
|
|
||||||
website_url = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
|
website_url = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
donate_url = StringField("Donation URL", [Optional(), URL()], filters = [lambda x: x or None])
|
donate_url = StringField("Donation URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
rank = SelectField("Rank", [Optional()], choices=UserRank.choices(), coerce=UserRank.coerce, default=UserRank.NEW_MEMBER)
|
|
||||||
submit = SubmitField("Save")
|
submit = SubmitField("Save")
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,36 +52,16 @@ def profile_edit(username):
|
||||||
flash("Permission denied", "danger")
|
flash("Permission denied", "danger")
|
||||||
return redirect(url_for("users.profile", username=username))
|
return redirect(url_for("users.profile", username=username))
|
||||||
|
|
||||||
|
form = UserProfileForm(obj=user)
|
||||||
form = UserProfileForm(formdata=request.form, obj=user)
|
if form.validate_on_submit():
|
||||||
|
|
||||||
# Process valid POST
|
|
||||||
if request.method=="POST" and form.validate():
|
|
||||||
severity = AuditSeverity.NORMAL if current_user == user else AuditSeverity.MODERATION
|
severity = AuditSeverity.NORMAL if current_user == user else AuditSeverity.MODERATION
|
||||||
addAuditLog(severity, current_user, "Edited {}'s profile".format(user.display_name),
|
addAuditLog(severity, current_user, "Edited {}'s profile".format(user.display_name),
|
||||||
url_for("users.profile", username=username))
|
url_for("users.profile", username=username))
|
||||||
|
|
||||||
# Copy form fields to user_profile fields
|
|
||||||
if user.checkPerm(current_user, Permission.CHANGE_USERNAMES):
|
|
||||||
user.display_name = form.display_name.data
|
|
||||||
user.forums_username = nonEmptyOrNone(form.forums_username.data)
|
|
||||||
user.github_username = nonEmptyOrNone(form.github_username.data)
|
|
||||||
|
|
||||||
if user.checkPerm(current_user, Permission.CHANGE_PROFILE_URLS):
|
if user.checkPerm(current_user, Permission.CHANGE_PROFILE_URLS):
|
||||||
user.website_url = form["website_url"].data
|
user.website_url = form["website_url"].data
|
||||||
user.donate_url = form["donate_url"].data
|
user.donate_url = form["donate_url"].data
|
||||||
|
|
||||||
if user.checkPerm(current_user, Permission.CHANGE_RANK):
|
|
||||||
newRank = form["rank"].data
|
|
||||||
if current_user.rank.atLeast(newRank):
|
|
||||||
if newRank != user.rank:
|
|
||||||
user.rank = form["rank"].data
|
|
||||||
msg = "Set rank of {} to {}".format(user.display_name, user.rank.getTitle())
|
|
||||||
addAuditLog(AuditSeverity.MODERATION, current_user, msg, url_for("users.profile", username=username))
|
|
||||||
else:
|
|
||||||
flash("Can't promote a user to a rank higher than yourself!", "danger")
|
|
||||||
|
|
||||||
# Save user_profile
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return redirect(url_for("users.profile", username=username))
|
return redirect(url_for("users.profile", username=username))
|
||||||
|
@ -95,8 +70,6 @@ def profile_edit(username):
|
||||||
return render_template("users/profile_edit.html", user=user, form=form, tabs=get_setting_tabs(user), current_tab="edit_profile")
|
return render_template("users/profile_edit.html", user=user, form=form, tabs=get_setting_tabs(user), current_tab="edit_profile")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def make_settings_form():
|
def make_settings_form():
|
||||||
attrs = {
|
attrs = {
|
||||||
"email": StringField("Email", [Optional(), Email()]),
|
"email": StringField("Email", [Optional(), Email()]),
|
||||||
|
@ -193,7 +166,16 @@ def email_notifications(username=None):
|
||||||
tabs=get_setting_tabs(user), current_tab="notifications")
|
tabs=get_setting_tabs(user), current_tab="notifications")
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/users/<username>/settings/account/")
|
class UserAccountForm(FlaskForm):
|
||||||
|
display_name = StringField("Display name", [Optional(), Length(2, 100)])
|
||||||
|
forums_username = StringField("Forums Username", [Optional(), Length(2, 50)])
|
||||||
|
github_username = StringField("GitHub Username", [Optional(), Length(2, 50)])
|
||||||
|
rank = SelectField("Rank", [Optional()], choices=UserRank.choices(), coerce=UserRank.coerce,
|
||||||
|
default=UserRank.NEW_MEMBER)
|
||||||
|
submit = SubmitField("Save")
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/users/<username>/settings/account/", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def account(username):
|
def account(username):
|
||||||
user : User = User.query.filter_by(username=username).first()
|
user : User = User.query.filter_by(username=username).first()
|
||||||
|
@ -204,6 +186,35 @@ def account(username):
|
||||||
flash("Permission denied", "danger")
|
flash("Permission denied", "danger")
|
||||||
return redirect(url_for("users.profile", username=username))
|
return redirect(url_for("users.profile", username=username))
|
||||||
|
|
||||||
|
can_edit_account_settings = user.checkPerm(current_user, Permission.CHANGE_USERNAMES) or \
|
||||||
|
user.checkPerm(current_user, Permission.CHANGE_RANK)
|
||||||
|
form = UserAccountForm(obj=user) if can_edit_account_settings else None
|
||||||
|
if form and form.validate_on_submit():
|
||||||
|
severity = AuditSeverity.NORMAL if current_user == user else AuditSeverity.MODERATION
|
||||||
|
addAuditLog(severity, current_user, "Edited {}'s profile".format(user.display_name),
|
||||||
|
url_for("users.profile", username=username))
|
||||||
|
|
||||||
|
# Copy form fields to user_profile fields
|
||||||
|
if user.checkPerm(current_user, Permission.CHANGE_USERNAMES):
|
||||||
|
user.display_name = form.display_name.data
|
||||||
|
user.forums_username = nonEmptyOrNone(form.forums_username.data)
|
||||||
|
user.github_username = nonEmptyOrNone(form.github_username.data)
|
||||||
|
|
||||||
|
if user.checkPerm(current_user, Permission.CHANGE_RANK):
|
||||||
|
newRank = form["rank"].data
|
||||||
|
if current_user.rank.atLeast(newRank):
|
||||||
|
if newRank != user.rank:
|
||||||
|
user.rank = form["rank"].data
|
||||||
|
msg = "Set rank of {} to {}".format(user.display_name, user.rank.getTitle())
|
||||||
|
addAuditLog(AuditSeverity.MODERATION, current_user, msg,
|
||||||
|
url_for("users.profile", username=username))
|
||||||
|
else:
|
||||||
|
flash("Can't promote a user to a rank higher than yourself!", "danger")
|
||||||
|
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
return redirect(url_for("users.account", username=username))
|
||||||
|
|
||||||
return render_template("users/account.html", user=user, form=form, tabs=get_setting_tabs(user), current_tab="account")
|
return render_template("users/account.html", user=user, form=form, tabs=get_setting_tabs(user), current_tab="account")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,32 @@
|
||||||
{% block pane %}
|
{% block pane %}
|
||||||
<h2 class="mt-0">{{ _("Account and Security") }}</h2>
|
<h2 class="mt-0">{{ _("Account and Security") }}</h2>
|
||||||
|
|
||||||
|
{% if form %}
|
||||||
|
<h3>
|
||||||
|
{{ _("Edit Account") }}
|
||||||
|
<small class="fas fa-user-shield ml-2 text-muted"></small>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
{% from "macros/forms.html" import render_field, render_field_prefix, render_submit_field %}
|
||||||
|
<form action="" method="POST" class="form" role="form">
|
||||||
|
{{ form.hidden_tag() }}
|
||||||
|
|
||||||
|
{% if user.checkPerm(current_user, "CHANGE_USERNAMES") %}
|
||||||
|
{{ render_field(form.display_name, tabindex=230) }}
|
||||||
|
{{ render_field(form.forums_username, tabindex=230) }}
|
||||||
|
{{ render_field_prefix(form.github_username, tabindex=230) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if user.checkPerm(current_user, "CHANGE_RANK") %}
|
||||||
|
{{ render_field(form.rank, tabindex=250) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{{ render_submit_field(form.submit, tabindex=280) }}
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<h3>{{ _("Password") }}</h3>
|
<h3>{{ _("Password") }}</h3>
|
||||||
{% if user == current_user %}
|
{% if user == current_user %}
|
||||||
{% if user.password %}
|
{% if user.password %}
|
||||||
|
|
|
@ -48,21 +48,11 @@
|
||||||
<form action="" method="POST" class="form" role="form">
|
<form action="" method="POST" class="form" role="form">
|
||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
|
|
||||||
{% if user.checkPerm(current_user, "CHANGE_USERNAMES") %}
|
|
||||||
{{ render_field(form.display_name, tabindex=230) }}
|
|
||||||
{{ render_field(form.forums_username, tabindex=230) }}
|
|
||||||
{{ render_field_prefix(form.github_username, tabindex=230) }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if user.checkPerm(current_user, "CHANGE_PROFILE_URLS") %}
|
{% if user.checkPerm(current_user, "CHANGE_PROFILE_URLS") %}
|
||||||
{{ render_field(form.website_url, tabindex=232) }}
|
{{ render_field(form.website_url, tabindex=232) }}
|
||||||
{{ render_field(form.donate_url, tabindex=233) }}
|
{{ render_field(form.donate_url, tabindex=233) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if user.checkPerm(current_user, "CHANGE_RANK") %}
|
|
||||||
{{ render_field(form.rank, tabindex=250) }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{{ render_submit_field(form.submit, tabindex=280) }}
|
{{ render_submit_field(form.submit, tabindex=280) }}
|
||||||
</p>
|
</p>
|
||||||
|
|
Loading…
Reference in New Issue