mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 00:07:02 -04:00
Merge pull request #3475 from alphagov/request-invite
Allow invite form to be pre-populated with an existing user
This commit is contained in:
@@ -49,8 +49,9 @@ def manage_users(service_id):
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/users/invite", methods=['GET', 'POST'])
|
||||
@main.route("/services/<uuid:service_id>/users/invite/<uuid:user_id>", methods=['GET', 'POST'])
|
||||
@user_has_permissions('manage_service')
|
||||
def invite_user(service_id):
|
||||
def invite_user(service_id, user_id=None):
|
||||
|
||||
if current_service.has_permission('broadcast'):
|
||||
form_class = BroadcastInviteUserForm
|
||||
@@ -63,6 +64,26 @@ def invite_user(service_id):
|
||||
folder_permissions=[f['id'] for f in current_service.all_template_folders]
|
||||
)
|
||||
|
||||
if user_id:
|
||||
user_to_invite = User.from_id(user_id)
|
||||
if user_to_invite.belongs_to_service(current_service.id):
|
||||
return render_template(
|
||||
'views/user-already-team-member.html',
|
||||
user_to_invite=user_to_invite,
|
||||
)
|
||||
if current_service.invite_pending_for(user_to_invite.email_address):
|
||||
return render_template(
|
||||
'views/user-already-invited.html',
|
||||
user_to_invite=user_to_invite,
|
||||
)
|
||||
if not user_to_invite.default_organisation:
|
||||
abort(403)
|
||||
if user_to_invite.default_organisation.id != current_service.organisation_id:
|
||||
abort(403)
|
||||
form.email_address.data = user_to_invite.email_address
|
||||
else:
|
||||
user_to_invite = None
|
||||
|
||||
service_has_email_auth = current_service.has_permission('email_auth')
|
||||
if not service_has_email_auth:
|
||||
form.login_authentication.data = 'sms_auth'
|
||||
@@ -86,6 +107,7 @@ def invite_user(service_id):
|
||||
form=form,
|
||||
service_has_email_auth=service_has_email_auth,
|
||||
mobile_number=True,
|
||||
user_to_invite=user_to_invite,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -160,6 +160,12 @@ class Service(JSONModel):
|
||||
def invited_users(self):
|
||||
return InvitedUsers(self.id)
|
||||
|
||||
def invite_pending_for(self, email_address):
|
||||
return email_address.lower() in (
|
||||
invited_user.email_address.lower()
|
||||
for invited_user in self.invited_users
|
||||
)
|
||||
|
||||
@cached_property
|
||||
def active_users(self):
|
||||
return Users(self.id)
|
||||
|
||||
@@ -10,18 +10,24 @@
|
||||
{% block maincolumn_content %}
|
||||
|
||||
{{ page_header(
|
||||
'Invite a team member',
|
||||
'Invite {}'.format(user_to_invite.name if user_to_invite else 'a team member') ,
|
||||
back_link=url_for('main.manage_users', service_id=current_service.id)
|
||||
) }}
|
||||
|
||||
{% call form_wrapper() %}
|
||||
|
||||
{{ form.email_address(
|
||||
param_extensions={
|
||||
"classes": "govuk-!-width-full"
|
||||
},
|
||||
error_message_with_html=True
|
||||
) }}
|
||||
{% if user_to_invite %}
|
||||
<p class="govuk-body">
|
||||
{{ user_to_invite.email_address }}
|
||||
</p>
|
||||
{% else %}
|
||||
{{ form.email_address(
|
||||
param_extensions={
|
||||
"classes": "govuk-!-width-full"
|
||||
},
|
||||
error_message_with_html=True
|
||||
) }}
|
||||
{% endif %}
|
||||
|
||||
{% include 'views/manage-users/permissions.html' %}
|
||||
|
||||
|
||||
20
app/templates/views/user-already-invited.html
Normal file
20
app/templates/views/user-already-invited.html
Normal file
@@ -0,0 +1,20 @@
|
||||
{% extends "withnav_template.html" %}
|
||||
{% from "components/page-header.html" import page_header %}
|
||||
|
||||
{% block service_page_title %}
|
||||
This person has already received an invite
|
||||
{% endblock %}
|
||||
|
||||
{% block maincolumn_content %}
|
||||
|
||||
{{ page_header(
|
||||
'This person has already received an invite',
|
||||
back_link=url_for('main.manage_users', service_id=current_service.id)
|
||||
) }}
|
||||
|
||||
<p class="govuk-body">
|
||||
{{ user_to_invite.name }} has not accepted their invitation to
|
||||
‘{{ current_service.name }}’ yet. You do not need to do anything.
|
||||
</p>
|
||||
|
||||
{% endblock %}
|
||||
19
app/templates/views/user-already-team-member.html
Normal file
19
app/templates/views/user-already-team-member.html
Normal file
@@ -0,0 +1,19 @@
|
||||
{% extends "withnav_template.html" %}
|
||||
{% from "components/page-header.html" import page_header %}
|
||||
|
||||
{% block service_page_title %}
|
||||
This person is already a team member
|
||||
{% endblock %}
|
||||
|
||||
{% block maincolumn_content %}
|
||||
|
||||
{{ page_header(
|
||||
'This person is already a team member',
|
||||
back_link=url_for('main.manage_users', service_id=current_service.id)
|
||||
) }}
|
||||
|
||||
<p class="govuk-body">
|
||||
{{ user_to_invite.name }} is already member of ‘{{ current_service.name }}’.
|
||||
</p>
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user