Ver código fonte

Add `wagtail.reorder` audit log action

This adds a special audit message for reordering pages.

Previously, reordering pages under the same parent would show the
slighly misleading message that the page was moved to the same parent.
A special page reordered message would be more appropiate in this case.
Storm Heg 4 anos atrás
pai
commit
1ff679f861

+ 1 - 0
CHANGELOG.txt

@@ -14,6 +14,7 @@ Changelog
  * Utilize `PageQuerySet.defer_streamfields()` to improve efficiency in a few key places (Andy Babic)
  * Switch ``register_setting``, ``register_settings_menu_item`` to use SVG icons (Thibaud Colas)
  * Add support to SVG icons for ``SearchArea`` subclasses in ``register_admin_search_area`` (Thibaud Colas)
+ * Add `wagtail.reorder` page audit log action (Storm Heg)
  * `get_settings` template tag now supports specifying the variable name with `{% get_settings as var %}` (Samir Shah)
  * Fix: StreamField required status is now consistently handled by the `blank` keyword argument (Matt Westcott)
  * Fix: Show 'required' asterisks for blocks inside required StreamFields (Matt Westcott)

+ 1 - 0
docs/advanced_topics/audit_log.rst

@@ -72,6 +72,7 @@ Action                               Notes
 ``wagtail.revert``                   The page was reverted to a previous draft
 ``wagtail.copy``                     The page was copied to a new location
 ``wagtail.move``                     The page was moved to a new location
+``wagtail.reorder``                  The order of the page under it's parent was changed
 ``wagtail.view_restriction.create``  The page was restricted
 ``wagtail.view_restriction.edit``    The page restrictions were updated
 ``wagtail.view_restriction.delete``  The page restrictions were removed

+ 1 - 0
docs/releases/2.13.rst

@@ -31,6 +31,7 @@ Other features
 * Update ``PageQueryset.specific(defer=True)`` to only perform a single database query (Andy Babic)
 * Switched ``register_setting``, ``register_settings_menu_item`` to use SVG icons (Thibaud Colas)
 * Add support to SVG icons for ``SearchArea`` subclasses in ``register_admin_search_area`` (Thibaud Colas)
+* Add specialized ``wagtail.reorder`` page audit log action. This was previously covered by the ``wagtail.move`` action (Storm Heg)
 * ``get_settings`` template tag now supports specifying the variable name with ``{% get_settings as var %}`` (Samir Shah)
 
 Bug fixes

+ 9 - 0
wagtail/admin/wagtail_hooks.py

@@ -866,6 +866,14 @@ def register_core_log_actions(actions):
         except KeyError:
             return _('Moved')
 
+    def reorder_message(data):
+        try:
+            return _("Reordered under '%(parent)s'") % {
+                'parent': data['destination']['title'],
+            }
+        except KeyError:
+            return _('Reordered')
+
     def schedule_publish_message(data):
         try:
             if data['revision']['has_live_version']:
@@ -935,6 +943,7 @@ def register_core_log_actions(actions):
     actions.register_action('wagtail.create_alias', _('Create alias'), create_alias_message)
     actions.register_action('wagtail.convert_alias', _('Convert alias into regular page'), convert_alias_message)
     actions.register_action('wagtail.move', _('Move'), move_message)
+    actions.register_action('wagtail.reorder', _('Reorder'), reorder_message)
     actions.register_action('wagtail.publish.schedule', _("Schedule publication"), schedule_publish_message)
     actions.register_action('wagtail.schedule.cancel', _("Unschedule publication"), unschedule_publish_message)
     actions.register_action('wagtail.view_restriction.create', _("Add view restrictions"), add_view_restriction)

+ 2 - 1
wagtail/core/models.py

@@ -2062,7 +2062,8 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
         # Log
         PageLogEntry.objects.log_action(
             instance=self,
-            action='wagtail.move',
+            # Check if page was reordered (reordering doesn't change the parent)
+            action='wagtail.reorder' if parent_before.id == target.id else 'wagtail.move',
             user=user,
             data={
                 'source': {

+ 18 - 0
wagtail/core/tests/test_audit_log.py

@@ -185,6 +185,23 @@ class TestAuditLog(TestCase):
             ['wagtail.publish', 'wagtail.copy', 'wagtail.create']
         )
 
+    def test_page_reorder(self):
+        section_1 = self.root_page.add_child(
+            instance=SimplePage(title="Child 1", slug="child-1", content="hello")
+        )
+        self.root_page.add_child(
+            instance=SimplePage(title="Child 2", slug="child-2", content="hello")
+        )
+
+        user = get_user_model().objects.first()
+
+        # Reorder section 1 to be the last page under root_page.
+        # This should log as `wagtail.reorder` because the page was moved under the same parent page
+        section_1.move(self.root_page, user=user, pos="last-child")
+
+        self.assertEqual(PageLogEntry.objects.filter(action='wagtail.reorder', user=user).count(), 1)
+        self.assertEqual(PageLogEntry.objects.filter(action='wagtail.move', user=user).count(), 0)
+
     def test_page_move(self):
         section = self.root_page.add_child(
             instance=SimplePage(title="About us", slug="about", content="hello")
@@ -193,6 +210,7 @@ class TestAuditLog(TestCase):
         section.move(self.home_page, user=user)
 
         self.assertEqual(PageLogEntry.objects.filter(action='wagtail.move', user=user).count(), 1)
+        self.assertEqual(PageLogEntry.objects.filter(action='wagtail.reorder', user=user).count(), 0)
 
     def test_page_delete(self):
         self.home_page.add_child(