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,
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'