kopia lustrzana https://github.com/wagtail/wagtail
Merge branch 'kaedroho-unpublish_signal'
commit
dc62ebe3a1
|
@ -7,6 +7,7 @@ Changelog
|
|||
* Explorer nav now rendered separately and fetched with AJAX when needed
|
||||
* Added decorator syntax for hooks
|
||||
* Replaced lxml dependency with html5lib, to simplify installation
|
||||
* Added page_unpublished signal
|
||||
|
||||
0.4.1 (14.07.2014)
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
@ -35,6 +35,7 @@ Core
|
|||
)
|
||||
|
||||
* The lxml library (used for whitelisting and rewriting of rich text fields) has been replaced with the pure-python html5lib library, to simplify installation.
|
||||
* A ``page_unpublished`` signal has been added.
|
||||
|
||||
|
||||
Admin
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
from django.db import models
|
||||
from django.db.models.signals import post_delete
|
||||
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from wagtail.wagtailcore.signals import page_published
|
||||
from wagtail.wagtailcore.signals import page_published, page_unpublished
|
||||
|
||||
from wagtail.contrib.wagtailfrontendcache.utils import purge_page_from_cache
|
||||
|
||||
|
@ -11,7 +10,7 @@ def page_published_signal_handler(instance, **kwargs):
|
|||
purge_page_from_cache(instance)
|
||||
|
||||
|
||||
def post_delete_signal_handler(instance, **kwargs):
|
||||
def page_unpublished_signal_handler(instance, **kwargs):
|
||||
purge_page_from_cache(instance)
|
||||
|
||||
|
||||
|
@ -22,4 +21,4 @@ def register_signal_handlers():
|
|||
# Loop through list and register signal handlers for each one
|
||||
for model in indexed_models:
|
||||
page_published.connect(page_published_signal_handler, sender=model)
|
||||
post_delete.connect(post_delete_signal_handler, sender=model)
|
||||
page_unpublished.connect(page_unpublished_signal_handler, sender=model)
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.utils import timezone
|
|||
from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex
|
||||
from wagtail.tests.utils import unittest, WagtailTestUtils
|
||||
from wagtail.wagtailcore.models import Page, PageRevision
|
||||
from wagtail.wagtailcore.signals import page_published
|
||||
from wagtail.wagtailcore.signals import page_published, page_unpublished
|
||||
from wagtail.wagtailusers.models import UserProfile
|
||||
|
||||
|
||||
|
@ -809,6 +809,15 @@ class TestPageDelete(TestCase, WagtailTestUtils):
|
|||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_page_delete_post(self):
|
||||
# Connect a mock signal handler to page_unpublished signal
|
||||
signal_fired = [False]
|
||||
signal_page = [None]
|
||||
def page_unpublished_handler(sender, instance, **kwargs):
|
||||
signal_fired[0] = True
|
||||
signal_page[0] = instance
|
||||
page_unpublished.connect(page_unpublished_handler)
|
||||
|
||||
# Post
|
||||
post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data
|
||||
response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data)
|
||||
|
||||
|
@ -818,6 +827,38 @@ class TestPageDelete(TestCase, WagtailTestUtils):
|
|||
# Check that the page is gone
|
||||
self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0)
|
||||
|
||||
# Check that the page_unpublished signal was fired
|
||||
self.assertTrue(signal_fired[0])
|
||||
self.assertEqual(signal_page[0], self.child_page)
|
||||
self.assertEqual(signal_page[0], signal_page[0].specific)
|
||||
|
||||
def test_page_delete_notlive_post(self):
|
||||
# Same as above, but this makes sure the page_unpublished signal is not fired
|
||||
# when if the page is not live when it is deleted
|
||||
|
||||
# Unpublish the page
|
||||
self.child_page.live = False
|
||||
self.child_page.save()
|
||||
|
||||
# Connect a mock signal handler to page_unpublished signal
|
||||
signal_fired = [False]
|
||||
def page_unpublished_handler(sender, instance, **kwargs):
|
||||
signal_fired[0] = True
|
||||
page_unpublished.connect(page_unpublished_handler)
|
||||
|
||||
# Post
|
||||
post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data
|
||||
response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data)
|
||||
|
||||
# Should be redirected to explorer page
|
||||
self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
|
||||
|
||||
# Check that the page is gone
|
||||
self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0)
|
||||
|
||||
# Check that the page_unpublished signal was not fired
|
||||
self.assertFalse(signal_fired[0])
|
||||
|
||||
|
||||
class TestPageSearch(TestCase, WagtailTestUtils):
|
||||
def setUp(self):
|
||||
|
@ -967,6 +1008,14 @@ class TestPageUnpublish(TestCase, WagtailTestUtils):
|
|||
"""
|
||||
This posts to the unpublish view and checks that the page was unpublished
|
||||
"""
|
||||
# Connect a mock signal handler to page_unpublished signal
|
||||
signal_fired = [False]
|
||||
signal_page = [None]
|
||||
def page_unpublished_handler(sender, instance, **kwargs):
|
||||
signal_fired[0] = True
|
||||
signal_page[0] = instance
|
||||
page_unpublished.connect(page_unpublished_handler)
|
||||
|
||||
# Post to the unpublish page
|
||||
response = self.client.post(reverse('wagtailadmin_pages_unpublish', args=(self.page.id, )), {
|
||||
'foo': "Must post something or the view won't see this as a POST request",
|
||||
|
@ -978,6 +1027,11 @@ class TestPageUnpublish(TestCase, WagtailTestUtils):
|
|||
# Check that the page was unpublished
|
||||
self.assertFalse(SimplePage.objects.get(id=self.page.id).live)
|
||||
|
||||
# Check that the page_unpublished signal was fired
|
||||
self.assertTrue(signal_fired[0])
|
||||
self.assertEqual(signal_page[0], self.page)
|
||||
self.assertEqual(signal_page[0], signal_page[0].specific)
|
||||
|
||||
|
||||
class TestApproveRejectModeration(TestCase, WagtailTestUtils):
|
||||
def setUp(self):
|
||||
|
|
|
@ -18,7 +18,7 @@ from wagtail.wagtailadmin import tasks, signals
|
|||
|
||||
from wagtail.wagtailcore import hooks
|
||||
from wagtail.wagtailcore.models import Page, PageRevision, get_navigation_menu_items
|
||||
from wagtail.wagtailcore.signals import page_published
|
||||
from wagtail.wagtailcore.signals import page_published, page_unpublished
|
||||
|
||||
|
||||
@permission_required('wagtailadmin.access_admin')
|
||||
|
@ -383,8 +383,19 @@ def delete(request, page_id):
|
|||
raise PermissionDenied
|
||||
|
||||
if request.POST:
|
||||
if page.live:
|
||||
# fetch params to pass to the page_unpublished_signal, before the
|
||||
# deletion happens
|
||||
specific_class = page.specific_class
|
||||
specific_page = page.specific
|
||||
|
||||
parent_id = page.get_parent().id
|
||||
page.delete()
|
||||
|
||||
# If the page is live, send the unpublished signal
|
||||
if page.live:
|
||||
page_unpublished.send(sender=specific_class, instance=specific_page)
|
||||
|
||||
messages.success(request, _("Page '{0}' deleted.").format(page.title))
|
||||
|
||||
for fn in hooks.get_hooks('after_delete_page'):
|
||||
|
@ -545,9 +556,14 @@ def unpublish(request, page_id):
|
|||
parent_id = page.get_parent().id
|
||||
page.live = False
|
||||
page.save()
|
||||
|
||||
# Since page is unpublished clear the approved_go_live_at of all revisions
|
||||
page.revisions.update(approved_go_live_at=None)
|
||||
|
||||
page_unpublished.send(sender=page.specific_class, instance=page.specific)
|
||||
|
||||
messages.success(request, _("Page '{0}' unpublished.").format(page.title))
|
||||
|
||||
return redirect('wagtailadmin_explore', parent_id)
|
||||
|
||||
return render(request, 'wagtailadmin/pages/confirm_unpublish.html', {
|
||||
|
|
|
@ -2,3 +2,4 @@ from django.dispatch import Signal
|
|||
|
||||
|
||||
page_published = Signal(providing_args=['instance'])
|
||||
page_unpublished = Signal(providing_args=['instance'])
|
||||
|
|
Ładowanie…
Reference in New Issue