14 |
14 |
15 |
15 |
16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
|
19 from hypatia.interfaces import ICatalog |
19 from pyams_content.component.theme.interfaces import IThemesInfo |
20 from pyams_content.component.theme.interfaces import IThemesInfo |
20 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewThemesSettings, VIEW_THEMES_SETTINGS_KEY |
21 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewThemesSettings, \ |
|
22 IViewQueryParamsExtension, VIEW_THEMES_SETTINGS_KEY |
|
23 from zope.intid.interfaces import IIntIds |
21 |
24 |
22 # import packages |
25 # import packages |
|
26 from hypatia.query import Any |
23 from persistent import Persistent |
27 from persistent import Persistent |
24 from pyams_utils.adapter import adapter_config, get_annotation_adapter |
28 from pyams_catalog.query import and_ |
|
29 from pyams_utils.adapter import adapter_config, get_annotation_adapter, ContextAdapter |
|
30 from pyams_utils.registry import get_utility |
25 from zope.container.contained import Contained |
31 from zope.container.contained import Contained |
26 from zope.interface import implementer |
32 from zope.interface import implementer |
27 from zope.schema.fieldproperty import FieldProperty |
33 from zope.schema.fieldproperty import FieldProperty |
28 |
34 |
29 |
35 |
47 if self.themes: |
53 if self.themes: |
48 themes |= set(self.themes) |
54 themes |= set(self.themes) |
49 return themes |
55 return themes |
50 |
56 |
51 def get_themes_index(self, context): |
57 def get_themes_index(self, context): |
52 return [theme.label for theme in self.get_themes(context)] |
58 intids = get_utility(IIntIds) |
|
59 return [intids.register(term) for term in self.get_themes(context)] |
53 |
60 |
54 |
61 |
55 @adapter_config(context=IWfView, provides=IViewThemesSettings) |
62 @adapter_config(context=IWfView, provides=IViewThemesSettings) |
56 @adapter_config(name='themes', context=IWfView, provides=IViewSettings) |
63 @adapter_config(name='themes', context=IWfView, provides=IViewSettings) |
57 def view_themes_settings_factory(view): |
64 def view_themes_settings_factory(view): |
58 """View themes settings factory""" |
65 """View themes settings factory""" |
59 return get_annotation_adapter(view, VIEW_THEMES_SETTINGS_KEY, ViewThemesSettings, |
66 return get_annotation_adapter(view, VIEW_THEMES_SETTINGS_KEY, ViewThemesSettings, |
60 name='++view:themes++') |
67 name='++view:themes++') |
|
68 |
|
69 |
|
70 @adapter_config(name='themes', context=IWfView, provides=IViewQueryParamsExtension) |
|
71 class ViewThemesQueryParamsExtension(ContextAdapter): |
|
72 """View themes query params extension""" |
|
73 |
|
74 weight = 50 |
|
75 |
|
76 def get_params(self, context): |
|
77 catalog = get_utility(ICatalog) |
|
78 settings = IViewThemesSettings(self.context) |
|
79 params = None |
|
80 # check themes |
|
81 themes = settings.get_themes_index(context) |
|
82 if themes: |
|
83 params = and_(params, Any(catalog['themes'], themes)) |
|
84 return params |