src/pyams_content/shared/view/reference.py
changeset 617 2e4dbe6fa156
parent 558 d9c6b1d7fefa
child 783 e34cc04e9786
equal deleted inserted replaced
616:ec087f6b3b9a 617:2e4dbe6fa156
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
       
    12 from pyams_sequence.interfaces import ISequentialIdInfo
    12 
    13 
    13 __docformat__ = 'restructuredtext'
    14 __docformat__ = 'restructuredtext'
    14 
    15 
    15 
    16 
    16 # import standard library
    17 # import standard library
    17 from persistent import Persistent
    18 from persistent import Persistent
    18 
    19 
    19 # import interfaces
    20 # import interfaces
    20 from hypatia.interfaces import ICatalog
    21 from hypatia.interfaces import ICatalog
    21 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \
    22 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \
    22     IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE
    23     IViewQueryParamsExtension, IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE
    23 
    24 
    24 # import packages
    25 # import packages
    25 from hypatia.catalog import CatalogQuery
    26 from hypatia.catalog import CatalogQuery
    26 from hypatia.query import Any
    27 from hypatia.query import Any, Not, NotEq
    27 from pyams_catalog.query import CatalogResultSet
    28 from pyams_catalog.query import CatalogResultSet, and_
    28 from pyams_content.workflow import VISIBLE_STATES
    29 from pyams_content.workflow import VISIBLE_STATES
    29 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
    30 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
    30 from pyams_utils.registry import get_utility
    31 from pyams_utils.registry import get_utility
    31 from zope.container.contained import Contained
    32 from zope.container.contained import Contained
    32 from zope.interface import implementer
    33 from zope.interface import implementer
    37 class ViewInternalReferencesSettings(Persistent, Contained):
    38 class ViewInternalReferencesSettings(Persistent, Contained):
    38     """View internal references settings"""
    39     """View internal references settings"""
    39 
    40 
    40     references = FieldProperty(IViewInternalReferencesSettings['references'])
    41     references = FieldProperty(IViewInternalReferencesSettings['references'])
    41     references_mode = FieldProperty(IViewInternalReferencesSettings['references_mode'])
    42     references_mode = FieldProperty(IViewInternalReferencesSettings['references_mode'])
       
    43     exclude_context = FieldProperty(IViewInternalReferencesSettings['exclude_context'])
    42 
    44 
    43     @property
    45     @property
    44     def is_using_context(self):
    46     def is_using_context(self):
    45         return False
    47         return False
    46 
    48 
    51     """View internal references settings factory"""
    53     """View internal references settings factory"""
    52     return get_annotation_adapter(view, VIEW_REFERENCES_SETTINGS_KEY, ViewInternalReferencesSettings,
    54     return get_annotation_adapter(view, VIEW_REFERENCES_SETTINGS_KEY, ViewInternalReferencesSettings,
    53                                   name='++view:references++')
    55                                   name='++view:references++')
    54 
    56 
    55 
    57 
       
    58 @adapter_config(name='references', context=IWfView, provides=IViewQueryParamsExtension)
       
    59 class ViewThemesQueryParamsExtension(ContextAdapter):
       
    60     """View internal references query params extension"""
       
    61 
       
    62     weight = 50
       
    63 
       
    64     def get_params(self, context):
       
    65         catalog = get_utility(ICatalog)
       
    66         settings = IViewInternalReferencesSettings(self.context)
       
    67         params = None
       
    68         # check themes
       
    69         if settings.exclude_context:
       
    70             oid = ISequentialIdInfo(context).hex_oid
       
    71             params = and_(params, NotEq(catalog['oid'], oid))
       
    72         return params
       
    73 
       
    74 
    56 @adapter_config(name='references', context=IWfView, provides=IViewQueryFilterExtension)
    75 @adapter_config(name='references', context=IWfView, provides=IViewQueryFilterExtension)
    57 class ViewInternalReferencesQueryFilterExtension(ContextAdapter):
    76 class ViewInternalReferencesQueryFilterExtension(ContextAdapter):
    58     """View internal references filter extension"""
    77     """View internal references filter extension"""
    59 
    78 
    60     weight = 999
    79     weight = 999
    63         settings = IViewInternalReferencesSettings(self.context)
    82         settings = IViewInternalReferencesSettings(self.context)
    64         if not settings.references:
    83         if not settings.references:
    65             return items
    84             return items
    66         if (not items) or (settings.references_mode == ALWAYS_REFERENCE_MODE):
    85         if (not items) or (settings.references_mode == ALWAYS_REFERENCE_MODE):
    67             catalog = get_utility(ICatalog)
    86             catalog = get_utility(ICatalog)
    68             params = Any(catalog['oid'], settings.references) & Any(catalog['workflow_state'], VISIBLE_STATES)
    87             params = Any(catalog['oid'], settings.references) & \
       
    88                      Any(catalog['workflow_state'], VISIBLE_STATES)
    69             items.prepend(CatalogResultSet(CatalogQuery(catalog).query(params)))
    89             items.prepend(CatalogResultSet(CatalogQuery(catalog).query(params)))
    70         return items
    90         return items