From: Asko S. <je...@pl...> - 2015-05-25 09:53:36
|
Repository: plone.app.mosaic Branch: refs/heads/master Date: 2015-05-25T12:53:16+03:00 Author: Asko Soukka (datakurre) <ask...@ik...> Commit: https://github.com/plone/plone.app.mosaic/commit/e2fd34a5618b23bd987f641f1880234fe667dbea Fix layout default value factory to use context when available Files changed: M src/plone/app/mosaic/layoutsupport.py diff --git a/src/plone/app/mosaic/layoutsupport.py b/src/plone/app/mosaic/layoutsupport.py index 05c1d22..17d3c19 100644 --- a/src/plone/app/mosaic/layoutsupport.py +++ b/src/plone/app/mosaic/layoutsupport.py @@ -19,6 +19,7 @@ from plone.app.blocks.interfaces import ILayoutField from plone.app.blocks.interfaces import ILayoutFieldDefaultValue +from plone.app.blocks.layoutbehavior import ILayoutAware from plone.app.blocks.resource import AvailableLayoutsVocabulary from plone.app.blocks.utils import resolveResource from plone.app.mosaic.interfaces import IMosaicLayer @@ -47,12 +48,7 @@ class ContentLayoutTraverser(ResourceTraverser): ) -def getDefaultContentLayoutContent(adapter): - portal_type = getattr(getattr( - adapter.view, '__parent__', adapter.view), 'portal_type', None) - if portal_type is None: - return u'' - +def getPortalTypeDefaultContentLayoutContent(portal_type): types_tool = api.portal.get_tool('portal_types') fti = getattr(types_tool, portal_type, None) if fti is None: @@ -69,6 +65,15 @@ def getDefaultContentLayoutContent(adapter): logger.warning('Missing layout {0:s}'.format(e)) return u'' + +def getDefaultContentLayoutContent(adapter): + portal_type = getattr(getattr( + adapter.view, '__parent__', adapter.view), 'portal_type', None) + if portal_type is None: + return u'' + return getPortalTypeDefaultContentLayoutContent(portal_type) + + # XXX: It would be best to register this for IAddForm, but if the field # is moved into fieldset using plone.supermodel.directives.fieldset, its # form is actually IGroup, not IAddForm. @@ -79,6 +84,9 @@ def getDefaultContentLayoutContent(adapter): @implementer(ILayoutFieldDefaultValue) @adapter(Interface, IMosaicLayer) def layoutFieldDefaultValue(context, request): + if context and ILayoutAware(context, None): + return getPortalTypeDefaultContentLayoutContent(context.portal_type) + # XXX: Context cannot be used yet, because plone.dexterity does not # bound fields to support context aware default factories layout = absolute_path(CONTENT_LAYOUT_DEFAULT_LAYOUT) |