Example #1
0
    def __call__(self):
        topic = getTopic(self.context, self.request)
        listCriteria = topic.listCriteria()
        topicCriteria = interfaces.IListCriterias(topic)()
        if topicCriteria:
            selectedCriteria = self.request.cookies.get('sfqueryDisplay',
                                   topic.REQUEST.cookies.get('sfqueryDisplay',
                                                       topicCriteria.keys()[0]))
            criteria = [a for a in listCriteria if a.Field() == selectedCriteria]
        else:
            criteria = listCriteria

        criteria = [a for a in criteria if a.meta_type in
                    ['ATPortalTypeCriterion',
                     'ATSelectionCriterion',
                     'ATListCriterion']
                   ]
        if not criteria:
            return False
        criteria = criteria[0]
        if criteria.meta_type == 'ATPortalTypeCriterion':
            return {
                'name': criteria.Field(),
                'values': list(criteria.getCriteriaItems()[0][1])
            }
        if criteria.meta_type in ['ATSelectionCriterion', 'ATListCriterion']:
            return {
                'name': criteria.Field(),
                'values': list(criteria.getCriteriaItems()[0][1]['query']) + ['']
            }
        return False
Example #2
0
    def __call__(self):
        topic = getTopic(self.context, self.request)
        listCriteria = self.context.query
        topicCriteria = interfaces.IListCriterias(topic)()
        if topicCriteria:
            selectedCriteria = self.request.cookies.get(
                'sfqueryDisplay',
                topic.REQUEST.cookies.get('sfqueryDisplay',
                                          topicCriteria.keys()[0]))
            criteria = [a for a in listCriteria if a['i'] == selectedCriteria]
        else:
            criteria = listCriteria

        criteria = [
            a for a in criteria if a['o'] in [
                'plone.app.querystring.operation.selection.is',
                'plone.app.querystring.operation.list.contains'
            ] or a['i'] == 'portal_type'
        ]
        if not criteria:
            return False

        criteria = criteria[0]

        return {'name': criteria['i'], 'values': criteria['v']}
Example #3
0
    def _getCriteriaArgs(self):
        context, request = self.context, self.request
        response = request.response

        query = context.buildQuery()
        topicCriteria = interfaces.IListCriterias(context)()
        listCriteria = context.listCriteria()
        _args = {}
        if not query:
            return ({}, [])

        props = getToolByName(context, 'portal_properties')
        charset = props and props.site_properties.default_charset or 'utf-8'

        if 'Type' in query.keys():
            items = getCookieItems(request, 'Type', charset)
            if items:
                _args['Type'] = items
            else:
                _args['Type'] = query['Type']
        elif 'portal_type' in query.keys():
            items = getCookieItems(request, 'portal_type', charset)
            if items:
                _args['portal_type'] = items
            else:
                _args['portal_type'] = query['portal_type']
        filters = []
        #reinit cookies if criterions are no more there
        for cId in [c.Field() for c in listCriteria]:
            if cId not in topicCriteria.keys():
                response.expireCookie(cId)

        if request.cookies.get('sfqueryDisplay',
                               None) not in topicCriteria.keys():
            response.expireCookie('sfqueryDisplay')

        for criteria in listCriteria:
            criteriaId = criteria.Field()
            if criteriaId and criteria.meta_type not in [
                    'ATSelectionCriterion', 'ATListCriterion',
                    'ATSortCriterion', 'ATPortalTypeCriterion'
            ]:
                _args[criteriaId] = query[criteriaId]
            elif criteria.meta_type in ['ATSelectionCriterion',
                                        'ATListCriterion'] \
               and criteria.getCriteriaItems() \
               and len(criteria.getCriteriaItems()[0]) > 1 \
               and len(criteria.getCriteriaItems()[0][1]['query']) > 0:
                items = getCookieItems(request, criteriaId, charset)
                if items and criteriaId in topicCriteria.keys():
                    if 'undefined' in items:
                        filters.append({'name': criteriaId, 'values': items})
                    else:
                        _args[criteriaId] = items
                else:
                    _args[criteriaId] = query[criteriaId]

        return _args, filters
Example #4
0
    def _getCriteriaArgs(self):
        context, request = self.context, self.request
        response = request.response

        listCriteria = context.query

        # Handle operator-only query strings accordingly.
        # Also convert to str since unicode breaks the catalog-query
        query = dict([
            'v' in a and (str(a['i']), [str(value) for value in a['v']])
            or (str(a['i']), [str(value) for value in a['o']])
            for a in listCriteria
        ])

        topicCriteria = interfaces.IListCriterias(context)()
        _args = {}
        if not query:
            return ({}, [])

        props = getToolByName(context, 'portal_properties')
        charset = props and props.site_properties.default_charset or 'utf-8'

        if 'Type' in query.keys():
            items = getCookieItems(request, 'Type', charset)
            if items:
                _args['Type'] = items
            else:
                _args['Type'] = query['Type']
        filters = []
        #reinit cookies if criterions are no more there
        for cId in [c['i'] for c in listCriteria]:
            if cId not in topicCriteria.keys():
                response.expireCookie(cId)

        if request.cookies.get('sfqueryDisplay',
                               None) not in topicCriteria.keys():
            response.expireCookie('sfqueryDisplay')

        for criteria in listCriteria:
            criteriaId = criteria['i']
            if criteria['o'] not in \
               ['plone.app.querystring.operation.selection.is',
                'plone.app.querystring.operation.list.contains'] \
               and criteriaId != 'portal_type':
                _args[criteriaId] = query[criteriaId]
            else:
                items = getCookieItems(request, criteriaId, charset)
                if items and criteriaId in topicCriteria.keys():
                    if 'undefined' in items:
                        filters.append({'name': criteriaId, 'values': items})
                    else:
                        _args[criteriaId] = items
                else:
                    _args[criteriaId] = query[criteriaId]

        return _args, filters
Example #5
0
    def _getCriteriaArgs(self):
        context, request = self.context, self.request
        response = request.response

        listCriteria = context.query

        query = dict([(key, convert(value))
                      for key, value in queryparser.parseFormquery(
                          context, listCriteria).items()])

        topicCriteria = interfaces.IListCriterias(context)()
        _args = {}
        if not query:
            return ({}, [])

        props = getToolByName(context, 'portal_properties')
        charset = props and props.site_properties.default_charset or 'utf-8'

        if 'Type' in query.keys():
            items = getCookieItems(request, 'Type', charset)
            if items:
                _args['Type'] = items
            else:
                _args['Type'] = query['Type']
        filters = []
        #reinit cookies if criterions are no more there
        for cId in [c['i'] for c in listCriteria]:
            if cId not in topicCriteria.keys():
                response.expireCookie(cId)

        if request.cookies.get('sfqueryDisplay',
                               None) not in topicCriteria.keys():
            response.expireCookie('sfqueryDisplay')

        for criteria in listCriteria:
            criteriaId = criteria['i']
            if criteria['o'] not in \
               ['plone.app.querystring.operation.selection.is',
                'plone.app.querystring.operation.list.contains'] \
               and criteriaId != 'portal_type':
                _args[criteriaId] = query[criteriaId]
            else:
                items = getCookieItems(request, criteriaId, charset)
                if items and criteriaId in topicCriteria.keys():
                    if 'undefined' in items:
                        filters.append({'name': criteriaId, 'values': items})
                    else:
                        _args[criteriaId] = items
                else:
                    _args[criteriaId] = query[criteriaId]

        return _args, filters