mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Proper support for required fields in payment provider settings
Closes #22
This commit is contained in:
@@ -91,6 +91,9 @@ class BasePaymentProvider:
|
||||
))
|
||||
]
|
||||
)
|
||||
|
||||
.. WARNING:: It is highly discouraged to alter the ``_enabled`` field of the default
|
||||
implementation.
|
||||
"""
|
||||
return OrderedDict([
|
||||
('_enabled',
|
||||
|
||||
@@ -196,6 +196,34 @@ class EventPlugins(EventPermissionRequiredMixin, TemplateView, SingleObjectMixin
|
||||
}) + '?success=true'
|
||||
|
||||
|
||||
class PaymentMethodForm(SettingsForm):
|
||||
"""
|
||||
This is a SettingsForm, but if fields are set to required=True, validation
|
||||
errors are only raised if the payment method is enabled.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.settingspref = kwargs.pop('settingspref')
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def prepare_fields(self):
|
||||
for k, v in self.fields.items():
|
||||
v._required = v.required
|
||||
v.required = False
|
||||
v.widget.is_required = False
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
enabled = cleaned_data.get(self.settingspref + '_enabled') == 'True'
|
||||
if not enabled:
|
||||
return
|
||||
for k, v in self.fields.items():
|
||||
val = cleaned_data.get(k)
|
||||
if v._required and (val is None or val == ""):
|
||||
print(enabled, k, v)
|
||||
self.add_error(k, _('This field is required.'))
|
||||
|
||||
|
||||
class PaymentSettings(EventPermissionRequiredMixin, TemplateView, SingleObjectMixin):
|
||||
model = Event
|
||||
context_object_name = 'event'
|
||||
@@ -211,8 +239,9 @@ class PaymentSettings(EventPermissionRequiredMixin, TemplateView, SingleObjectMi
|
||||
responses = register_payment_providers.send(self.request.event)
|
||||
for receiver, response in responses:
|
||||
provider = response(self.request.event)
|
||||
provider.form = SettingsForm(
|
||||
provider.form = PaymentMethodForm(
|
||||
obj=self.request.event,
|
||||
settingspref='payment_%s_' % provider.identifier,
|
||||
data=(self.request.POST if self.request.method == 'POST' else None)
|
||||
)
|
||||
provider.form.fields = OrderedDict(
|
||||
@@ -221,6 +250,7 @@ class PaymentSettings(EventPermissionRequiredMixin, TemplateView, SingleObjectMi
|
||||
for k, v in provider.settings_form_fields.items()
|
||||
]
|
||||
)
|
||||
provider.form.prepare_fields()
|
||||
providers.append(provider)
|
||||
return providers
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ class BankTransfer(BasePaymentProvider):
|
||||
forms.CharField(
|
||||
widget=forms.Textarea,
|
||||
label=_('Bank account details'),
|
||||
required=False
|
||||
))
|
||||
]
|
||||
)
|
||||
|
||||
@@ -35,17 +35,14 @@ class Paypal(BasePaymentProvider):
|
||||
('live', 'Live'),
|
||||
('sandbox', 'Sandbox'),
|
||||
),
|
||||
required=False
|
||||
)),
|
||||
('client_id',
|
||||
forms.CharField(
|
||||
label=_('Client ID'),
|
||||
required=False
|
||||
)),
|
||||
('secret',
|
||||
forms.CharField(
|
||||
label=_('Secret'),
|
||||
required=False
|
||||
))
|
||||
]
|
||||
)
|
||||
|
||||
@@ -23,12 +23,10 @@ class Stripe(BasePaymentProvider):
|
||||
('secret_key',
|
||||
forms.CharField(
|
||||
label=_('Secret key'),
|
||||
required=False
|
||||
)),
|
||||
('publishable_key',
|
||||
forms.CharField(
|
||||
label=_('Publishable key'),
|
||||
required=False
|
||||
))
|
||||
]
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user