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): |