src/pyams_content/features/search/portlet/__init__.py
changeset 1443 2af30495d1d7
parent 1406 a568b9d2f7dd
equal deleted inserted replaced
1442:22716baab0fe 1443:2af30495d1d7
    17 
    17 
    18 from zope.schema.fieldproperty import FieldProperty
    18 from zope.schema.fieldproperty import FieldProperty
    19 
    19 
    20 from pyams_content import _
    20 from pyams_content import _
    21 from pyams_content.features.search import ISearchFolder
    21 from pyams_content.features.search import ISearchFolder
    22 from pyams_content.features.search.portlet.interfaces import ISearchResultsPortletSettings
    22 from pyams_content.features.search.portlet.interfaces import IAggregatedPortletRenderer, \
       
    23     ISearchResultsPortletSettings
    23 from pyams_content.shared.view.interfaces import RELEVANCE_ORDER, VISIBLE_PUBLICATION_DATE_ORDER
    24 from pyams_content.shared.view.interfaces import RELEVANCE_ORDER, VISIBLE_PUBLICATION_DATE_ORDER
       
    25 from pyams_portal.interfaces import IPortletRendererSettings
    24 from pyams_portal.portlet import Portlet, PortletSettings, portlet_config
    26 from pyams_portal.portlet import Portlet, PortletSettings, portlet_config
    25 from pyams_utils.factory import factory_config
    27 from pyams_utils.factory import factory_config
    26 from pyams_utils.interfaces import VIEW_PERMISSION
    28 from pyams_utils.interfaces import VIEW_PERMISSION
    27 from pyams_utils.request import check_request
    29 from pyams_utils.request import check_request
    28 from pyams_utils.traversing import get_parent
    30 from pyams_utils.traversing import get_parent
    42     @staticmethod
    44     @staticmethod
    43     def has_user_query(request):
    45     def has_user_query(request):
    44         params = request.params
    46         params = request.params
    45         return params.get('user_search', '').strip()
    47         return params.get('user_search', '').strip()
    46 
    48 
    47     @staticmethod
    49     def _get_items(self, request=None, start=0, length=10, limit=None, ignore_cache=False):
    48     def _get_items(request=None, start=0, length=10, limit=None, ignore_cache=False):
       
    49         context = get_parent(request.context, ISearchFolder)
    50         context = get_parent(request.context, ISearchFolder)
    50         if context is None:
    51         if context is None:
    51             raise StopIteration
    52             raise StopIteration
    52         else:
    53         else:
    53             if request is None:
    54             if request is None:
    55             params = request.params
    56             params = request.params
    56             order_by = params.get('order_by', context.order_by)
    57             order_by = params.get('order_by', context.order_by)
    57             if (order_by == RELEVANCE_ORDER) and \
    58             if (order_by == RELEVANCE_ORDER) and \
    58                     not SearchResultsPortletSettings.has_user_query(request):
    59                     not SearchResultsPortletSettings.has_user_query(request):
    59                 request.GET['order_by'] = order_by = VISIBLE_PUBLICATION_DATE_ORDER
    60                 request.GET['order_by'] = order_by = VISIBLE_PUBLICATION_DATE_ORDER
       
    61             renderer_settings = IPortletRendererSettings(self)
       
    62             if IAggregatedPortletRenderer.providedBy(renderer_settings):
       
    63                 aggregates = renderer_settings.aggregates
       
    64             else:
       
    65                 aggregates = {}
    60             yield from context.get_results(context, order_by,
    66             yield from context.get_results(context, order_by,
    61                                            reverse=order_by != RELEVANCE_ORDER,
    67                                            reverse=order_by != RELEVANCE_ORDER,
    62                                            limit=limit,
    68                                            limit=limit,
    63                                            start=int(start),
    69                                            start=int(start),
    64                                            length=int(length),
    70                                            length=int(length),
    65                                            ignore_cache=ignore_cache,
    71                                            ignore_cache=ignore_cache,
    66                                            get_count=True,
    72                                            get_count=True,
    67                                            request=request)
    73                                            request=request,
       
    74                                            aggregates=aggregates)
    68 
    75 
    69     def get_items(self, request=None, start=0, length=10, limit=None, ignore_cache=False):
    76     def get_items(self, request=None, start=0, length=10, limit=None, ignore_cache=False):
    70         if not (self.allow_empty_query or self.has_user_query(request)):
    77         if not (self.allow_empty_query or self.has_user_query(request)):
    71             yield from iter(((), 0), )
    78             yield from iter(((), 0, {}), )
    72         else:
    79         else:
    73             check, items = tee(
    80             check, items = tee(
    74                 SearchResultsPortletSettings._get_items(request, start, length, limit,
    81                 self._get_items(request, start, length, limit,
    75                                                         ignore_cache))
    82                                 ignore_cache))
    76             try:
    83             try:
    77                 next(check)
    84                 next(check)
    78             except StopIteration:
    85             except StopIteration:
    79                 yield from iter(((), 0), )
    86                 yield from iter(((), 0, {}), )
    80             else:
    87             else:
    81                 yield from items
    88                 yield from items
    82 
    89 
    83     @staticmethod
    90     @staticmethod
    84     def get_pages(start, length, count):
    91     def get_pages(start, length, count):