# HG changeset patch # User Thierry Florac # Date 1528713823 -7200 # Node ID 118d32d0ac38e734ecac81209b71e34f9ac28703 # Parent d3d50fcbc62ca2a06fce33ddba2a47c9d5f86761 Add view query extension for themes diff -r d3d50fcbc62c -r 118d32d0ac38 src/pyams_content/shared/view/theme.py --- a/src/pyams_content/shared/view/theme.py Mon Jun 11 11:45:02 2018 +0200 +++ b/src/pyams_content/shared/view/theme.py Mon Jun 11 12:43:43 2018 +0200 @@ -16,12 +16,18 @@ # import standard library # import interfaces +from hypatia.interfaces import ICatalog from pyams_content.component.theme.interfaces import IThemesInfo -from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewThemesSettings, VIEW_THEMES_SETTINGS_KEY +from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewThemesSettings, \ + IViewQueryParamsExtension, VIEW_THEMES_SETTINGS_KEY +from zope.intid.interfaces import IIntIds # import packages +from hypatia.query import Any from persistent import Persistent -from pyams_utils.adapter import adapter_config, get_annotation_adapter +from pyams_catalog.query import and_ +from pyams_utils.adapter import adapter_config, get_annotation_adapter, ContextAdapter +from pyams_utils.registry import get_utility from zope.container.contained import Contained from zope.interface import implementer from zope.schema.fieldproperty import FieldProperty @@ -49,7 +55,8 @@ return themes def get_themes_index(self, context): - return [theme.label for theme in self.get_themes(context)] + intids = get_utility(IIntIds) + return [intids.register(term) for term in self.get_themes(context)] @adapter_config(context=IWfView, provides=IViewThemesSettings) @@ -58,3 +65,20 @@ """View themes settings factory""" return get_annotation_adapter(view, VIEW_THEMES_SETTINGS_KEY, ViewThemesSettings, name='++view:themes++') + + +@adapter_config(name='themes', context=IWfView, provides=IViewQueryParamsExtension) +class ViewThemesQueryParamsExtension(ContextAdapter): + """View themes query params extension""" + + weight = 50 + + def get_params(self, context): + catalog = get_utility(ICatalog) + settings = IViewThemesSettings(self.context) + params = None + # check themes + themes = settings.get_themes_index(context) + if themes: + params = and_(params, Any(catalog['themes'], themes)) + return params