return [""] + result


class FormPulldownCriterion(PulldownMixin, common.FormCriterion, selection.ATSelectionCriterion):
    """A pulldown criterion"""

    archetype_name = "Pulldown Criterion"
    shortDesc = "Select one value"

    schema = selection.ATSelectionCriterion.schema.copy() + common.FormCriterion.schema.copy()
    schema.addField(field)
    del schema["operator"]
    schema["formFields"].vocabulary = common.makeVocabularyForFields(schema["value"])


common.registerCriterion(FormPulldownCriterion, orig=form_selection.FormSelectionCriterion)


class FormPortalTypePulldownCriterion(PulldownMixin, common.FormCriterion, portaltype.ATPortalTypeCriterion):
    """A portal_types pulldown criterion"""

    archetype_name = "Portal Types Pulldown Criterion"
    shortDesc = "Select one content type"

    schema = portaltype.ATPortalTypeCriterion.schema.copy() + common.FormCriterion.schema.copy()
    schema.addField(field)
    schema["formFields"].vocabulary = common.makeVocabularyForFields(schema["value"])


common.registerCriterion(FormPortalTypePulldownCriterion, orig=form_selection.FormPortalTypeCriterion)
Example #2
0
from Products.ATContentTypes.criteria import list as list_

from collective.formcriteria.criteria import common


class FormListCriterion(
    common.FormCriterion, list_.ATListCriterion):
    __doc__ = list_.ATListCriterion.__doc__

    schema = list_.ATListCriterion.schema.copy(
        ) + common.FormCriterion.schema.copy()
    schema['value'].widget.hide_form_label = True
    schema['formFields'].vocabulary = common.makeVocabularyForFields(
        schema['value'], schema['operator'])

common.registerCriterion(
    FormListCriterion, orig=list_.ATListCriterion)
Example #3
0
from Products.Archetypes import atapi
from Products.ATContentTypes.content import schemata
from Products.ATContentTypes.criteria import sort

from collective.formcriteria import interfaces
from collective.formcriteria.criteria import common


class FormSortCriterion(
    common.FormCriterion, sort.ATSortCriterion):
    __doc__ = sort.ATSortCriterion.__doc__

    schema = atapi.Schema((
        schemata.ATContentTypeSchema['title'],
        schemata.ATContentTypeSchema['description'],
        )) + sort.ATSortCriterion.schema.copy()
    shortDesc      = 'Sort results'

    def getCriteriaItems(self):
        """Only use this sort if it is the default or is specified"""
        topic = Acquisition.aq_parent(Acquisition.aq_inner(self))
        if not interfaces.IFormTopic.providedBy(topic) or (
            self.Field() != 'unsorted' and (
                self.getId() in self.REQUEST or
                Acquisition.aq_base(self) is Acquisition.aq_base(
                    topic.listSortCriteria()[0]))):
            return super(FormSortCriterion, self).getCriteriaItems()
        return ()

common.registerCriterion(FormSortCriterion, orig=sort.ATSortCriterion)
from Products.ATContentTypes.criteria import selection
from Products.ATContentTypes.criteria import portaltype
from Products.ATContentTypes.criteria import reference

from collective.formcriteria.criteria import common


class FormSelectionCriterion(common.FormCriterion, selection.ATSelectionCriterion):
    __doc__ = selection.ATSelectionCriterion.__doc__

    schema = selection.ATSelectionCriterion.schema.copy() + common.FormCriterion.schema.copy()
    schema["value"].widget.hide_form_label = True
    schema["formFields"].vocabulary = common.makeVocabularyForFields(schema["value"], schema["operator"])


common.registerCriterion(FormSelectionCriterion, orig=selection.ATSelectionCriterion)


class FormPortalTypeCriterion(common.FormCriterion, portaltype.ATPortalTypeCriterion):
    __doc__ = portaltype.ATPortalTypeCriterion.__doc__

    schema = portaltype.ATPortalTypeCriterion.schema.copy() + common.FormCriterion.schema.copy()
    schema["value"].widget.hide_form_label = True
    schema["formFields"].vocabulary = common.makeVocabularyForFields(schema["value"])


common.registerCriterion(FormPortalTypeCriterion, orig=portaltype.ATPortalTypeCriterion)


class FormReferenceCriterion(common.FormCriterion, reference.ATReferenceCriterion):
    __doc__ = reference.ATReferenceCriterion.__doc__
from Products.ATContentTypes.criteria import relativepath

from collective.formcriteria.criteria import common


class FormRelativePathCriterion(
    common.FormCriterion, relativepath.ATRelativePathCriterion):
    __doc__ = relativepath.ATRelativePathCriterion.__doc__

    schema = relativepath.ATRelativePathCriterion.schema.copy(
        ) + common.FormCriterion.schema.copy()
    schema['formFields'].vocabulary = common.makeVocabularyForFields(
        schema['relativePath'], schema['recurse'])

    def Recurse(self, **kw):
        return self.getFormFieldValue('recurse', **kw)

common.registerCriterion(FormRelativePathCriterion,
                         orig=relativepath.ATRelativePathCriterion)
from Products.ATContentTypes.criteria import simplestring

from collective.formcriteria.criteria import common


class FormSimpleStringCriterion(common.FormCriterion, simplestring.ATSimpleStringCriterion):
    __doc__ = simplestring.ATSimpleStringCriterion.__doc__

    schema = simplestring.ATSimpleStringCriterion.schema.copy() + common.FormCriterion.schema.copy()
    schema["value"].widget.hide_form_label = True
    schema["formFields"].vocabulary = common.makeVocabularyForFields(schema["value"])


common.registerCriterion(FormSimpleStringCriterion, orig=simplestring.ATSimpleStringCriterion)
        # conversion for the value returned by the widget so we have
        # to reproduce it here.
        if not value:
            value = None
        elif not isinstance(value, DateTime):
            try:
                # Convert value to non-ISO8601 representation (YYYY/MM/DD).
                # DateTime uses local timezone for non-ISO8601 strings,
                # otherwise it uses timezone naive conversion.
                # see http://dev.plone.org/plone/ticket/10141
                value = DateTime(value.replace('-', '/', 2))
            except DateTime.DateTimeError:
                value = None

        return value

    def getStart(self, **kw):
        return self.getDateTimeFormFieldValue('start', **kw)

    def getRawStart(self, **kw):
        return self.getDateTimeFormFieldValue('start', raw=True, **kw)

    def getEnd(self, **kw):
        return self.getDateTimeFormFieldValue('end', **kw)

    def getRawEnd(self, **kw):
        return self.getDateTimeFormFieldValue('end', raw=True, **kw)

common.registerCriterion(
    FormDateRangeCriterion, orig=daterange.ATDateRangeCriterion)
Example #8
0
from Products.ATContentTypes.criteria import date

from collective.formcriteria.criteria import common


class FormDateCriterion(
    common.FormCriterion, date.ATDateCriteria):
    __doc__ = date.ATDateCriteria.__doc__

    schema = date.ATDateCriteria.schema.copy(
        ) + common.FormCriterion.schema.copy()
    schema['formFields'].vocabulary = common.makeVocabularyForFields(
        schema['value'], schema['dateRange'], schema['operation'])

common.registerCriterion(
    FormDateCriterion, orig=date.ATDateCriteria)
from Products.ATContentTypes.criteria import simpleint

from collective.formcriteria.criteria import common


class FormSimpleIntCriterion(
    common.FormCriterion, simpleint.ATSimpleIntCriterion):
    __doc__ = simpleint.ATSimpleIntCriterion.__doc__

    schema = simpleint.ATSimpleIntCriterion.schema.copy(
        ) + common.FormCriterion.schema.copy()
    schema['value'].widget.hide_form_label = True
    schema['formFields'].vocabulary = common.makeVocabularyForFields(
        schema['value'], schema['value2'], schema['direction'])

    def Value2(self, **kw):
        return self.getFormFieldValue('value2', **kw)

    def getRawValue2(self, **kw):
        return self.getFormFieldValue('value2', raw=True, **kw)

    def getDirection(self, **kw):
        return self.getFormFieldValue('direction', **kw)

common.registerCriterion(
    FormSimpleIntCriterion, orig=simpleint.ATSimpleIntCriterion)
Example #10
0
from Products.ATContentTypes.criteria import path

from collective.formcriteria.criteria import common


class FormPathCriterion(
    common.FormCriterion, path.ATPathCriterion):
    __doc__ = path.ATPathCriterion.__doc__

    schema = path.ATPathCriterion.schema.copy(
        ) + common.FormCriterion.schema.copy()
    schema['value'].widget.hide_form_label = True
    schema['formFields'].vocabulary = common.makeVocabularyForFields(
        schema['value'], schema['recurse'])

    def Recurse(self, **kw):
        return self.getFormFieldValue('recurse', **kw)

common.registerCriterion(
    FormPathCriterion, orig=path.ATPathCriterion)
        if cmf_ifaces.IContentish.providedBy(parent):
            return parent


class FormContextCriterion(selection.FormSelectionCriterion):
    __doc__ = IContextCriterion.__doc__
    interface.implements(IContextCriterion)

    archetype_name = 'Context Criterion'
    shortDesc = 'Values will be taken from the context'

    schema = selection.FormSelectionCriterion.schema.copy()
    schema['value'].widget.__dict__.update(
        visible=dict(view='invisible', edit='invisible'))

    def Value(self, **kw):
        catalog = getToolByName(self, 'portal_catalog')
        context = ICriteriaContext(self)
        wrapper = component.queryMultiAdapter(
            (context, catalog), IIndexableObject)
        if wrapper is None:
            wrapper = context

        value = getattr(wrapper, self.Field())
        if safe_callable(value):
            value = value()
        return value

common.registerCriterion(
    FormContextCriterion, indices=criteria.ALL_INDICES)
Example #12
0
        'maxlength': '255',
        'blurrable': True,
        'show_form_help': True,
        })

    def process_form(self, *args, **kw):
        result = super(CommaWidget, self).process_form(
            *args, **kw)
        if not isinstance(result, tuple):
            return result

        value, mutator_kw = result
        value = [item.strip() for item in value.split(',')]
        return value, mutator_kw


class FormCommaCriterion(list_.FormListCriterion):
    """A comma separated criterion"""

    archetype_name = 'Comma Separated Criterion'
    shortDesc = 'Enter comma separated values'

    schema = list_.FormListCriterion.schema.copy()
    schema['value'].widget = CommaWidget(
        label=schema['value'].widget.label,
        description=u'Values, separated by commas.',
        hide_form_label=True)

common.registerCriterion(
    FormCommaCriterion, list_.FormListCriterion)
from Products.ATContentTypes.criteria import boolean

from collective.formcriteria.criteria import common


class FormBooleanCriterion(
    common.FormCriterion, boolean.ATBooleanCriterion):
    __doc__ = boolean.ATBooleanCriterion.__doc__

    schema = boolean.ATBooleanCriterion.schema.copy(
        ) + common.FormCriterion.schema.copy()
    schema['bool'].widget.hide_form_label = True
    schema['formFields'].vocabulary = common.makeVocabularyForFields(
        schema['bool'])

common.registerCriterion(
    FormBooleanCriterion, orig=boolean.ATBooleanCriterion)