Extend generic DeleteView for image DeleteView

pull/10072/head
Sage Abdullah 2023-02-16 17:24:37 +00:00
rodzic 9a0aebba9c
commit e3d2e93fb2
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
4 zmienionych plików z 45 dodań i 50 usunięć
wagtail/images
templates/wagtailimages/images

Wyświetl plik

@ -7,7 +7,7 @@ urlpatterns = [
path("", images.IndexView.as_view(), name="index"),
path("results/", images.ListingResultsView.as_view(), name="listing_results"),
path("<int:image_id>/", images.edit, name="edit"),
path("<int:image_id>/delete/", images.delete, name="delete"),
path("<int:image_id>/delete/", images.DeleteView.as_view(), name="delete"),
path("<int:image_id>/generate_url/", images.url_generator, name="url_generator"),
path(
"<int:image_id>/generate_url/<str:filter_spec>/",

Wyświetl plik

@ -1,33 +1,22 @@
{% extends "wagtailadmin/base.html" %}
{% extends "wagtailadmin/generic/base.html" %}
{% load wagtailimages_tags i18n wagtailadmin_tags %}
{% block titletag %}{% trans "Delete image" %}{% endblock %}
{% block content %}
{% trans "Delete image" as del_str %}
{% include "wagtailadmin/shared/header.html" with title=del_str icon="image" %}
<div class="row row-flush nice-padding">
{% block main_content %}
<div class="row row-flush">
<div class="col6">
{% image image max-800x600 %}
</div>
<div class="col6">
<div class="usagecount">
<a href="{{ image.usage_url }}">{% blocktrans trimmed count usage_count=image.get_usage.count %}Used {{ usage_count }} time{% plural %}Used {{ usage_count }} times{% endblocktrans %}</a>
</div>
<p>
{# This message will only appear in the singular, but we specify a plural so it can share the translation string with confirm_bulk_delete.html #}
{% blocktrans trimmed count counter=1 %}
Are you sure you want to delete this image?
{% plural %}
Are you sure you want to delete these images?
{% endblocktrans %}
</p>
<form action="{% url 'wagtailimages:delete' image.id %}" method="POST">
{% csrf_token %}
<input type="hidden" value="{{ next }}" name="next">
<input type="submit" value="{% trans 'Yes, delete' %}" class="button serious" />
<a href="{% url 'wagtailimages:index' %}" class="button button-secondary">{% trans "No, don't delete" %}</a>
</form>
{% include "wagtailadmin/shared/usage_summary.html" %}
{{ view.confirmation_message }}
{% if not is_protected %}
<form action="{{ view.get_delete_url }}" method="POST">
{% csrf_token %}
<input type="hidden" value="{{ view.get_success_url }}" name="next">
<input type="submit" value="{% trans 'Yes, delete' %}" class="button serious" />
<a href="{{ view.get_success_url }}" class="button button-secondary">{% trans "No, don't delete" %}</a>
</form>
{% endif %}
</div>
</div>
{% endblock %}

Wyświetl plik

@ -1166,7 +1166,7 @@ class TestImageDeleteView(WagtailTestUtils, TestCase):
response = self.get()
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "wagtailimages/images/confirm_delete.html")
self.assertContains(response, "Used 0 times")
self.assertContains(response, "This image is referenced 0 times")
expected_url = "/admin/images/usage/%d/" % self.image.id
self.assertContains(response, expected_url)

Wyświetl plik

@ -11,6 +11,7 @@ from django.urls.exceptions import NoReverseMatch
from django.utils.decorators import method_decorator
from django.utils.http import urlencode
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy, ngettext
from django.views.generic import TemplateView
from wagtail.admin import messages
@ -349,33 +350,37 @@ def preview(request, image_id, filter_spec):
)
@permission_checker.require("delete")
def delete(request, image_id):
image = get_object_or_404(get_image_model(), id=image_id)
class DeleteView(generic.DeleteView):
model = get_image_model()
pk_url_kwarg = "image_id"
permission_policy = permission_policy
permission_required = "delete"
header_icon = "image"
template_name = "wagtailimages/images/confirm_delete.html"
usage_url_name = "wagtailimages:image_usage"
delete_url_name = "wagtailimages:delete"
index_url_name = "wagtailimages:index"
page_title = gettext_lazy("Delete image")
if not permission_policy.user_has_permission_for_instance(
request.user, "delete", image
):
raise PermissionDenied
next_url = get_valid_next_url_from_request(request)
if request.method == "POST":
image.delete()
messages.success(
request,
_("Image '%(image_title)s' deleted.") % {"image_title": image.title},
def user_has_permission(self, permission):
return self.permission_policy.user_has_permission_for_instance(
self.request.user, permission, self.object
)
return redirect(next_url) if next_url else redirect("wagtailimages:index")
return TemplateResponse(
request,
"wagtailimages/images/confirm_delete.html",
{
"image": image,
"next": next_url,
},
)
@property
def confirmation_message(self):
# This message will only appear in the singular, but we specify a plural
# so it can share the translation string with confirm_bulk_delete.html
return ngettext(
"Are you sure you want to delete this image?",
"Are you sure you want to delete these images?",
1,
)
def get_success_message(self):
return _("Image '%(image_title)s' deleted.") % {
"image_title": self.object.title
}
@permission_checker.require("add")
@ -419,6 +424,7 @@ class UsageView(generic.UsageView):
pk_url_kwarg = "image_id"
permission_policy = permission_policy
permission_required = "change"
header_icon = "image"
def user_has_permission(self, permission):
return self.permission_policy.user_has_permission_for_instance(