Skip to content

Commit

Permalink
Handled cut/paste and rename of a categorized element
Browse files Browse the repository at this point in the history
  • Loading branch information
sgeulette committed Feb 19, 2024
1 parent 4320d23 commit 8d50303
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 6 deletions.
2 changes: 2 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ Changelog
[sgeulette]
- Removed some hasattr tests (MOD-831) and corrected events object
[sgeulette]
- Handled cut/paste and rename of a categorized element
[sgeulette]

0.64 (2024-02-08)
-----------------
Expand Down
4 changes: 2 additions & 2 deletions src/collective/iconifiedcategory/content/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@

<subscriber
for="collective.iconifiedcategory.behaviors.iconifiedcategorization.IIconifiedCategorizationMarker
zope.lifecycleevent.interfaces.IObjectRemovedEvent"
handler=".events.categorized_content_removed"
zope.lifecycleevent.interfaces.IObjectMovedEvent"
handler=".events.categorized_content_moved"
/>

<subscriber
Expand Down
18 changes: 15 additions & 3 deletions src/collective/iconifiedcategory/content/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from zExceptions import Redirect
from zope.component import getAdapter
from zope.event import notify
from zope.lifecycleevent import IObjectAddedEvent
from zope.lifecycleevent import IObjectRemovedEvent


Expand All @@ -30,7 +31,6 @@ def categorized_content_created(obj, event):
# we may defer events if relevant value found in the REQUEST
if obj.REQUEST.get('defer_categorized_content_created_event', False):
return

# set default values for to_print, confidential and to_sign/signed
try:
category = utils.get_category_object(obj, obj.content_category)
Expand Down Expand Up @@ -156,8 +156,20 @@ def content_category_updated(event):
)


def categorized_content_removed(obj, event):
utils.remove_categorized_element(obj.aq_parent, obj)
def categorized_content_moved(obj, event):
if IObjectAddedEvent.providedBy(event): # copy/paste or creation => IObjectAddedEvent
return
if IObjectRemovedEvent.providedBy(event): # delete but not cut/paste
utils.remove_categorized_element(obj.aq_parent, obj)
return
if obj.REQUEST.get('defer_update_categorized_elements', False):
return
category = utils.get_category_object(obj, obj.content_category)
if event.oldName is not None and event.oldName != event.newName: # rename
utils.update_categorized_elements(obj.aq_parent, obj, category)
elif event.oldParent is not None and event.newParent is not None and event.oldParent != event.newParent: # move
utils.update_categorized_elements(obj.aq_parent, obj, category) # paste
utils.remove_categorized_element(event.oldParent, obj)


def categorized_content_container_moved(container, event):
Expand Down
26 changes: 25 additions & 1 deletion src/collective/iconifiedcategory/tests/test_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ def test_categorized_elements_correct_after_copy_paste_categorized_content(self)
self.assertEquals(len(self.portal.categorized_elements), 2)
self.assertTrue(file_obj_UID in self.portal.categorized_elements)
self.assertTrue(img_obj_UID in self.portal.categorized_elements)

self.assertListEqual([dic['relative_url'] for dic in self.portal.categorized_elements.values()],
['file_txt', 'image'])
# copy paste a contained categorized content
copied_data = self.portal.manage_copyObjects(ids=[file_obj.getId()])
infos = self.portal.manage_pasteObjects(copied_data)
Expand All @@ -62,6 +63,29 @@ def test_categorized_elements_correct_after_copy_paste_categorized_content(self)
self.assertTrue(file_obj_UID in self.portal.categorized_elements)
self.assertTrue(img_obj_UID in self.portal.categorized_elements)
self.assertTrue(new_file_UID in self.portal.categorized_elements)
self.assertListEqual([dic['relative_url'] for dic in self.portal.categorized_elements.values()],
['file_txt', 'copy_of_file_txt', 'image'])
# rename the object
api.content.rename(obj=new_file, new_id='new_file_txt')
self.assertListEqual([dic['relative_url'] for dic in self.portal.categorized_elements.values()],
['file_txt', 'new_file_txt', 'image'])
# cut paste the object
container = api.content.create(
id='folder',
type='Folder',
container=self.portal
)
copied_data = self.portal.manage_cutObjects(ids=['new_file_txt'])
infos = container.manage_pasteObjects(copied_data)
self.assertEquals(len(self.portal.categorized_elements), 2)
self.assertTrue(file_obj_UID in self.portal.categorized_elements)
self.assertTrue(img_obj_UID in self.portal.categorized_elements)
self.assertListEqual([dic['relative_url'] for dic in self.portal.categorized_elements.values()],
['file_txt', 'image'])
self.assertEquals(len(container.categorized_elements), 1)
self.assertTrue(new_file_UID in container.categorized_elements)
self.assertListEqual([dic['relative_url'] for dic in container.categorized_elements.values()],
['folder/new_file_txt'])

def test_categorized_elements_correct_after_moving_categorized_content_container(self):
container = api.content.create(
Expand Down

0 comments on commit 8d50303

Please sign in to comment.