def results(self, **kwargs): """Return a content listing based result set with results from the collection query. :param **kwargs: Any keyword argument, which can be used for catalog queries. :type **kwargs: keyword argument :returns: plone.app.contentlisting based result set. :rtype: ``plone.app.contentlisting.interfaces.IContentListing`` based sequence. """ # Extra filter contentFilter = self.request.get('contentFilter', {}) contentFilter.update(kwargs.get('contentFilter', {})) kwargs.setdefault('custom_query', contentFilter) kwargs.setdefault('batch', True) kwargs.setdefault('b_size', self.b_size) kwargs.setdefault('b_start', self.b_start) default_values = kwargs.pop('default_values', {}) if bool(getattr(self.context, 'show_filter', None)): fc_adapter = ICollectionFilter(self.context) filtered_result = fc_adapter.filtered_result( default_values=default_values, **kwargs) if filtered_result: return filtered_result # fallback to default return self.collection_behavior.results(**kwargs)
def events(self, ret_mode=RET_MODE_ACCESSORS, expand=True, batch=True): res = [] if self.is_collection: ctx = self.default_context # Whatever sorting is defined, we're overriding it. sort_on = 'start' sort_order = None if self.mode in ('past', 'all'): sort_order = 'reverse' query = queryparser.parseFormquery( ctx, ctx.query, sort_on=sort_on, sort_order=sort_order) custom_query = self.request.get('contentFilter', {}) if 'start' not in query or 'end' not in query: # ... else don't show the navigation bar start, end = self._start_end start, end = _prepare_range(ctx, start, end) custom_query.update(start_end_query(start, end)) # BAM ... inject our filter viewlet values fc_adapter = ICollectionFilter(ctx) res = fc_adapter.filtered_result(pquery=query, batch=False, custom_query=custom_query) if res is None: # ORIGINAL res = ctx.results(batch=False, brains=True, custom_query=custom_query) if expand: # get start and end values from the query to ensure limited # listing for occurrences _filter_start = self.request.get('_filter_start') if _filter_start: # check for pickadate day filtering fs = DateTime(_filter_start).earliestTime() fe = DateTime(_filter_start).latestTime() start, end = self._expand_events_start_end( dict(query=[fs, fe], range='minmax'), None) else: start, end = self._expand_events_start_end( query.get('start') or custom_query.get('start'), query.get('end') or custom_query.get('end')) res = expand_events( res, ret_mode, start=start, end=end, sort=sort_on, sort_reverse=True if sort_order else False) else: res = self._get_events(ret_mode, expand=expand) if batch: b_start = self.b_start b_size = self.b_size res = Batch(res, size=b_size, start=b_start, orphan=self.orphan) return res