forked from CGM_Public/pretix_original
Added combined radiob uttons for <name>_asked and <name>_required fields (#1880)
This commit is contained in:
committed by
GitHub
parent
9c0c8a95fa
commit
bdf1fc2c23
@@ -501,6 +501,31 @@ class EventSettingsForm(SettingsForm):
|
|||||||
data = super().clean()
|
data = super().clean()
|
||||||
settings_dict = self.event.settings.freeze()
|
settings_dict = self.event.settings.freeze()
|
||||||
settings_dict.update(data)
|
settings_dict.update(data)
|
||||||
|
|
||||||
|
# set all dependants of virtual_keys and
|
||||||
|
# delete all virtual_fields to prevent them from being saved
|
||||||
|
for virtual_key in self.virtual_keys:
|
||||||
|
if virtual_key not in data:
|
||||||
|
continue
|
||||||
|
base_key = virtual_key.rsplit('_', 2)[0]
|
||||||
|
asked_key = base_key + '_asked'
|
||||||
|
required_key = base_key + '_required'
|
||||||
|
|
||||||
|
if data[virtual_key] == 'optional':
|
||||||
|
data[asked_key] = True
|
||||||
|
data[required_key] = False
|
||||||
|
elif data[virtual_key] == 'required':
|
||||||
|
data[asked_key] = True
|
||||||
|
data[required_key] = True
|
||||||
|
# Explicitly check for 'do_not_ask'.
|
||||||
|
# Do not overwrite as default-behaviour when no value for virtual field is transmitted!
|
||||||
|
elif data[virtual_key] == 'do_not_ask':
|
||||||
|
data[asked_key] = False
|
||||||
|
data[required_key] = False
|
||||||
|
|
||||||
|
# hierarkey.forms cannot handle non-existent keys in cleaned_data => do not delete, but set to None
|
||||||
|
data[virtual_key] = None
|
||||||
|
|
||||||
validate_event_settings(self.event, data)
|
validate_event_settings(self.event, data)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@@ -528,6 +553,39 @@ class EventSettingsForm(SettingsForm):
|
|||||||
(a, {"title": a, "data": v}) for a, v in get_fonts().items()
|
(a, {"title": a, "data": v}) for a, v in get_fonts().items()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# create "virtual" fields for better UX when editing <name>_asked and <name>_required fields
|
||||||
|
self.virtual_keys = []
|
||||||
|
for asked_key in [key for key in self.fields.keys() if key.endswith('_asked')]:
|
||||||
|
required_key = asked_key.rsplit('_', 1)[0] + '_required'
|
||||||
|
virtual_key = asked_key + '_required'
|
||||||
|
if required_key not in self.fields or virtual_key in self.fields:
|
||||||
|
# either no matching required key or
|
||||||
|
# there already is a field with virtual_key defined manually, so do not overwrite
|
||||||
|
continue
|
||||||
|
|
||||||
|
asked_field = self.fields[asked_key]
|
||||||
|
|
||||||
|
self.fields[virtual_key] = forms.ChoiceField(
|
||||||
|
label=asked_field.label,
|
||||||
|
help_text=asked_field.help_text,
|
||||||
|
required=True,
|
||||||
|
widget=forms.RadioSelect,
|
||||||
|
choices=[
|
||||||
|
# default key needs a value other than '' because with '' it would also overwrite even if combi-field is not transmitted
|
||||||
|
('do_not_ask', _('Do not ask')),
|
||||||
|
('optional', _('Ask, but do not require input')),
|
||||||
|
('required', _('Ask and require input'))
|
||||||
|
]
|
||||||
|
)
|
||||||
|
self.virtual_keys.append(virtual_key)
|
||||||
|
|
||||||
|
if self.initial[required_key]:
|
||||||
|
self.initial[virtual_key] = 'required'
|
||||||
|
elif self.initial[asked_key]:
|
||||||
|
self.initial[virtual_key] = 'optional'
|
||||||
|
else:
|
||||||
|
self.initial[virtual_key] = 'do_not_ask'
|
||||||
|
|
||||||
|
|
||||||
class CancelSettingsForm(SettingsForm):
|
class CancelSettingsForm(SettingsForm):
|
||||||
auto_fields = [
|
auto_fields = [
|
||||||
|
|||||||
@@ -106,17 +106,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% bootstrap_field sform.order_email_asked_twice layout="control" %}
|
{% bootstrap_field sform.order_email_asked_twice layout="control" %}
|
||||||
<div class="form-group">
|
{% bootstrap_field sform.order_phone_asked_required layout="control" %}
|
||||||
<label class="control-label col-md-3">
|
|
||||||
{% trans "Phone number" %}
|
|
||||||
</label>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.order_phone_asked layout="inline" form_group_class="" label=asked %}
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.order_phone_required layout="inline" form_group_class="" label=required %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-md-3">
|
<label class="control-label col-md-3">
|
||||||
{% trans "Name and address" %}
|
{% trans "Name and address" %}
|
||||||
@@ -131,50 +121,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4>{% trans "Attendee data (once per admission ticket)" %}</h4>
|
<h4>{% trans "Attendee data (once per admission ticket)" %}</h4>
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-md-3">
|
{% bootstrap_field sform.attendee_names_asked_required layout="control" %}
|
||||||
{% trans "Name" %}
|
{% bootstrap_field sform.attendee_emails_asked_required layout="control" %}
|
||||||
</label>
|
{% bootstrap_field sform.attendee_company_asked_required layout="control" %}
|
||||||
<div class="col-md-3 form-field-boundary">
|
{% bootstrap_field sform.attendee_addresses_asked_required layout="control" %}
|
||||||
{% bootstrap_field sform.attendee_names_asked layout="inline" form_group_class="" label=asked %}
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_names_required layout="inline" form_group_class="" label=required %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-md-3">
|
|
||||||
{% trans "E-mail" %}
|
|
||||||
</label>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_emails_asked layout="inline" form_group_class="" label=asked %}
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_emails_required layout="inline" form_group_class="" label=required %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-md-3">
|
|
||||||
{% trans "Company" %}
|
|
||||||
</label>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_company_asked layout="inline" form_group_class="" label=asked %}
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_company_required layout="inline" form_group_class="" label=required %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-md-3">
|
|
||||||
{% trans "Address" %}
|
|
||||||
</label>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_addresses_asked layout="inline" form_group_class="" label=asked %}
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 form-field-boundary">
|
|
||||||
{% bootstrap_field sform.attendee_addresses_required layout="inline" form_group_class="" label=required %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-md-3">
|
<label class="control-label col-md-3">
|
||||||
{% trans "Custom fields" %}
|
{% trans "Custom fields" %}
|
||||||
|
|||||||
Reference in New Issue
Block a user