diff --git a/docs/HISTORY.txt b/docs/HISTORY.txt index adff2ec..33ddb02 100644 --- a/docs/HISTORY.txt +++ b/docs/HISTORY.txt @@ -5,7 +5,8 @@ Changelog 2.2.3 (unreleased) ------------------ -- Nothing changed yet. +- Show extra factory menu items for parent of default page. + [maurits] 2.2.2 (2013-08-26) diff --git a/ftw/contentmenu/menu.py b/ftw/contentmenu/menu.py index 72a93f4..3ec7d09 100644 --- a/ftw/contentmenu/menu.py +++ b/ftw/contentmenu/menu.py @@ -1,4 +1,4 @@ -from Acquisition import aq_inner +from Acquisition import aq_inner, aq_parent from Products.CMFCore.interfaces import IActionProvider from Products.CMFCore.utils import getToolByName, _checkPermission from Products.CMFPlone import PloneMessageFactory as _ @@ -204,7 +204,13 @@ def available(self): actions_tool = getToolByName(self.context, 'portal_actions') provider = getattr(actions_tool, 'portal_types', None) if IActionProvider.providedBy(provider): - type_actions = provider.listActionInfos(object=self.context, + # Get folder_factories of container. + context = aq_inner(self.context) + if self._addingToParent(): + container = aq_parent(context) + else: + container = context + type_actions = provider.listActionInfos(object=container, category='folder_factories', max=1) if len(type_actions) > 0: return True @@ -225,7 +231,14 @@ def getMenuItems(self, context, request): actions_tool = getToolByName(aq_inner(context), 'portal_actions') provider = getattr(actions_tool, 'portal_types', None) if IActionProvider.providedBy(provider): - type_actions = provider.listActionInfos(object=context, + # Get folder_factories of container. + context_state = getMultiAdapter((context, request), + name='plone_context_state') + if context_state.is_structural_folder(): + container = context + else: + container = context_state.folder() + type_actions = provider.listActionInfos(object=container, category='folder_factories') if type_actions: diff --git a/ftw/contentmenu/tests/test_menu.py b/ftw/contentmenu/tests/test_menu.py index 0b2dca8..473665f 100644 --- a/ftw/contentmenu/tests/test_menu.py +++ b/ftw/contentmenu/tests/test_menu.py @@ -76,7 +76,7 @@ def test_actionsmenu_items_from_typestool(self): actions = self.menu.getActionsMenuItems(self.folder, self.request) self.assertIn('tt_test', [a['extra']['id'] for a in actions]) - def test_worklfow_menu_items(self): + def test_workflow_menu_items(self): actions = self.menu.getWorkflowMenuItems(self.folder.doc1, self.request) self.assertIn('workflow-transition-submit', @@ -136,3 +136,14 @@ def test_post_menu_item_adapter(self): # .. then we should not have any more actions actions = self.menu.getMenuItems(self.folder, self.request) self.assertEqual(len(actions), 0) + + def test_menu_of_default_page_includes_factory_actions(self): + folder_fti = self.portal.portal_types['Folder'] + folder_fti.addAction('test_factory_action', + 'Test Factory Action', + 'string:${object_url}', '', '', + 'folder_factories') + self.folder.default_page = 'doc1' + actions = self.menu.getMenuItems(self.folder.doc1, self.request) + self.assertIn('test_factory_action', + [a['extra']['id'] for a in actions])