Exemplo n.º 1
0
    def __criteria(self):

        criteria = [
            Criterion(
                widget="criteria",
                title="Current search",
                position="center",
                section="default",
                hidden=False,
            ),
            Criterion(
                _cid_="SearchableText",
                widget="text",
                title="Search Courses",
                index="SearchableText",
                position="right",
                section="default",
                wildcard=True,
                onlyallelements=True,
                hidden=False,
            )
        ]

        criteria.extend(self.getFields())

        return PersistentList(criteria)
 def test_sortreversed(self):
     data = Criterion()
     data.sortreversed = u'0'
     widget = CollectionWidget(self.folder, self.request, data=data)
     self.assertFalse(widget.sortreversed)
     data.sortreversed = u'1'
     widget = CollectionWidget(self.folder, self.request, data=data)
     self.assertTrue(widget.sortreversed)
 def test_hidealloption(self):
     data = Criterion()
     data.hidealloption = u'0'
     widget = CollectionWidget(self.folder, self.request, data=data)
     self.assertFalse(widget.hidealloption)
     data.hidealloption = u'1'
     widget = CollectionWidget(self.folder, self.request, data=data)
     self.assertTrue(widget.hidealloption)
 def test_default_term_value(self):
     data = Criterion(
         vocabulary=COLLECTION_VOCABULARY
     )
     data.sortreversed = u'0'
     widget = CollectionWidget(self.folder, self.request, data=data)
     self.assertEquals(widget.default_term_value, self.collection1)
     data.sortreversed = u'1'
     widget = CollectionWidget(self.folder, self.request, data=data)
     self.assertEquals(widget.default_term_value, self.collection2)
Exemplo n.º 5
0
    def __init__(self, context):
        """Handle criteria"""
        original_context_uid = api.content.get_uuid(context)
        super(Criteria, self).__init__(context)

        portal = api.portal.get()
        self.context = portal["classification_folder_faceted_configuration"]
        self.criteria = PersistentList()

        for crit in self._criteria():
            if crit.index != u"classification_folders" or crit.widget != u"sorting":
                self.criteria.append(crit)

        default = [
            original_context_uid,
            "p:{0}".format(original_context_uid),
        ]
        select_criterion = Criterion(
            **{
                "_cid_": u"restrictfolder",
                "widget": u"multiselect",
                "title": u"Classification folder",
                "index": u"classification_folders",
                "vocabulary": u"",
                "catalog": u"portal_catalog",
                "hidealloption": u"False",
                "position": u"right",
                "section": u"default",
                "hidden": u"True",
                "custom_css": u"",
                "count": u"False",
                "sortcountable": u"False",
                "hidezerocount": u"False",
                "sortreversed": u"False",
                "operator": u"or",
                "multiple": True,
                "default": default,
            })
        self.criteria.append(select_criterion)

        sort_criterion = Criterion(
            **{
                "_cid_": u"sorton",
                "title": u"Sort on",
                "position": u"top",
                "section": u"default",
                "hidden": u"True",
                "default": u"created(reverse)",
                "widget": u"sorting",
            })
        self.criteria.append(sort_criterion)
Exemplo n.º 6
0
    def __call__(self, **kwargs):
        kwargs.update(self.request.form)
        criterion_id = kwargs.get('criterion', '').split('_')[0]

        criterion = self.get_criterion(criterion_id)
        # Not added yet use an empty one
        if not criterion:
            criterion = Criterion()

        widget_id = kwargs.get('widget', criterion.get('widget', ''))
        widget = self.get_widget(widget_id)
        if not widget:
            return ''

        return Schema(self.context, self.request, widget, criterion)()
Exemplo n.º 7
0
    def __call__(self, **kwargs):
        kwargs.update(self.request.form)
        criterion_id = kwargs.get('criterion', '').split('_')[0]

        criterion = self.get_criterion(criterion_id)
        # Not added yet use an empty one
        if not criterion:
            criterion = Criterion()

        widget_id = kwargs.get('widget', criterion.get('widget', ''))
        widget = self.get_widget(widget_id)
        if not widget:
            return ''

        return Schema(self.context, self.request, widget, criterion)()
Exemplo n.º 8
0
def upgrade_to_1004_daterange_widget(context):
    from eea.facetednavigation.subtypes.interfaces import IFacetedNavigable
    from eea.facetednavigation.layout.interfaces import IFacetedLayout
    from eea.facetednavigation.interfaces import ICriteria
    from eea.facetednavigation.widgets.storage import Criterion

    brains = api.content.find(object_provides=IFacetedNavigable.__identifier__)
    layouts = ("faceted-agenda-ungrouped-view-items",
               "faceted-agenda-view-items")
    for brain in brains:
        obj = brain.getObject()
        if IFacetedLayout(obj).layout not in layouts:
            continue
        criterion = ICriteria(obj)
        for key, criteria in criterion.items():
            if criteria.get("widget") != "daterange":
                continue
            if criteria.get("usePloneDateFormat") is True:
                continue
            logger.info("Upgrade daterange widget for faceted {0}".format(obj))
            position = criterion.criteria.index(criteria)
            values = criteria.__dict__
            values["usePloneDateFormat"] = True
            criterion.criteria[position] = Criterion(**values)
            criterion.criteria._p_changed = 1
Exemplo n.º 9
0
    def add(self, wid, position, section='default', **kwargs):
        """ Add criterion
        """
        widget = self.widget(wid)
        if not widget:
            raise NameError("Widget type '%s' is undefined" % wid)

        properties = {}
        criteria = self.criteria
        taken_ids = [criterion.getId() for criterion in criteria]
        properties['_taken_ids_'] = taken_ids
        properties.update(kwargs)

        criterion = Criterion(widget=wid, position=position,
                              section=section, **properties)
        criteria.append(criterion)
        return criterion.getId()
Exemplo n.º 10
0
    def add(self, wid, position, section='default', **kwargs):
        """ Add criterion
        """
        widget = self.widget(wid)
        if not widget:
            raise NameError("Widget type '%s' is undefined" % wid)

        properties = {}
        criteria = self.criteria
        taken_ids = [criterion.getId() for criterion in criteria]
        properties['_taken_ids_'] = taken_ids
        if '_cid_' in kwargs:
            properties['_cid_'] = kwargs.pop('_cid_')
        criterion = Criterion(widget=wid,
                              position=position,
                              section=section,
                              **properties)

        # insert the new criterion at the right place in criteria
        voc = getUtility(IVocabularyFactory,
                         'eea.faceted.vocabularies.WidgetPositions')
        # we need to take into account position and section
        positions = []
        for term in voc(self.context):
            positions.append('{0}_default'.format(term.value))
            positions.append('{0}_advanced'.format(term.value))
        # will be inserted at the end by default
        insert_index = len(criteria)
        crit_pos_sect = '{0}_{1}'.format(position, section)
        for index, stored_criterion in enumerate(criteria):
            stored_crit_pos_sect = '{0}_{1}'.format(stored_criterion.position,
                                                    stored_criterion.section)
            if (positions.index(crit_pos_sect) <
                    positions.index(stored_crit_pos_sect)):
                insert_index = index
                break
        criteria.insert(insert_index, criterion)

        cid = criterion.getId()
        if kwargs:
            self.edit(cid, **kwargs)
        return cid
Exemplo n.º 11
0
 def criteria(self):
     """ Get faceted criteria from ancestor
     """
     if not self.ancestor:
         return [
             Criterion(widget='path',
                       index='path',
                       hidden=True,
                       default=self.context.absolute_url(1)),
         ]
     return ICriteria(self.ancestor).criteria
Exemplo n.º 12
0
    def add(self, wid, position, section='default', **kwargs):
        """ Add criterion
        """
        widget = self.widget(wid)
        if not widget:
            raise NameError("Widget type '%s' is undefined" % wid)

        properties = {}
        criteria = self.criteria
        taken_ids = [criterion.getId() for criterion in criteria]
        properties['_taken_ids_'] = taken_ids
        if '_cid_' in kwargs:
            properties['_cid_'] = kwargs.pop('_cid_')
        criterion = Criterion(widget=wid, position=position,
                              section=section, **properties)

        # insert the new criterion at the right place in criteria
        voc = getUtility(IVocabularyFactory,
                         'eea.faceted.vocabularies.WidgetPositions')
        # we need to take into account position and section
        positions = []
        for term in voc(self.context):
            positions.append('{0}_default'.format(term.value))
            positions.append('{0}_advanced'.format(term.value))
        # will be inserted at the end by default
        insert_index = len(criteria)
        crit_pos_sect = '{0}_{1}'.format(position, section)
        for index, stored_criterion in enumerate(criteria):
            stored_crit_pos_sect = '{0}_{1}'.format(stored_criterion.position,
                                                    stored_criterion.section)
            if (positions.index(crit_pos_sect) <
               positions.index(stored_crit_pos_sect)):
                insert_index = index
                break
        criteria.insert(insert_index, criterion)

        cid = criterion.getId()
        if kwargs:
            self.edit(cid, **kwargs)
        return cid
Exemplo n.º 13
0
    def getFields(self):

        fields = [x[1] for x in degree_index_field]

        def sort_order(x):
            try:
                return fields.index(x)
            except ValueError:
                return 99999

        sorted_fields = sorted(IDegree.namesAndDescriptions(),
                               key=lambda x: sort_order(x[0]))

        for (key, field) in sorted_fields:

            if key in fields:

                # Set the cid to the key, minus underscores.
                cid = key
                cid = cid.replace('_', '')

                # Get the vocabulary name
                try:
                    value_type = field.value_type
                except AttributeError:
                    vocabulary_name = ""
                    catalog = "portal_catalog"
                else:
                    vocabulary_name = value_type.vocabularyName
                    catalog = ""

                # Title is the field title
                title = field.title

                yield Criterion(
                    _cid_=cid,
                    widget="checkbox_degree_explorer",
                    title=title,
                    index=self.idx(key),
                    operator="or",
                    operator_visible=False,
                    vocabulary=vocabulary_name,
                    position="left",
                    section="default",
                    hidden=False,
                    count=True,
                    catalog=catalog,
                    sortcountable=False,
                    hidezerocount=False,
                    maxitems=50,
                    sortreversed=False,
                )
Exemplo n.º 14
0
    def __criteria(self):

        criteria = [
            Criterion(
                widget="criteria_degree_explorer",
                title="Active Filters",
                position="center",
                section="default",
                hidden=False,
            ),
        ]

        criteria.extend(self.getFields())

        return PersistentList(criteria)
Exemplo n.º 15
0
    def getFields(self):

        fields = ['department', 'course_prefix']

        for (key, field) in ICourse.namesAndDescriptions():

            if key in fields:

                # Set the cid to the key, minus underscores.
                cid = key
                cid = cid.replace('_', '')

                # Get the vocabulary name
                try:
                    value_type = field.value_type
                except AttributeError:
                    vocabulary_name = ""
                    catalog = "portal_catalog"
                else:
                    vocabulary_name = value_type.vocabularyName
                    catalog = ""

                # Title is the field title
                title = field.title

                yield Criterion(
                    _cid_=cid,
                    widget="checkbox",
                    title=title,
                    index=key,
                    operator="or",
                    operator_visible=False,
                    vocabulary=vocabulary_name,
                    position="right",
                    section="default",
                    hidden=False,
                    count=True,
                    catalog=catalog,
                    sortcountable=False,
                    hidezerocount=False,
                    maxitems=50,
                    sortreversed=False,
                )
Exemplo n.º 16
0
def update_dashboards():
    # update daterange criteria
    brains = api.content.find(object_provides=IFacetedNavigable.__identifier__,
                              portal_type='Folder')
    for brain in brains:
        obj = brain.getObject()
        criterion = ICriteria(obj)
        for key, criteria in criterion.items():
            if criteria.get("widget") != "daterange":
                continue
            if criteria.get("usePloneDateFormat") is True:
                continue
            logger.info("Upgrade daterange widget for faceted {0}".format(obj))
            position = criterion.criteria.index(criteria)
            values = criteria.__dict__
            values["usePloneDateFormat"] = True
            values["labelStart"] = u'Start date'
            values["labelEnd"] = u'End date'
            criterion.criteria[position] = Criterion(**values)
            criterion.criteria._p_changed = 1
Exemplo n.º 17
0
    def __init__(self, context):
        """ Handle criteria
        """
        original_context = context
        super(Criteria, self).__init__(context)
        self.context = get_criteria_holder(context)

        self.criteria = []
        for crit in self._criteria():
            if crit.widget == u'sorting':
                criterion = Criterion(
                    **{
                        '_cid_': u'c0',
                        'title': u'Sort on',
                        'position': u'top',
                        'section': u'default',
                        'hidden': u'True',
                        'default': u'getObjPositionInParent',
                        'widget': u'sorting'
                    })
                self.criteria.append(criterion)
                continue
            self.criteria.append(crit)
        portal_path = len(original_context.portal_url.getPortalPath())
        criterion = Criterion(
            **{
                '_cid_':
                u'restrictpath',
                'hidden':
                u'True',
                'default':
                unicode('/'.join(original_context.getPhysicalPath())
                        [portal_path:]),
                'depth':
                u'',
                'index':
                u'path',
                'position':
                u'left',
                'root':
                u'/',
                'section':
                u'default',
                'theme':
                u'green',
                'title':
                u'path',
                'widget':
                u'path'
            })
        self.criteria.append(criterion)

        if self.context.id == 'pstactions' and context.portal_type in (
                'operationalobjective', 'pstaction'):
            criterion = Criterion(
                **{
                    '_cid_': u'portaltype',
                    'hidden': u'True',
                    'default': restrict_pt_to[context.portal_type],
                    'index': u'portal_type',
                    'position': u'left',
                    'section': u'default',
                    'title': u'Portal type',
                    'count': u'False',
                    'widget': u'text'
                })
            self.criteria.append(criterion)
 def test_bounds_widget_template(self):
     data = Criterion()
     widget = Widget(self.folder, self.request, data=data)
     self.assertIn('style="display: none"', widget.index())
     self.assertIn('faceted-bounds-widget', widget.index())
Exemplo n.º 19
0
 def newid(self):
     """ Get new id
     """
     return Criterion().getId()