10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
14 |
14 |
15 |
|
16 # import standard library |
|
17 import json |
15 import json |
18 |
16 |
19 # import interfaces |
17 from hypatia.catalog import CatalogQuery |
20 from hypatia.interfaces import ICatalog |
18 from hypatia.interfaces import ICatalog |
|
19 from hypatia.query import Any, Eq |
|
20 from z3c.form.browser.widget import HTMLInputWidget |
|
21 from z3c.form.converter import BaseDataConverter |
|
22 from z3c.form.interfaces import IDataConverter, IFieldWidget |
|
23 from z3c.form.widget import FieldWidget, Widget |
|
24 from zope.interface import implementer_only |
|
25 |
|
26 from pyams_catalog.query import CatalogResultSet |
21 from pyams_form.interfaces.form import IFormLayer |
27 from pyams_form.interfaces.form import IFormLayer |
|
28 from pyams_form.widget import widgettemplate_config |
22 from pyams_i18n.interfaces import II18n |
29 from pyams_i18n.interfaces import II18n |
23 from pyams_sequence.interfaces import ISequentialIntIds, ISequentialIdInfo |
30 from pyams_sequence.interfaces import ISequentialIdInfo, ISequentialIntIds |
|
31 from pyams_sequence.reference import get_last_version |
24 from pyams_sequence.schema import IInternalReferenceField, IInternalReferencesListField |
32 from pyams_sequence.schema import IInternalReferenceField, IInternalReferencesListField |
25 from pyams_sequence.widget.interfaces import IInternalReferenceWidget, IInternalReferencesListWidget |
33 from pyams_sequence.widget.interfaces import IInternalReferenceWidget, IInternalReferencesListWidget |
|
34 from pyams_utils.adapter import adapter_config |
|
35 from pyams_utils.registry import get_utility |
|
36 |
26 |
37 |
27 try: |
38 try: |
28 from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowVersion, IWorkflowManagedContent |
39 from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowVersion, IWorkflowManagedContent |
29 except ImportError: |
40 except ImportError: |
30 handle_workflow = False |
41 handle_workflow = False |
31 else: |
42 else: |
32 handle_workflow = True |
43 handle_workflow = True |
33 |
|
34 from z3c.form.interfaces import IFieldWidget, IDataConverter |
|
35 |
|
36 # import packages |
|
37 from hypatia.catalog import CatalogQuery |
|
38 from hypatia.query import Eq, Any |
|
39 from pyams_catalog.query import CatalogResultSet |
|
40 from pyams_form.widget import widgettemplate_config |
|
41 from pyams_sequence.reference import get_last_version |
|
42 from pyams_utils.adapter import adapter_config |
|
43 from pyams_utils.registry import get_utility |
|
44 from z3c.form.browser.widget import HTMLInputWidget |
|
45 from z3c.form.converter import BaseDataConverter |
|
46 from z3c.form.widget import Widget, FieldWidget |
|
47 from zope.interface import implementer_only |
|
48 |
44 |
49 from pyams_sequence import _ |
45 from pyams_sequence import _ |
50 |
46 |
51 |
47 |
52 # |
48 # |
66 return json.dumps({'content_type': self.content_type or self.field.content_type}) |
62 return json.dumps({'content_type': self.content_type or self.field.content_type}) |
67 |
63 |
68 @property |
64 @property |
69 def values_map(self): |
65 def values_map(self): |
70 catalog = get_utility(ICatalog) |
66 catalog = get_utility(ICatalog) |
71 params = Eq(catalog['oid'], self.value) |
67 if self.value: |
72 results = list(map(get_last_version, CatalogResultSet(CatalogQuery(catalog).query(params)))) |
68 params = Eq(catalog['oid'], self.value) |
73 if results: |
69 results = list(map(get_last_version, CatalogResultSet(CatalogQuery(catalog).query(params)))) |
74 sequence = get_utility(ISequentialIntIds) |
70 if results: |
75 return json.dumps({self.value: '{0} ({1})'.format(II18n(results[0]).query_attribute('title', |
71 sequence = get_utility(ISequentialIntIds) |
76 request=self.request), |
72 return json.dumps({self.value: '{0} ({1})'.format(II18n(results[0]).query_attribute('title', |
77 sequence.get_short_oid(ISequentialIdInfo(results[0]).oid))}) |
73 request=self.request), |
|
74 sequence.get_short_oid( |
|
75 ISequentialIdInfo(results[0]).oid))}) |
|
76 else: |
|
77 translate = self.request.localizer.translate |
|
78 return json.dumps({self.value: translate(_("missing reference: {0}")).format(self.value)}) |
78 else: |
79 else: |
79 translate = self.request.localizer.translate |
80 return json.dumps({}) |
80 return json.dumps({self.value: translate(_("missing reference: {0}")).format(self.value)}) |
|
81 |
81 |
82 |
82 |
83 @adapter_config(context=(IInternalReferenceField, IFormLayer), provides=IFieldWidget) |
83 @adapter_config(context=(IInternalReferenceField, IFormLayer), provides=IFieldWidget) |
84 def InternalReferenceFieldWidget(field, request): |
84 def InternalReferenceFieldWidget(field, request): |
85 """Internal reference field widget factory""" |
85 """Internal reference field widget factory""" |