src/pyams_content/shared/view/theme.py
changeset 606 118d32d0ac38
parent 558 d9c6b1d7fefa
child 800 2b5460ecb254
equal deleted inserted replaced
605:d3d50fcbc62c 606:118d32d0ac38
    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