25 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget |
25 from pyams_content.component.extfile.interfaces import IExtFileContainerTarget |
26 from pyams_content.component.links.interfaces import ILinkContainerTarget |
26 from pyams_content.component.links.interfaces import ILinkContainerTarget |
27 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget |
27 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget |
28 from pyams_content.component.theme.interfaces import IThemesInfo, IThemesTarget |
28 from pyams_content.component.theme.interfaces import IThemesInfo, IThemesTarget |
29 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION |
29 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION |
30 from pyams_content.shared.common import IWfSharedContentFactory, WfSharedContent |
30 from pyams_content.shared.common import IWfSharedContentFactory |
31 from pyams_content.shared.common.interfaces import ISharedContentFactory |
31 from pyams_content.shared.common.interfaces import ISharedContentFactory, ISharedTool |
32 from pyams_content.shared.common.interfaces.types import ALL_DATA_TYPES_VOCABULARY, \ |
32 from pyams_content.shared.common.interfaces.types import ALL_DATA_TYPES_VOCABULARY, \ |
33 DATA_MANAGER_ANNOTATION_KEY, DATA_SUBTYPES_VOCABULARY, DATA_TYPES_VOCABULARY, \ |
33 DATA_MANAGER_ANNOTATION_KEY, DATA_SUBTYPES_VOCABULARY, DATA_TYPES_VOCABULARY, \ |
34 DATA_TYPE_FIELDS_VOCABULARY, IBaseDataType, IDataType, ISubType, ITypedDataManager, \ |
34 DATA_TYPE_FIELDS_VOCABULARY, IBaseDataType, IDataType, ISubType, ITypedDataManager, \ |
35 ITypedSharedTool, IWfTypedSharedContent |
35 ITypedSharedTool, IWfTypedSharedContent |
36 from pyams_content.shared.common.manager import SharedTool |
|
37 from pyams_form.interfaces.form import IFormContextPermissionChecker |
36 from pyams_form.interfaces.form import IFormContextPermissionChecker |
38 from pyams_i18n.interfaces import II18n |
37 from pyams_i18n.interfaces import II18n |
39 from pyams_sequence.reference import get_reference_target |
38 from pyams_sequence.reference import get_reference_target |
40 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter |
39 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter |
41 from pyams_utils.factory import factory_config |
40 from pyams_utils.factory import factory_config |
64 @implementer(ISubType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget) |
65 @implementer(ISubType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget) |
65 class SubType(BaseDataType): |
66 class SubType(BaseDataType): |
66 """Data sub-type persistent class""" |
67 """Data sub-type persistent class""" |
67 |
68 |
68 |
69 |
69 @implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget, IThemesTarget) |
70 @implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, |
|
71 ILinkContainerTarget, IThemesTarget) |
70 class DataType(BaseDataType, OrderedContainer): |
72 class DataType(BaseDataType, OrderedContainer): |
71 """Data type persistent class""" |
73 """Data type persistent class""" |
72 |
74 |
73 display_as_tag = FieldProperty(IDataType['display_as_tag']) |
75 display_as_tag = FieldProperty(IDataType['display_as_tag']) |
74 field_names = FieldProperty(IDataType['field_names']) |
76 field_names = FieldProperty(IDataType['field_names']) |
162 |
164 |
163 def __init__(self, context): |
165 def __init__(self, context): |
164 terms = [] |
166 terms = [] |
165 request = check_request() |
167 request = check_request() |
166 registry = get_local_registry() |
168 registry = get_local_registry() |
167 for tool in registry.getAllUtilitiesRegisteredFor(ITypedSharedTool): |
169 for tool in registry.getAllUtilitiesRegisteredFor(ISharedTool): |
168 manager = ITypedDataManager(tool) |
170 manager = ITypedDataManager(tool, None) |
169 terms.extend([SimpleTerm(datatype.__name__, |
171 if manager is not None: |
170 title=II18n(datatype).query_attribute('label', |
172 terms.extend([SimpleTerm(datatype.__name__, |
171 request=request)) |
173 title=II18n(datatype).query_attribute('label', |
172 for datatype in manager.values()]) |
174 request=request)) |
|
175 for datatype in manager.values()]) |
173 terms.sort(key=lambda x: x.title) |
176 terms.sort(key=lambda x: x.title) |
174 super(AllTypedSharedToolDataTypesVocabulary, self).__init__(terms) |
177 super().__init__(terms) |
|
178 |
|
179 def getTermByToken(self, token): |
|
180 try: |
|
181 return super().getTermByToken(token) |
|
182 except LookupError: |
|
183 request = check_request() |
|
184 translate = request.localizer.translate |
|
185 return SimpleTerm(token, |
|
186 title=translate(_("-- missing value ({}) --")).format(token)) |
175 |
187 |
176 |
188 |
177 def get_all_data_types(request): |
189 def get_all_data_types(request): |
178 """Get list of all registered data types as JSON object""" |
190 """Get list of all registered data types as JSON object""" |
179 results = [] |
191 results = [] |
180 registry = get_local_registry() |
192 registry = get_local_registry() |
181 for tool in sorted(registry.getAllUtilitiesRegisteredFor(ITypedSharedTool), |
193 for tool in sorted(registry.getAllUtilitiesRegisteredFor(ISharedTool), |
182 key=lambda x: II18n(x).query_attribute('title', request=request)): |
194 key=lambda x: II18n(x).query_attribute('title', request=request)): |
183 manager = ITypedDataManager(tool) |
195 manager = ITypedDataManager(tool, None) |
184 terms = [{ |
196 if manager is not None: |
185 'id': datatype.__name__, |
197 terms = [{ |
186 'text': II18n(datatype).query_attribute('label', request=request) |
198 'id': datatype.__name__, |
187 } for datatype in manager.values()] |
199 'text': II18n(datatype).query_attribute('label', request=request) |
188 content_factory = IWfSharedContentFactory(ISharedContentFactory(tool)) |
200 } for datatype in manager.values()] |
189 results.append({ |
201 content_factory = IWfSharedContentFactory(ISharedContentFactory(tool)) |
190 'text': request.localizer.translate(content_factory.content_name), |
202 results.append({ |
191 'disabled': True, |
203 'text': request.localizer.translate(content_factory.content_name), |
192 'children': terms |
204 'disabled': True, |
193 }) |
205 'children': terms |
|
206 }) |
194 return results |
207 return results |
195 |
208 |
196 |
209 |
197 @vocabulary_config(name=DATA_TYPES_VOCABULARY) |
210 @vocabulary_config(name=DATA_TYPES_VOCABULARY) |
198 class TypedSharedToolDataTypesVocabulary(SimpleVocabulary): |
211 class TypedSharedToolDataTypesVocabulary(SimpleVocabulary): |