diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index aa73e907d..963a048b2 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -7,6 +7,7 @@ from django.core.paginator import Paginator from wagtail.tests.models import SimplePage, EventPage, StandardIndex, StandardChild, 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.wagtailusers.models import UserProfile @@ -170,6 +171,15 @@ class TestPageCreation(TestCase, WagtailTestUtils): self.assertFalse(page.live) def test_create_simplepage_post_publish(self): + # Connect a mock signal handler to page_published signal + signal_fired = [False] + signal_page = [None] + def page_published_handler(sender, page, **kwargs): + signal_fired[0] = True + signal_page[0] = page + page_published.connect(page_published_handler) + + # Post post_data = { 'title': "New page!", 'content': "Some content", @@ -187,6 +197,10 @@ class TestPageCreation(TestCase, WagtailTestUtils): self.assertIsInstance(page, SimplePage) self.assertTrue(page.live) + # Check that the page_published signal was fired + self.assertTrue(signal_fired[0]) + self.assertEqual(signal_page[0], page) + def test_create_simplepage_post_submit(self): # Create a moderator user for testing email moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password') @@ -327,6 +341,14 @@ class TestPageEdit(TestCase, WagtailTestUtils): self.assertTrue(child_page_new.has_unpublished_changes) def test_page_edit_post_publish(self): + # Connect a mock signal handler to page_published signal + signal_fired = [False] + signal_page = [None] + def page_published_handler(sender, page, **kwargs): + signal_fired[0] = True + signal_page[0] = page + page_published.connect(page_published_handler) + # Tests publish from edit page post_data = { 'title': "I've been edited!", @@ -343,6 +365,10 @@ class TestPageEdit(TestCase, WagtailTestUtils): child_page_new = SimplePage.objects.get(id=self.child_page.id) self.assertEqual(child_page_new.title, post_data['title']) + # Check that the page_published signal was fired + self.assertTrue(signal_fired[0]) + self.assertEqual(signal_page[0], child_page_new) + # The page shouldn't have "has_unpublished_changes" flag set self.assertFalse(child_page_new.has_unpublished_changes) diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index f6490a224..d49864f44 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -13,6 +13,7 @@ from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin import tasks, hooks, signals from wagtail.wagtailcore.models import Page, PageRevision +from wagtail.wagtailcore.signals import page_published @permission_required('wagtailadmin.access_admin') @@ -158,6 +159,7 @@ def create(request, content_type_app_name, content_type_model_name, parent_page_ page.save_revision(user=request.user, submitted_for_moderation=is_submitting) if is_publishing: + page_published.send(sender=page_class, page=page) messages.success(request, _("Page '{0}' published.").format(page.title)) elif is_submitting: messages.success(request, _("Page '{0}' submitted for moderation.").format(page.title)) @@ -238,6 +240,7 @@ def edit(request, page_id): page.save_revision(user=request.user, submitted_for_moderation=is_submitting) if is_publishing: + page_published.send(sender=page.__class__, page=page) messages.success(request, _("Page '{0}' published.").format(page.title)) elif is_submitting: messages.success(request, _("Page '{0}' submitted for moderation.").format(page.title)) diff --git a/wagtail/wagtailcore/signals.py b/wagtail/wagtailcore/signals.py new file mode 100644 index 000000000..38a0809c8 --- /dev/null +++ b/wagtail/wagtailcore/signals.py @@ -0,0 +1,4 @@ +from django.dispatch import Signal + + +page_published = Signal(providing_args=['page'])