diff --git a/pillar/web/users/forms.py b/pillar/web/users/forms.py index e6efe659..28910429 100644 --- a/pillar/web/users/forms.py +++ b/pillar/web/users/forms.py @@ -2,6 +2,7 @@ from flask_login import current_user from flask_wtf import Form from pillar.web import system_util from pillarsdk.users import User + from wtforms import BooleanField from wtforms import PasswordField from wtforms import RadioField @@ -10,6 +11,7 @@ from wtforms import StringField from wtforms.validators import DataRequired from wtforms.validators import Length from wtforms.validators import Regexp +import wtforms.validators as wtvalid class UserLoginForm(Form): @@ -75,3 +77,7 @@ class RolesField(SelectMultipleField): class UserEditForm(Form): roles = RolesField('Roles') + email = StringField( + validators=[wtvalid.DataRequired(), wtvalid.Email()], + description='Make sure this matches the Store and Blender ID email address.' + ) diff --git a/pillar/web/users/routes.py b/pillar/web/users/routes.py index 3509c5f3..517fa910 100644 --- a/pillar/web/users/routes.py +++ b/pillar/web/users/routes.py @@ -227,6 +227,7 @@ def users_edit(user_id): _users_edit(form, user, api) else: form.roles.data = user.roles + form.email.data = user.email return render_template('users/edit_embed.html', user=user, form=form) @@ -255,6 +256,7 @@ def _users_edit(form, user, api): user.roles = list((current_user_roles - revoked_roles).union(granted_roles)) user.groups = list((current_user_groups - revoked_groups).union(granted_groups)) + user.email = form.email.data user.update(api=api) diff --git a/src/templates/users/edit_embed.jade b/src/templates/users/edit_embed.jade index 813b6850..fd6afbdc 100644 --- a/src/templates/users/edit_embed.jade +++ b/src/templates/users/edit_embed.jade @@ -51,7 +51,7 @@ li {{ error }} | {% endfor %} | {% endif %} - + span.field-description {{ field.description }} | {% endif %} @@ -77,7 +77,11 @@ script(type="text/javascript"). //- console.log($(this).serialize()); $.post($(this).attr('action'), $(this).serialize()) .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){ $('#user-edit-notification').addClass('fail').html('Houston!'); diff --git a/src/templates/users/index.jade b/src/templates/users/index.jade index a0c8a157..d6096ab7 100644 --- a/src/templates/users/index.jade +++ b/src/templates/users/index.jade @@ -1,5 +1,12 @@ | {% extends 'layout.html' %} | {% block page_title %}Users{% endblock %} +| {% block head %} +style. + span.field-description { + font-size: smaller; + color: #999; + } +| {% endblock %} | {% block body %} @@ -96,9 +103,10 @@ script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.select script(type="text/javascript"). + // This function is also used in edit_embed.jade. function displayUser(userId) { var url = '/u/' + userId + '/edit?embed=1'; - $.get(url, function(dataHtml){ + return $.get(url, function(dataHtml){ $('#search-hit-container') .html(dataHtml) .show(); diff --git a/tests/test_web/test_user_admin.py b/tests/test_web/test_user_admin.py index 46f01a3f..5bccbdf1 100644 --- a/tests/test_web/test_user_admin.py +++ b/tests/test_web/test_user_admin.py @@ -62,6 +62,7 @@ class UserAdminTest(AbstractPillarTest): form = UserEditForm() form.roles.data = roles + form.email.data = user.email pillar.web.users.routes._users_edit(form, user, api) edit_user(['subscriber', 'demo'])