Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the "disable" label in place of "delete" in User admin #245 #247

Merged
merged 1 commit into from
Jan 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions dje/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from django.contrib.auth.views import LogoutView
from django.contrib.contenttypes.admin import GenericTabularInline
from django.contrib.contenttypes.models import ContentType
from django.contrib.messages.api import get_messages
from django.core import checks
from django.core.exceptions import FieldDoesNotExist
from django.core.exceptions import FieldError
Expand Down Expand Up @@ -1394,6 +1395,7 @@ class DejacodeUserAdmin(
add_form = DejacodeUserCreationForm
change_list_template = "admin/change_list_extended.html"
add_form_template = "admin/dje/dejacode_user/change_form.html"
delete_confirmation_template = "admin/dje/dejacode_user/delete_confirmation.html"
change_form_template = add_form_template
activity_log = True
readonly_fields = ("last_login", "last_api_access", "date_joined")
Expand Down Expand Up @@ -1506,6 +1508,30 @@ def log_addition(self, request, object, change_message=None):
self.message_user(request, self.activation_email_msg, messages.SUCCESS)
return super().log_addition(request, object, change_message)

def changeform_view(self, request, object_id=None, form_url="", extra_context=None):
extra_context = extra_context or {}
extra_context["delete_button_label"] = _("Disable")
return super().changeform_view(request, object_id, form_url, extra_context)

def response_delete(self, request, obj_display, obj_id):
"""Use the "disabled" label in place of "deleted"."""
response = super().response_delete(request, obj_display, obj_id)

updated_messages = []
# Iterate over messages and modify the one you want
for message in get_messages(request):
if "deleted" in message.message:
new_message = message.message.replace("deleted", "disabled")
updated_messages.append(new_message)
else:
updated_messages.append(message.message)

# Clear the existing messages and add updated ones
for msg in updated_messages:
messages.success(request, msg)

return response

def delete_model(self, request, obj):
"""
Instead of deleting the User, makes it inactive.
Expand Down
29 changes: 29 additions & 0 deletions dje/templates/admin/dje/dejacode_user/delete_confirmation.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{% extends 'admin/delete_confirmation.html' %}

{% load i18n admin_urls %}

{% block content %}
<div class="g-d-c">
{% if perms_lacking or protected %}
<div class="grp-group">
<h2>You cannot disable this user.</h2>
</div>
{% else %}
<div class="grp-group">
<h2>{% blocktrans with escaped_object=object %}Are you sure you want to disable the {{ object_name }} "{{ escaped_object }}"?{% endblocktrans %}</h2>
</div>
<form action="" method="post" novalidate>{% csrf_token %}
<div class="grp-module grp-submit-row grp-fixed-footer">
<ul>
{% url opts|admin_urlname:'change' object.pk|admin_urlquote as object_url %}
<li class="grp-float-left"><a href="{% add_preserved_filters object_url %}" class="grp-button grp-cancel-link">{% trans "No, take me back" %}</a></li>
<li><input type="submit" value="{% trans "Yes, I’m sure" %}" class="grp-button grp-default" /></li>
</ul>
<input type="hidden" name="post" value="yes" />
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
</div>
</form>
{% endif %}
</div>
{% endblock %}
12 changes: 10 additions & 2 deletions dje/templates/admin/submit_line.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,19 @@
<footer class="grp-module grp-submit-row grp-fixed-footer">
<header style="display:none"><h1>Submit Options</h1></header>
<ul>
{# DJE CUSTOM #}
{% if show_delete_link %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<li class="grp-float-left"><a href="{% add_preserved_filters delete_url %}" class="grp-button grp-delete-link">{% trans "Delete" %}</a></li>
<li class="grp-float-left">
<a href="{% add_preserved_filters delete_url %}" class="grp-button grp-delete-link">
{% if delete_button_label %}
{% trans delete_button_label %}
{% else %}
{% trans "Delete" %}
{% endif %}
</a>
</li>
{% endif %}
{# DJE CUSTOM: Add #}
<li class="grp-float-left">
{% if not is_popup %}
{% url opts|admin_urlname:'changelist' as changelist_url %}
Expand Down
10 changes: 10 additions & 0 deletions dje/tests/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,16 @@ def test_user_admin_changeform_group_field_includes_link_to_details(self):
response = self.client.get(url)
self.assertContains(response, reverse("admin:auth_group_permission_details"))

def test_user_admin_changeform_submit_row_delete_button_label(self):
self.client.login(username="nexb_user", password="secret")
url = reverse("admin:dje_dejacodeuser_change", args=[self.other_user.pk])
response = self.client.get(url)
expected = (
f'<a href="/admin/dje/dejacodeuser/{self.other_user.pk}/delete/" '
f'class="grp-button grp-delete-link">Disable</a>'
)
self.assertContains(response, expected, html=True)

def test_user_admin_form_scope_homepage_layout_choices(self):
self.client.login(username=self.nexb_user.username, password="secret")
url = reverse("admin:dje_dejacodeuser_change", args=[self.nexb_user.pk])
Expand Down