# HG changeset patch # User Thierry Florac # Date 1531315262 -7200 # Node ID a4a2dc04040ce2289fffc06bb2a4342a7be8d5ed # Parent b7976cad0ef04f3e73f2a339181e68d0a7dd35a3 Added collections support diff -r b7976cad0ef0 -r a4a2dc04040c src/pyams_content_es/component/theme.py --- a/src/pyams_content_es/component/theme.py Thu Jul 05 08:54:10 2018 +0200 +++ b/src/pyams_content_es/component/theme.py Wed Jul 11 15:21:02 2018 +0200 @@ -9,6 +9,7 @@ # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # +from pyams_content.component.theme import ICollectionsTarget, ICollectionsInfo __docformat__ = 'restructuredtext' @@ -17,7 +18,8 @@ # import interfaces from pyams_content.component.theme.interfaces import ITagsTarget, ITagsInfo, IThemesTarget, IThemesInfo -from pyams_content.shared.view.interfaces import IWfView, IViewQueryEsParamsExtension, IViewThemesSettings, IViewTagsSettings +from pyams_content.shared.view.interfaces import IWfView, IViewQueryEsParamsExtension, IViewThemesSettings, \ + IViewTagsSettings, IViewCollectionsSettings from pyams_content_es.interfaces import IDocumentIndexInfo from zope.intid.interfaces import IIntIds @@ -28,6 +30,10 @@ from pyams_utils.registry import get_utility +# +# Tags index +# + @adapter_config(name='tags', context=ITagsTarget, provides=IDocumentIndexInfo) def tags_target_index_info(content): """Tags target index info""" @@ -51,6 +57,10 @@ return Q('terms', **{'tags': tags}) +# +# Themes index +# + @adapter_config(name='themes', context=IThemesTarget, provides=IDocumentIndexInfo) def themes_target_index_info(content): """Themes target index info""" @@ -87,3 +97,30 @@ themes = settings.get_themes_index(context) if themes: return Q('terms', **{'themes.terms': themes}) + + +# +# Collections index +# + +@adapter_config(name='collections', context=ICollectionsTarget, provides=IDocumentIndexInfo) +def collections_target_index_info(content): + """Collections target index info""" + intids = get_utility(IIntIds) + collections = ICollectionsInfo(content).collections or () + return { + 'collections': [intids.register(tag) for tag in unique(collections)] + } + + +@adapter_config(name='collections', context=IWfView, provides=IViewQueryEsParamsExtension) +class ViewCollectionsQueryEsParamsExtension(ContextAdapter): + """View collections query adapter """ + + weight = 64 + + def get_es_params(self, context): + settings = IViewCollectionsSettings(self.context) + collections = settings.get_collections_index(context) + if collections: + return Q('terms', **{'collections': collections})