Merge branch 'kaedroho-unpublish_signal'

pull/473/head
Matt Westcott 2014-07-22 11:09:59 +01:00
commit dc62ebe3a1
6 zmienionych plików z 78 dodań i 6 usunięć

Wyświetl plik

@ -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)
~~~~~~~~~~~~~~~~~~

Wyświetl plik

@ -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

Wyświetl plik

@ -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)

Wyświetl plik

@ -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):

Wyświetl plik

@ -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', {

Wyświetl plik

@ -2,3 +2,4 @@ from django.dispatch import Signal
page_published = Signal(providing_args=['instance'])
page_unpublished = Signal(providing_args=['instance'])