kopia lustrzana https://github.com/wagtail/wagtail
Remove unused snippets delete-multiple view
rodzic
1db65a3fe0
commit
f3637ad857
|
|
@ -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 %}
|
||||
|
||||
<div class="nice-padding">
|
||||
{% if objects|length == 1 %}
|
||||
<div class="usagecount">
|
||||
<a href="{{ objects.0.usage_url }}">{% blocktrans trimmed count usage_count=objects.0.get_usage.count %}Used {{ usage_count }} time{% plural %}Used {{ usage_count }} times{% endblocktrans %}</a>
|
||||
</div>
|
||||
<p>{% blocktrans trimmed with snippet_type_name=model_opts.verbose_name %}Are you sure you want to delete this {{ snippet_type_name }}?{% endblocktrans %}</p>
|
||||
{% else %}
|
||||
<p>{% 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 %}</p>
|
||||
<ul>
|
||||
{% for instance in objects %}
|
||||
<li>{{ instance }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<form action="{{ action_url }}" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="{% trans 'Yes, delete' %}" class="button serious" />
|
||||
<a href="{% if next %}{{ next }}{% else %}{% url view.index_url_name %}{% endif %}" class="button button-secondary">{% trans "No, don't delete" %}</a>
|
||||
</form>
|
||||
{% block main_content %}
|
||||
<div class="usagecount">
|
||||
<a href="{{ object.usage_url }}">{% blocktrans trimmed count usage_count=object.get_usage.count %}Used {{ usage_count }} time{% plural %}Used {{ usage_count }} times{% endblocktrans %}</a>
|
||||
</div>
|
||||
<p>{% blocktrans trimmed with snippet_type_name=model_opts.verbose_name %}Are you sure you want to delete this {{ snippet_type_name }}?{% endblocktrans %}</p>
|
||||
|
||||
{{ block.super }}
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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/<str:pk>/", self.edit_view, name="edit"),
|
||||
path("multiple/delete/", self.delete_view, name="delete-multiple"),
|
||||
path("delete/<str:pk>/", self.delete_view, name="delete"),
|
||||
path("usage/<str:pk>/", self.usage_view, name="usage"),
|
||||
path("history/<str:pk>/", self.history_view, name="history"),
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue