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)
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)
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)()
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
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()
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
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
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, )
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)
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, )
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
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())
def newid(self): """ Get new id """ return Criterion().getId()