コード例 #1
0
    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)
コード例 #2
0
 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