18 |
18 |
19 # import interfaces |
19 # import interfaces |
20 from hypatia.interfaces import ICatalog |
20 from hypatia.interfaces import ICatalog |
21 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \ |
21 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \ |
22 IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE |
22 IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE |
23 from zope.annotation.interfaces import IAnnotations |
|
24 |
23 |
25 # import packages |
24 # import packages |
26 from hypatia.catalog import CatalogQuery |
25 from hypatia.catalog import CatalogQuery |
27 from hypatia.query import Any |
26 from hypatia.query import Any |
28 from pyams_catalog.query import CatalogResultSet |
27 from pyams_catalog.query import CatalogResultSet |
29 from pyams_content.workflow import VISIBLE_STATES |
28 from pyams_content.workflow import VISIBLE_STATES |
30 from pyams_utils.adapter import adapter_config, ContextAdapter |
29 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter |
31 from pyams_utils.registry import get_utility |
30 from pyams_utils.registry import get_utility |
32 from pyramid.threadlocal import get_current_registry |
|
33 from zope.container.contained import Contained |
31 from zope.container.contained import Contained |
34 from zope.interface import implementer |
32 from zope.interface import implementer |
35 from zope.lifecycleevent import ObjectCreatedEvent |
|
36 from zope.location import locate |
|
37 from zope.schema.fieldproperty import FieldProperty |
33 from zope.schema.fieldproperty import FieldProperty |
38 |
34 |
39 |
35 |
40 @implementer(IViewInternalReferencesSettings) |
36 @implementer(IViewInternalReferencesSettings) |
41 class ViewInternalReferencesSettings(Persistent, Contained): |
37 class ViewInternalReferencesSettings(Persistent, Contained): |
51 |
47 |
52 @adapter_config(context=IWfView, provides=IViewInternalReferencesSettings) |
48 @adapter_config(context=IWfView, provides=IViewInternalReferencesSettings) |
53 @adapter_config(name='references', context=IWfView, provides=IViewSettings) |
49 @adapter_config(name='references', context=IWfView, provides=IViewSettings) |
54 def view_internal_references_settings_factory(view): |
50 def view_internal_references_settings_factory(view): |
55 """View internal references settings factory""" |
51 """View internal references settings factory""" |
56 annotations = IAnnotations(view) |
52 return get_annotation_adapter(view, VIEW_REFERENCES_SETTINGS_KEY, ViewInternalReferencesSettings, |
57 settings = annotations.get(VIEW_REFERENCES_SETTINGS_KEY) |
53 name='++view:references++') |
58 if settings is None: |
|
59 settings = annotations[VIEW_REFERENCES_SETTINGS_KEY] = ViewInternalReferencesSettings() |
|
60 get_current_registry().notify(ObjectCreatedEvent(settings)) |
|
61 locate(settings, view, '++view:references++') |
|
62 return settings |
|
63 |
54 |
64 |
55 |
65 @adapter_config(name='references', context=IWfView, provides=IViewQueryFilterExtension) |
56 @adapter_config(name='references', context=IWfView, provides=IViewQueryFilterExtension) |
66 class ViewInternalReferencesQueryFilterExtension(ContextAdapter): |
57 class ViewInternalReferencesQueryFilterExtension(ContextAdapter): |
67 """View internal references filter extension""" |
58 """View internal references filter extension""" |