--- a/src/pyams_content/shared/common/types.py Wed Jul 11 15:11:45 2018 +0200
+++ b/src/pyams_content/shared/common/types.py Wed Jul 11 15:22:16 2018 +0200
@@ -19,22 +19,26 @@
from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
from pyams_content.component.links.interfaces import ILinkContainerTarget
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
-from pyams_content.component.theme.interfaces import IThemesTarget
+from pyams_content.component.theme.interfaces import IThemesTarget, IThemesInfo
from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
from pyams_content.shared.common.interfaces.types import IDataType, ISubType, IBaseDataType, ITypedSharedTool, \
- ITypedDataManager, DATA_MANAGER_ANNOTATION_KEY
+ ITypedDataManager, DATA_MANAGER_ANNOTATION_KEY, DATA_TYPES_VOCABULARY, DATA_TYPE_FIELDS_VOCABULARY, \
+ IWfTypedSharedContent, ALL_DATA_TYPES_VOCABULARY
from pyams_form.interfaces.form import IFormContextPermissionChecker
+from pyams_i18n.interfaces import II18n
+from zope.lifecycleevent.interfaces import IObjectAddedEvent
from zope.location.interfaces import ISublocations
from zope.traversing.interfaces import ITraversable
# import packages
from persistent import Persistent
+from pyams_content.shared.common import WfSharedContent
from pyams_content.shared.common.manager import SharedTool
-from pyams_i18n.property import I18nFileProperty
from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
from pyams_utils.request import check_request
from pyams_utils.traversing import get_parent
from pyams_utils.vocabulary import vocabulary_config
+from pyramid.events import subscriber
from zope.container.contained import Contained
from zope.container.ordered import OrderedContainer
from zope.interface import implementer
@@ -53,7 +57,7 @@
single_label = FieldProperty(IBaseDataType['single_label'])
seeall_label = FieldProperty(IBaseDataType['seeall_label'])
next_label = FieldProperty(IBaseDataType['next_label'])
- pictogram = I18nFileProperty(IBaseDataType['pictogram'])
+ pictogram = FieldProperty(IBaseDataType['pictogram'])
@implementer(ISubType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget)
@@ -109,14 +113,64 @@
return ITypedDataManager(self.context).values()
-@vocabulary_config(name='PyAMS types interface fields')
+#
+# Typed shared content
+#
+
+@implementer(IWfTypedSharedContent)
+class WfTypedSharedContent(WfSharedContent):
+ """Typed shared content"""
+
+ data_type = FieldProperty(IWfTypedSharedContent['data_type'])
+
+ def get_data_type(self):
+ if not self.data_type:
+ return None
+ tool = get_parent(self, ITypedSharedTool)
+ if tool is not None:
+ manager = ITypedDataManager(tool)
+ return manager.get(self.data_type)
+
+
+@subscriber(IObjectAddedEvent, context_selector=IWfTypedSharedContent)
+def handle_added_typed_shared_content(event):
+ """Automatically assign themes for newly created contents"""
+ content = event.object
+ if not IThemesTarget.providedBy(content):
+ return
+ data_type = content.get_data_type()
+ if data_type is not None:
+ IThemesInfo(content).themes = IThemesInfo(data_type).themes
+
+
+#
+# Data types vocabularies
+#
+
+@vocabulary_config(name=DATA_TYPES_VOCABULARY)
+class TypedSharedToolDataTypes(SimpleVocabulary):
+ """Typed shared tool data types vocabulary"""
+
+ def __init__(self, context):
+ terms = []
+ parent = get_parent(context, ITypedSharedTool)
+ if parent is not None:
+ request = check_request()
+ manager = ITypedDataManager(parent)
+ terms = [SimpleTerm(datatype.name,
+ title=II18n(datatype).query_attribute('label', request=request))
+ for datatype in manager.values()]
+ super(TypedSharedToolDataTypes, self).__init__(terms)
+
+
+@vocabulary_config(name=DATA_TYPE_FIELDS_VOCABULARY)
class TypedSharedToolDataTypesFields(SimpleVocabulary):
"""Typed shared tool data types fields vocabulary"""
def __init__(self, context):
terms = []
parent = get_parent(context, ITypedSharedTool)
- if parent is not None:
+ if (parent is not None) and parent.shared_content_types_fields:
request = check_request()
translate = request.localizer.translate
terms = [SimpleTerm(name, title=translate(field.title))