From f3637ad857fdc8fda404150f0b97e89c9dfee4ee Mon Sep 17 00:00:00 2001 From: Sage Abdullah Date: Wed, 15 Feb 2023 17:48:31 +0000 Subject: [PATCH] Remove unused snippets delete-multiple view --- .../snippets/confirm_delete.html | 40 ++------ wagtail/snippets/tests/test_snippets.py | 85 ---------------- wagtail/snippets/views/snippets.py | 97 ++++--------------- 3 files changed, 23 insertions(+), 199 deletions(-) diff --git a/wagtail/snippets/templates/wagtailsnippets/snippets/confirm_delete.html b/wagtail/snippets/templates/wagtailsnippets/snippets/confirm_delete.html index d7d4deba35..57e4e37aa5 100644 --- a/wagtail/snippets/templates/wagtailsnippets/snippets/confirm_delete.html +++ b/wagtail/snippets/templates/wagtailsnippets/snippets/confirm_delete.html @@ -1,39 +1,11 @@ -{% extends "wagtailadmin/base.html" %} +{% extends "wagtailadmin/generic/confirm_delete.html" %} {% load wagtailadmin_tags i18n %} -{% block titletag %} - {% if objects|length == 1 %} - {% blocktrans trimmed with snippet_type_name=model_opts.verbose_name %}Delete {{ snippet_type_name }}{% endblocktrans %} - {{ objects|first }} - {% else %} - {{ objects|length }} {{ model_opts.verbose_name_plural|capfirst }} - {% endif %} -{% endblock %} -{% block content %} - {% trans "Delete " as delete_str %} - {% if objects|length == 1 %} - {% include "wagtailadmin/shared/header.html" with title=delete_str subtitle=objects|first icon="snippet" only %} - {% else %} - {% include "wagtailadmin/shared/header.html" with title=delete_str subtitle=model_opts.verbose_name_plural|capfirst icon="snippet" only %} - {% endif %} -
- {% if objects|length == 1 %} - -

{% blocktrans trimmed with snippet_type_name=model_opts.verbose_name %}Are you sure you want to delete this {{ snippet_type_name }}?{% endblocktrans %}

- {% else %} -

{% blocktrans trimmed with snippet_type_name=model_opts.verbose_name_plural count=objects|length %}Are you sure you want to delete {{ count }} {{ snippet_type_name }}?{% endblocktrans %}

- - {% endif %} -
- {% csrf_token %} - - {% trans "No, don't delete" %} -
+{% block main_content %} + +

{% blocktrans trimmed with snippet_type_name=model_opts.verbose_name %}Are you sure you want to delete this {{ snippet_type_name }}?{% endblocktrans %}

+ {{ block.super }} {% endblock %} diff --git a/wagtail/snippets/tests/test_snippets.py b/wagtail/snippets/tests/test_snippets.py index fd8b997bfa..e3df7d69aa 100644 --- a/wagtail/snippets/tests/test_snippets.py +++ b/wagtail/snippets/tests/test_snippets.py @@ -3706,68 +3706,6 @@ class TestSnippetDelete(WagtailTestUtils, TestCase): self.assertFalse(Advert.objects.filter(pk=advert.pk).exists()) -class TestSnippetDeleteMultipleWithOne(WagtailTestUtils, TestCase): - # test deletion of one snippet using the delete-multiple URL - # behaviour should mimic the TestSnippetDelete but with different URl structure - fixtures = ["test.json"] - - def setUp(self): - self.snippet = Advert.objects.get(id=1) - self.login() - - def test_delete_get(self): - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % (self.snippet.id) - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_delete_post(self): - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % (self.snippet.id) - response = self.client.post(url) - - # Should be redirected to the listing page - self.assertRedirects(response, reverse("wagtailsnippets_tests_advert:list")) - - # Check that the page is gone - self.assertEqual(Advert.objects.filter(text="test_advert").count(), 0) - - -class TestSnippetDeleteMultipleWithThree(WagtailTestUtils, TestCase): - # test deletion of three snippets using the delete-multiple URL - fixtures = ["test.json"] - - def setUp(self): - # first advert is in the fixtures - Advert.objects.create(text="Boreas").save() - Advert.objects.create(text="Cloud 9").save() - self.snippets = Advert.objects.all() - self.login() - - def test_delete_get(self): - # tests that the URL is available on get - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % ( - "&id=".join(["%s" % snippet.id for snippet in self.snippets]) - ) - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_delete_post(self): - # tests that the URL is available on post and deletes snippets - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % ( - "&id=".join(["%s" % snippet.id for snippet in self.snippets]) - ) - response = self.client.post(url) - - # Should be redirected to the listing page - self.assertRedirects(response, reverse("wagtailsnippets_tests_advert:list")) - - # Check that the page is gone - self.assertEqual(Advert.objects.filter(text="test_advert").count(), 0) - - class TestSnippetChooserPanel(WagtailTestUtils, TestCase): fixtures = ["test.json"] @@ -4848,13 +4786,6 @@ class TestAddOnlyPermissions(WagtailTestUtils, TestCase): # permission should be denied self.assertRedirects(response, reverse("wagtailadmin_home")) - def test_get_delete_mulitple(self): - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % self.test_snippet.id - response = self.client.get(url) - # permission should be denied - self.assertRedirects(response, reverse("wagtailadmin_home")) - class TestEditOnlyPermissions(WagtailTestUtils, TestCase): fixtures = ["test.json"] @@ -4908,13 +4839,6 @@ class TestEditOnlyPermissions(WagtailTestUtils, TestCase): # permission should be denied self.assertRedirects(response, reverse("wagtailadmin_home")) - def test_get_delete_mulitple(self): - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % self.test_snippet.id - response = self.client.get(url) - # permission should be denied - self.assertRedirects(response, reverse("wagtailadmin_home")) - class TestDeleteOnlyPermissions(WagtailTestUtils, TestCase): fixtures = ["test.json"] @@ -4968,15 +4892,6 @@ class TestDeleteOnlyPermissions(WagtailTestUtils, TestCase): response, "wagtailsnippets/snippets/confirm_delete.html" ) - def test_get_delete_mulitple(self): - url = reverse("wagtailsnippets_tests_advert:delete-multiple") - url += "?id=%s" % self.test_snippet.id - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - self.assertTemplateUsed( - response, "wagtailsnippets/snippets/confirm_delete.html" - ) - class TestSnippetEditHandlers(WagtailTestUtils, TestCase): def test_standard_edit_handler(self): diff --git a/wagtail/snippets/views/snippets.py b/wagtail/snippets/views/snippets.py index 6a550e82ed..f9eb25787c 100644 --- a/wagtail/snippets/views/snippets.py +++ b/wagtail/snippets/views/snippets.py @@ -1,18 +1,16 @@ from functools import partial -from urllib.parse import urlencode import django_filters from django.apps import apps from django.contrib.admin.utils import quote, unquote from django.core import checks from django.core.exceptions import PermissionDenied -from django.db import transaction from django.http import Http404 from django.shortcuts import get_object_or_404, redirect from django.urls import path, re_path, reverse from django.utils.text import capfirst from django.utils.translation import gettext as _ -from django.utils.translation import gettext_lazy, ngettext +from django.utils.translation import gettext_lazy from wagtail.admin.admin_url_finder import register_admin_url_finder from wagtail.admin.checks import check_panels_in_model @@ -36,7 +34,6 @@ from wagtail.admin.views.generic.preview import PreviewRevision from wagtail.admin.views.reports.base import ReportView from wagtail.admin.viewsets import viewsets from wagtail.admin.viewsets.base import ViewSet -from wagtail.log_actions import log from wagtail.log_actions import registry as log_registry from wagtail.models import ( DraftStateMixin, @@ -150,7 +147,7 @@ class SnippetTitleColumn(TitleColumn): class IndexView(generic.IndexViewOptionalFeaturesMixin, generic.IndexView): view_name = "list" index_results_url_name = None - delete_multiple_url_name = None + delete_url_name = None any_permission_required = ["add", "change", "delete"] paginate_by = 20 page_kwarg = "p" @@ -178,9 +175,6 @@ class IndexView(generic.IndexViewOptionalFeaturesMixin, generic.IndexView): "can_add_snippet": self.permission_policy.user_has_permission( self.request.user, "add" ), - "can_delete_snippets": self.permission_policy.user_has_permission( - self.request.user, "delete" - ), } ) @@ -373,83 +367,27 @@ class EditView(generic.CreateEditViewOptionalFeaturesMixin, generic.EditView): class DeleteView(generic.DeleteView): view_name = "delete" - delete_multiple_url_name = None - permission_required = "delete" + page_title = gettext_lazy("Delete") template_name = "wagtailsnippets/snippets/confirm_delete.html" + permission_required = "delete" + header_icon = "snippet" + + def setup(self, request, *args, **kwargs): + super().setup(request, *args, **kwargs) + self.object = self.get_object() def run_before_hook(self): - return self.run_hook("before_delete_snippet", self.request, self.objects) + return self.run_hook("before_delete_snippet", self.request, [self.object]) def run_after_hook(self): - return self.run_hook("after_delete_snippet", self.request, self.objects) - - def setup(self, request, *args, pk=None, **kwargs): - super().setup(request, *args, **kwargs) - self.pk = pk - self.objects = self.get_objects() - - def get_object(self, queryset=None): - # DeleteView requires either a pk kwarg or a positional arg, but we use - # an `id` query param for multiple objects. We need to explicitly override - # this so that we don't have to override `post()`. - return None - - def get_objects(self): - # Replaces get_object to allow returning multiple objects instead of just one - - if self.pk: - return [get_object_or_404(self.model, pk=unquote(self.pk))] - - ids = self.request.GET.getlist("id") - objects = self.model.objects.filter(pk__in=ids) - return objects - - def get_delete_url(self): - return ( - reverse( - self.delete_multiple_url_name, - ) - + "?" - + urlencode([("id", instance.pk) for instance in self.objects]) - ) + return self.run_hook("after_delete_snippet", self.request, [self.object]) def get_success_message(self): - count = len(self.objects) - if count == 1: - return _("%(model_name)s '%(object)s' deleted.") % { - "model_name": capfirst(self.model._meta.verbose_name), - "object": self.objects[0], - } - - # This message is only used in plural form, but we'll define it with ngettext so that - # languages with multiple plural forms can be handled correctly (or, at least, as - # correctly as possible within the limitations of verbose_name_plural...) - return ngettext( - "%(count)d %(model_name)s deleted.", - "%(count)d %(model_name)s deleted.", - count, - ) % { - "model_name": capfirst(self.model._meta.verbose_name_plural), - "count": count, + return _("%(model_name)s '%(object)s' deleted.") % { + "model_name": capfirst(self.model._meta.verbose_name), + "object": self.object, } - def delete_action(self): - with transaction.atomic(): - for instance in self.objects: - log(instance=instance, action="wagtail.delete") - instance.delete() - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context.update( - { - "model_opts": self.model._meta, - "objects": self.objects, - "action_url": self.get_delete_url(), - } - ) - return context - class UsageView(generic.UsageView): view_name = "usage" @@ -807,7 +745,7 @@ class SnippetViewSet(ViewSet): index_results_url_name=self.get_url_name("list_results"), add_url_name=self.get_url_name("add"), edit_url_name=self.get_url_name("edit"), - delete_multiple_url_name=self.get_url_name("delete-multiple"), + delete_url_name=self.get_url_name("delete"), list_display=self.list_display, ) @@ -822,7 +760,7 @@ class SnippetViewSet(ViewSet): index_results_url_name=self.get_url_name("list_results"), add_url_name=self.get_url_name("add"), edit_url_name=self.get_url_name("edit"), - delete_multiple_url_name=self.get_url_name("delete-multiple"), + delete_url_name=self.get_url_name("delete"), list_display=self.list_display, ) @@ -864,7 +802,7 @@ class SnippetViewSet(ViewSet): model=self.model, permission_policy=self.permission_policy, index_url_name=self.get_url_name("list"), - delete_multiple_url_name=self.get_url_name("delete-multiple"), + delete_url_name=self.get_url_name("delete"), ) @property @@ -1066,7 +1004,6 @@ class SnippetViewSet(ViewSet): path("results/", self.index_results_view, name="list_results"), path("add/", self.add_view, name="add"), path("edit//", self.edit_view, name="edit"), - path("multiple/delete/", self.delete_view, name="delete-multiple"), path("delete//", self.delete_view, name="delete"), path("usage//", self.usage_view, name="usage"), path("history//", self.history_view, name="history"),