Allow editing users' email address via /u/

Also reloads the user info after a succesful edit.
This commit is contained in:
Sybren A. Stüvel 2017-06-29 10:55:50 +02:00
parent 08cb2b8438
commit e061d6c29d
5 changed files with 24 additions and 3 deletions

View File

@ -2,6 +2,7 @@ from flask_login import current_user
from flask_wtf import Form from flask_wtf import Form
from pillar.web import system_util from pillar.web import system_util
from pillarsdk.users import User from pillarsdk.users import User
from wtforms import BooleanField from wtforms import BooleanField
from wtforms import PasswordField from wtforms import PasswordField
from wtforms import RadioField from wtforms import RadioField
@ -10,6 +11,7 @@ from wtforms import StringField
from wtforms.validators import DataRequired from wtforms.validators import DataRequired
from wtforms.validators import Length from wtforms.validators import Length
from wtforms.validators import Regexp from wtforms.validators import Regexp
import wtforms.validators as wtvalid
class UserLoginForm(Form): class UserLoginForm(Form):
@ -75,3 +77,7 @@ class RolesField(SelectMultipleField):
class UserEditForm(Form): class UserEditForm(Form):
roles = RolesField('Roles') roles = RolesField('Roles')
email = StringField(
validators=[wtvalid.DataRequired(), wtvalid.Email()],
description='Make sure this matches the Store and Blender ID email address.'
)

View File

@ -227,6 +227,7 @@ def users_edit(user_id):
_users_edit(form, user, api) _users_edit(form, user, api)
else: else:
form.roles.data = user.roles form.roles.data = user.roles
form.email.data = user.email
return render_template('users/edit_embed.html', return render_template('users/edit_embed.html',
user=user, user=user,
form=form) form=form)
@ -255,6 +256,7 @@ def _users_edit(form, user, api):
user.roles = list((current_user_roles - revoked_roles).union(granted_roles)) user.roles = list((current_user_roles - revoked_roles).union(granted_roles))
user.groups = list((current_user_groups - revoked_groups).union(granted_groups)) user.groups = list((current_user_groups - revoked_groups).union(granted_groups))
user.email = form.email.data
user.update(api=api) user.update(api=api)

View File

@ -51,7 +51,7 @@
li {{ error }} li {{ error }}
| {% endfor %} | {% endfor %}
| {% endif %} | {% endif %}
span.field-description {{ field.description }}
| {% endif %} | {% endif %}
@ -77,7 +77,11 @@ script(type="text/javascript").
//- console.log($(this).serialize()); //- console.log($(this).serialize());
$.post($(this).attr('action'), $(this).serialize()) $.post($(this).attr('action'), $(this).serialize())
.done(function(data){ .done(function(data){
$('#user-edit-notification').addClass('success').html('Success!'); // This function is defined in index.jade.
displayUser('{{ user._id }}')
.done(function() {
$('#user-edit-notification').addClass('success').html('Success!');
});
}) })
.fail(function(data){ .fail(function(data){
$('#user-edit-notification').addClass('fail').html('Houston!'); $('#user-edit-notification').addClass('fail').html('Houston!');

View File

@ -1,5 +1,12 @@
| {% extends 'layout.html' %} | {% extends 'layout.html' %}
| {% block page_title %}Users{% endblock %} | {% block page_title %}Users{% endblock %}
| {% block head %}
style.
span.field-description {
font-size: smaller;
color: #999;
}
| {% endblock %}
| {% block body %} | {% block body %}
@ -96,9 +103,10 @@ script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.select
script(type="text/javascript"). script(type="text/javascript").
// This function is also used in edit_embed.jade.
function displayUser(userId) { function displayUser(userId) {
var url = '/u/' + userId + '/edit?embed=1'; var url = '/u/' + userId + '/edit?embed=1';
$.get(url, function(dataHtml){ return $.get(url, function(dataHtml){
$('#search-hit-container') $('#search-hit-container')
.html(dataHtml) .html(dataHtml)
.show(); .show();

View File

@ -62,6 +62,7 @@ class UserAdminTest(AbstractPillarTest):
form = UserEditForm() form = UserEditForm()
form.roles.data = roles form.roles.data = roles
form.email.data = user.email
pillar.web.users.routes._users_edit(form, user, api) pillar.web.users.routes._users_edit(form, user, api)
edit_user(['subscriber', 'demo']) edit_user(['subscriber', 'demo'])