Add logic for self deletion

This commit is contained in:
zandercymatics 2024-01-16 10:56:56 -07:00
parent 0618a72c11
commit 40e91ead1f
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
3 changed files with 69 additions and 47 deletions

View file

@ -26,18 +26,21 @@ a.usa-button {
text-decoration: none; text-decoration: none;
} }
a.usa-button.disabled-link { a.usa-button.disabled-link,
a.usa-button--unstyled.disabled-link {
background-color: #ccc !important; background-color: #ccc !important;
color: #454545 !important color: #454545 !important
} }
a.usa-button.disabled-link:hover { a.usa-button.disabled-link:hover,
a.usa-button--unstyled.disabled-link {
background-color: #ccc !important; background-color: #ccc !important;
cursor: not-allowed !important; cursor: not-allowed !important;
color: #454545 !important color: #454545 !important
} }
a.usa-button.disabled-link:focus { a.usa-button.disabled-link:focus,
a.usa-button--unstyled.disabled-link {
background-color: #ccc !important; background-color: #ccc !important;
cursor: not-allowed !important; cursor: not-allowed !important;
outline: none !important; outline: none !important;

View file

@ -16,10 +16,8 @@
<li>There is no limit to the number of domain managers you can add.</li> <li>There is no limit to the number of domain managers you can add.</li>
<li>After adding a domain manager, an email invitation will be sent to that user with <li>After adding a domain manager, an email invitation will be sent to that user with
instructions on how to set up an account.</li> instructions on how to set up an account.</li>
<li>To remove a domain manager, <a href="{% public_site_url 'contact/' %}"
target="_blank" rel="noopener noreferrer" class="usa-link">contact us</a> for
assistance.</li>
<li>All domain managers must keep their contact information updated and be responsive if contacted by the .gov team.</li> <li>All domain managers must keep their contact information updated and be responsive if contacted by the .gov team.</li>
<li>Domains must have at least one domain manager. You cant remove yourself as a domain manager if youre the only one assigned to this domain. Add another domain manager before you remove yourself from this domain.</li>
</ul> </ul>
{% if domain.permissions %} {% if domain.permissions %}
@ -31,9 +29,7 @@
<tr> <tr>
<th data-sortable scope="col" role="columnheader">Email</th> <th data-sortable scope="col" role="columnheader">Email</th>
<th data-sortable scope="col" role="columnheader">Role</th> <th data-sortable scope="col" role="columnheader">Role</th>
{% if can_delete_users %} <th scope="col" role="columnheader"><span class="sr-only">Action</span></th>
<th scope="col" role="columnheader"><span class="sr-only">Action</span></th>
{% endif %}
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -43,49 +39,66 @@
{{ permission.user.email }} {{ permission.user.email }}
</th> </th>
<td data-label="Role">{{ permission.role|title }}</td> <td data-label="Role">{{ permission.role|title }}</td>
<td class="shift-action-button">
{% if can_delete_users %} {% if can_delete_users %}
<td class="shift-action-button"> <a
<a id="button-toggle-user-alert-{{ forloop.counter }}"
id="button-toggle-user-alert-{{ forloop.counter }}" href="#toggle-user-alert-{{ forloop.counter }}"
href="#toggle-user-alert-{{ forloop.counter }}" class="usa-button--unstyled text-no-underline"
class="usa-button--unstyled text-no-underline" aria-controls="toggle-user-alert-{{ forloop.counter }}"
aria-controls="toggle-user-alert-{{ forloop.counter }}" data-open-modal
data-open-modal >
Remove
</a>
{# Display a custom message if the user is trying to delete themselves #}
{% if permission.user.email == current_user_email %}
<div
class="usa-modal usa-modal--lg"
id="toggle-user-alert-{{ forloop.counter }}"
aria-labelledby="Are you sure you want to continue?"
aria-describedby="You will be removed from this domain"
data-force-action
> >
Remove <form method="POST" action="{% url "domain-user-delete" pk=domain.id user_pk=permission.user.id %}">
</a> {% with domain_name=domain.name|force_escape %}
{# Display a custom message if the user is trying to delete themselves #} {% include 'includes/modal.html' with modal_heading="Are you sure you want to remove yourself as a domain manager for "|add:domain_name|add:"?"|safe modal_description="You will no longer be able to manage the domain <strong>"|add:domain_name|add:"</strong>."|safe modal_button=modal_button_self|safe %}
{% if permission.user.email == current_user_email %} {% endwith %}
<div </form>
</div>
{% else %}
<div
class="usa-modal usa-modal--lg" class="usa-modal usa-modal--lg"
id="toggle-user-alert-{{ forloop.counter }}" id="toggle-user-alert-{{ forloop.counter }}"
aria-labelledby="Are you sure you want to continue?" aria-labelledby="Are you sure you want to continue?"
aria-describedby="You will be removed from this domain" aria-describedby="{{ permission.user.email }} will be removed"
data-force-action data-force-action
> >
<form method="POST" action="{% url "domain-user-delete" pk=domain.id user_pk=permission.user.id %}"> <form method="POST" action="{% url "domain-user-delete" pk=domain.id user_pk=permission.user.id %}">
{% with domain_name=domain.name|force_escape %} {% with email=permission.user.email|default:permission.user|force_escape domain_name=domain.name|force_escape %}
{% include 'includes/modal.html' with modal_heading="Are you sure you want to remove yourself as a domain manager for "|add:domain_name|add:"?"|safe modal_description="You will no longer be able to manage the domain <strong>"|add:domain_name|add:"</strong>."|safe modal_button=modal_button_self|safe %} {% include 'includes/modal.html' with modal_heading="Are you sure you want to remove &lt;"|add:email|add:"&gt;?"|safe modal_description="<strong>&lt;"|add:email|add:"&gt;</strong> will no longer be able to manage the domain <strong>"|add:domain_name|add:"</strong>."|safe modal_button=modal_button|safe %}
{% endwith %} {% endwith %}
</form> </form>
</div> </div>
{% else %} {% endif %}
<div {% else %}
class="usa-modal usa-modal--lg" <a
id="toggle-user-alert-{{ forloop.counter }}" class="usa-button--unstyled disabled-link usa-tooltip text-no-underline "
aria-labelledby="Are you sure you want to continue?" data-position="top"
aria-describedby="{{ permission.user.email }} will be removed" title="Domains must have at least one domain manager"
data-force-action aria-disabled="true"
> data-tooltip="true"
<form method="POST" action="{% url "domain-user-delete" pk=domain.id user_pk=permission.user.id %}"> >
{% with email=permission.user.email|force_escape domain_name=domain.name|force_escape %} Remove
{% include 'includes/modal.html' with modal_heading="Are you sure you want to remove &lt;"|add:email|add:"&gt;?"|safe modal_description="<strong>&lt;"|add:email|add:"&gt;</strong> will no longer be able to manage the domain <strong>"|add:domain_name|add:"</strong>."|safe modal_button=modal_button|safe %} </a>
{% endwith %}
</form>
</div>
{% endif %}
</td>
{% endif %} {% endif %}
</td>
{% comment %}
usa-tooltip disabled-link"
data-position="right"
title="Coming in 2024"
aria-disabled="true"
data-tooltip="true"
{% endcomment %}
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View file

@ -820,13 +820,18 @@ class DomainDeleteUserView(UserDomainRolePermissionDeleteView):
return UserDomainRole.objects.get(domain=domain_id, user=user_id) return UserDomainRole.objects.get(domain=domain_id, user=user_id)
def get_success_url(self): def get_success_url(self):
"""Refreshes the page after a delete is successful"""
return reverse("domain-users", kwargs={"pk": self.object.domain.id}) return reverse("domain-users", kwargs={"pk": self.object.domain.id})
def get_success_message(self, delete_self = False): def get_success_message(self, delete_self = False):
"""Returns confirmation content for the deletion event """
email_or_name = self.object.user.email
if email_or_name is None:
email_or_name = self.object.user
if delete_self: if delete_self:
message = f"You are no longer managing the domain {self.object.domain}." message = f"You are no longer managing the domain {self.object.domain}."
else: else:
message = f"Removed {self.object.user.email} as a manager for this domain." message = f"Removed {email_or_name} as a manager for this domain."
return message return message
def form_valid(self, form): def form_valid(self, form):
@ -842,10 +847,11 @@ class DomainDeleteUserView(UserDomainRolePermissionDeleteView):
return redirect(self.get_success_url()) return redirect(self.get_success_url())
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
"""Custom post implementation to redirect to home in the event that the user deletes themselves"""
response = super().post(request, *args, **kwargs) response = super().post(request, *args, **kwargs)
# If the user is deleting themselves, redirect to home # If the user is deleting themselves, redirect to home
if self.request.user.email == self.object.user.email: if self.request.user == self.object.user:
return redirect(reverse("home")) return redirect(reverse("home"))
return response return response