Exemple #1
0
class FGLocationField(BaseFormField):
    """ A string entry field """

    security = ClassSecurityInfo()

    schema = BaseFieldSchema.copy()

    # hide references & discussion
    finalizeFieldSchema(schema, folderish=True, moveDiscussion=False)

    # Standard content type setup
    portal_type = meta_type = 'FormLocationField'
    archetype_name = 'Location Field'
    content_icon = 'location_icon.gif'
    typeDescription = 'A location field'

    def __init__(self, oid, **kwargs):
        """ initialize class """

        super(BaseFormField, self).__init__(oid, **kwargs)

        # set a preconfigured field as an instance attribute
        self.fgField = MyLocationField(
            'fg_location_field',
            languageIndependent=1,
            default_method="getDefaultLocation",
            required=True,
            write_permission=View,
            validators=('isGeoLocation', ),
            tmp_value=None,
            widget=LocationWidget(label='Location', ),
        )

    def fgPrimeDefaults(self, request, contextObject=None):
        """ primes request with default value"""

        BaseFormField.fgPrimeDefaults(self, request, contextObject)

        form_val = request.get(self.fgField.__name__, None)
        if form_val:
            self.fgField.tmp_value = form_val
        else:
            config = getMultiAdapter((self, request),
                                     name="maps_configuration")
            self.fgField.tmp_value = config.default_location
            request.form.setdefault(self.fgField.__name__,
                                    self.fgField.tmp_value)
class FGStripeField(FGStringField):
    """ A string entry field """

    implements(IStripeField)

    security = ClassSecurityInfo()

    schema = FGStringField.schema.copy() + Schema(
        (LinesField(
            'amounts',
            required=False,
            accessor="getAmounts",
            mutator="setAmounts",
            searchable=False,
            widget=LinesWidget(
                label='Available amounts',
                description='You can also provide a description of value '
                'using the | operator. Example: 10.00|$10 small')),
         BooleanField('variable',
                      required=False,
                      default=True,
                      searchable=False,
                      widget=BooleanWidget(label='Allow variable amount')),
         StringField('variableLabel',
                     required=True,
                     default='Amount: $',
                     searchable=False,
                     widget=StringWidget(
                         label='Label used for variable amount field')),
         FixedPointField(
             'fixedPrice',
             required=False,
             default='0.00',
             searchable=False,
             widget=DecimalWidget(
                 label='Fixed amount',
                 description='If filled in, ignore previous 2 fields.')),
         StringField('stripeSecretKey',
                     require=True,
                     searchable=False,
                     view_permission=ModifyPortalContent,
                     widget=StringWidget(label='Stripe Secret Key')),
         StringField('stripePublishableKey',
                     require=True,
                     searchable=False,
                     widget=StringWidget(label='Stripe Publishable Key')),
         StringField('stripePanelLabel',
                     required=True,
                     searchable=False,
                     default='More info about this',
                     widget=StringWidget(
                         label='The label of the payment button in the '
                         'Checkout form')),
         StringField(
             'stripeLabel',
             required=True,
             searchable=False,
             default='Authorize Donation',
             widget=StringWidget(label='Specify the text to be shown on the '
                                 'default blue button')),
         StringField('stripeCurrency',
                     required=True,
                     searchable=False,
                     default='USD',
                     widget=StringWidget(label='3 letter ISO currency code')),
         LinesField(
             'stripeMetadata',
             required=False,
             default=[],
             vocabulary='getPFGFields',
             multiValued=True,
             widget=MultiSelectionWidget(
                 label='Metadata Fields',
                 description=
                 'Select the fields that should be included as metadata. '
                 'You can only include 10 fields. Extras will be striped.'))))
    schema['required'].default = True
    schema['required'].widget.visible['edit'] = 'hidden'
    schema['hidden'].widget.visible['edit'] = 'hidden'
    schema['fgDefault'].widget.visible['edit'] = 'hidden'
    schema['fgmaxlength'].widget.visible['edit'] = 'hidden'
    schema['fgsize'].widget.visible['edit'] = 'hidden'
    schema['fgStringValidator'].widget.visible['edit'] = 'hidden'

    finalizeFieldSchema(schema, folderish=True, moveDiscussion=False)

    # Standard content type setup
    portal_type = meta_type = 'FormStripeField'
    archetype_name = 'StripeField'

    def __init__(self, oid, **kwargs):
        """ initialize class """

        super(FGStripeField, self).__init__(oid, **kwargs)

        # set a preconfigured field as an instance attribute
        self.fgField = StripeField('fg_stripe_field',
                                   searchable=0,
                                   required=0,
                                   write_permission=View,
                                   widget=StripeWidget(),
                                   amounts=('10.00', '25.00', '50.00',
                                            '100.00'),
                                   variable=True,
                                   variableLabel='Amount: $',
                                   fixedPrice='0.00',
                                   stripeSecretKey='',
                                   stripePublishableKey='',
                                   stripePanelLabel='More info about this',
                                   stripeLabel='Authorize Donation',
                                   stripeCurrency='USD')

    def getPFGFields(self):
        form = aq_parent(aq_inner(self))
        if form.portal_type == 'TempFolder':
            form = aq_parent(form)
        values = []
        for field in form.values():
            if (IPloneFormGenField.providedBy(field)
                    and not IStripeField.providedBy(field)):
                values.append((field.getId(), field.Title()))
        return DisplayList(values)

    security.declareProtected(ModifyPortalContent, 'getStripeSecretKey')

    def getStripeSecretKey(self):  # noqa
        return self.fgField.stripeSecretKey

    security.declareProtected(ModifyPortalContent, 'setStripeSecretKey')

    def setStripeSecretKey(self, value, **kw):  # noqa
        self.fgField.stripeSecretKey = value

    security.declareProtected(View, 'getAmounts')

    def getAmounts(self):  # noqa
        return self.fgField.amounts

    security.declareProtected(ModifyPortalContent, 'setAmounts')

    def setAmounts(self, value, **kw):  # noqa
        self.fgField.amounts = value
        self.amounts = value

    # yikes, I'm lazy
    for fieldName in [
            'variable', 'variableLabel', 'fixedPrice', 'stripePublishableKey',
            'stripePanelLabel', 'stripeLabel', 'stripeCurrency'
    ]:
        upper = fieldName[0].upper() + fieldName[1:]
        exec('''
security.declareProtected(View, 'get%(upper)s')
def get%(upper)s(self):
    return getattr(self.fgField, '%(name)s', '')

security.declareProtected(ModifyPortalContent, 'set%(upper)s')
def set%(upper)s(self, value, **kw):
    self.fgField.%(name)s = value
''' % {
            'name': fieldName,
            'upper': upper
        })

    def htmlValue(self, REQUEST):
        value = REQUEST.form.get(self.__name__, 'No Input')
        if type(value) != dict:
            return 'Invalid'
        if 'error' in value:
            return 'Error charging'
        if 'charge_data' not in value:
            return 'Card not charged for some reason'
        return 'Charged to %s for $%s' % (value['charge_data']['email'],
                                          value['original-amount'])
    finalizeFieldSchema,
    BaseFormField,
    BaseFieldSchemaStringDefault,
)
from . import config


email_schema = BaseFieldSchemaStringDefault.copy() + atapi.Schema((
))


del starrating_schema['hidden']
del starrating_schema['serverSide']


finalizeFieldSchema(starrating_schema, folderish=True, moveDiscussion=False)


class FormEmailField(BaseFormField):
    """Email Field.
    """
    meta_type = 'FormEmailField'
    security = ClassSecurityInfo()
    schema = email_schema

    def __init__(self, oid, **kwargs):
        BaseFormField.__init__(self, oid, **kwargs)

        # set a preconfigured field as an instance attribute
        self.fgField = StringField('fg_email_field',
            searchable=0,
Exemple #4
0
class PFGSelectionStringField(FGSelectionField):
    """Selection String Field"""

    schema = BaseFieldSchemaStringDefault.copy() + Schema((
        vocabularyField.copy(),
        vocabularyOverrideField.copy(),
        StringField(
            name='fgFormat',
            searchable=0,
            required=0,
            default='flex',
            enforceVocabulary=1,
            vocabulary='formatVocabDL',
            widget=SelectionWidget(
                label='Presentation Widget',
                i18n_domain="ploneformgen",
                label_msgid="label_fgformat_text",
                description_msgid="help_fgformat_text"))))

    schema['fgVocabulary'].widget.description = _(
        "Use one line per option. Format: 'value|label|description'.")

    finalizeFieldSchema(schema, folderish=True, moveDiscussion=False)

    portal_type = 'PFGSelectionStringField'
    implements(IPFGSelectionStringField)

    def __init__(self, oid, **kwargs):
        """ initialize class """

        FGSelectionField.__init__(self, oid, **kwargs)

        # set a preconfigured field as an instance attribute
        self.fgField = StringVocabularyField(
            name='fg_selection_field',
            searchable=0,
            required=0,
            widget=SelectionStringWidget(),
            vocabulary='_get_selection_vocab',
            enforceVocabulary=1,
            write_permission=View)

    def htmlValue(self, REQUEST):
        """ Return value instead of key """
        utils = getToolByName(self, 'plone_utils')
        charset = utils.getSiteEncoding()
        value = REQUEST.form.get(self.__name__, '')
        vu = value.decode(charset)
        vocabulary = self.fgField.Vocabulary(self)
        item = dict(vocabulary).get(vu)
        if self.fgFormat == 'radio' or (self.fgFormat == 'flex' and len(vocabulary) <= 4):
            name = '{}_{}'.format(self.__name__, vu)
        else:
            name = '{}_SELECT'.format(self.__name__)
        desc = REQUEST.form.get(name, None)
        if item is None:
            return vu
        elif desc is None:
            return safe_unicode(cgi.escape(item[0].encode(charset)))
        else:
            return '{}<br />{}'.format(safe_unicode(cgi.escape(item[0].encode(charset))), safe_unicode(cgi.escape(desc.decode(charset))))
        IntegerField('fgFutureYears',
            searchable=0,
            required=0,
            default='20',
            widget=IntegerWidget(
                label='Future Years To Display',
                i18n_domain = "ploneformgen",
                label_msgid = "label_fgfutureyears_text",
                description = """The number of future years to offer in the year drop-down.
                 (This is only applicable if you have not specified an ending year.)""",
                description_msgid = "help_fgfutureyears_text",
                ),
        ),
    ))

finalizeFieldSchema(ccexpdate_schema, folderish=True, moveDiscussion=False)


class FGCCExpirationDateField(BaseFormField):
    """ CC Expiration Date Entry Field """
    
    implements(IFGCCExpirationDateField)
    security  = ClassSecurityInfo()
    
    schema = ccexpdate_schema

    # Standard content type setup
    portal_type ='FormExpirationDateField'
    content_icon = 'DateTimeField.gif'
    typeDescription= 'CC Expiration Date Entry Field'