From 23b2d720543f9e2271e1907d4904786632834227 Mon Sep 17 00:00:00 2001 From: Dan Braghis Date: Fri, 20 May 2022 10:33:54 +0100 Subject: [PATCH] Add setting to cascade actions currently: delete, move, unpublish --- wagtail_localize/tests/test_synctree.py | 25 ++++++++++++++++++++++++- wagtail_localize/wagtail_hooks.py | 7 ++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/wagtail_localize/tests/test_synctree.py b/wagtail_localize/tests/test_synctree.py index cdb51b5d..20b2fcbf 100644 --- a/wagtail_localize/tests/test_synctree.py +++ b/wagtail_localize/tests/test_synctree.py @@ -1,7 +1,7 @@ import unittest from django.contrib.contenttypes.models import ContentType -from django.test import TestCase +from django.test import TestCase, override_settings from django.urls import reverse from wagtail import VERSION as WAGTAIL_VERSION from wagtail.core.models import Locale, Page @@ -307,6 +307,27 @@ def test_hook_returns_nothing_without_locale_synchronisation(self): results = hook([self.en_aboutpage], action) self.assertDictEqual(results, {}) + def test_hook_returns_nothing_without_explicit_setting(self): + self.setup_locale_synchronisation(self.fr_locale, self.en_locale) + hook = self._get_hook_function() + for action in ["unpublish", "delete", "move"]: + with self.subTest( + f"Calling construct_translated_pages_to_cascade_actions with {action} " + f"without WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS set" + ): + results = hook([self.en_aboutpage], action) + self.assertDictEqual(results, {}) + + with override_settings(WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS=False): + for action in ["unpublish", "delete", "move"]: + with self.subTest( + f"Calling construct_translated_pages_to_cascade_actions with {action} " + f"and WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS=False" + ): + results = hook([self.en_aboutpage], action) + self.assertDictEqual(results, {}) + + @override_settings(WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS=True) def test_hook_returns_relevant_pages_from_synced_locale_on_unpublish_action(self): self.setup_locale_synchronisation(self.fr_locale, self.en_locale) hook = self._get_hook_function() @@ -323,6 +344,7 @@ def test_hook_returns_relevant_pages_from_synced_locale_on_unpublish_action(self self.assertIsNotNone(results.get(self.en_aboutpage)) self.assertQuerysetEqual(results[self.en_aboutpage], Page.objects.none()) + @override_settings(WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS=True) def test_hook_returns_relevant_pages_from_synced_locale_on_move_action(self): self.setup_locale_synchronisation(self.fr_locale, self.en_locale) hook = self._get_hook_function() @@ -332,6 +354,7 @@ def test_hook_returns_relevant_pages_from_synced_locale_on_move_action(self): results[self.en_aboutpage], Page.objects.filter(pk=self.fr_aboutpage.pk) ) + @override_settings(WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS=True) def test_hook_returns_relevant_pages_from_synced_locale_on_delete_action(self): self.setup_locale_synchronisation(self.fr_locale, self.en_locale) hook = self._get_hook_function() diff --git a/wagtail_localize/wagtail_hooks.py b/wagtail_localize/wagtail_hooks.py index 6564f0bf..ddc11c97 100644 --- a/wagtail_localize/wagtail_hooks.py +++ b/wagtail_localize/wagtail_hooks.py @@ -470,10 +470,15 @@ def register_icons(icons): if WAGTAIL_VERSION >= (4, 0): + from django.conf import settings + from .models import LocaleSynchronization @hooks.register("construct_translated_pages_to_cascade_actions") - def construct_synced_page_tree_list(pages: List[Page], action: str): + def construct_synced_page_tree_list(pages: List[Page], action: str) -> dict: + if not getattr(settings, "WAGTAILLOCALIZE_CASCADE_PAGE_ACTIONS", False): + return {} + locale_sync_map = {} for page in pages: # TODO: what about locale C follows B which follows A, when we come in from A?