Event quickstart: Fix fields being marked as optional (fixes #3504) (#5627)

* Event quickstart: Fix fields being marked as optional (fixes #3504)

* Revert accidental changes

* Update src/pretix/static/pretixcontrol/js/ui/main.js

Co-authored-by: luelista <weller@rami.io>

---------

Co-authored-by: luelista <weller@rami.io>
This commit is contained in:
Raphael Michel
2025-11-18 15:46:11 +01:00
committed by GitHub
parent 5e828ab8af
commit 44804f05f3
3 changed files with 29 additions and 10 deletions

View File

@@ -1867,7 +1867,11 @@ class QuickSetupForm(I18nForm):
self.fields['payment_banktransfer_bank_details'].required = False self.fields['payment_banktransfer_bank_details'].required = False
for f in self.fields.values(): for f in self.fields.values():
if 'data-required-if' in f.widget.attrs: if 'data-required-if' in f.widget.attrs:
del f.widget.attrs['data-required-if'] f.widget.attrs['data-required-if'] += ",#id_payment_banktransfer__enabled"
self.fields['payment_banktransfer_bank_details'].widget.attrs["data-required-if"] = (
"#id_payment_banktransfer_bank_details_type_1,#id_payment_banktransfer__enabled"
)
def clean(self): def clean(self):
cleaned_data = super().clean() cleaned_data = super().clean()

View File

@@ -415,16 +415,24 @@ var form_handlers = function (el) {
el.find("input[data-required-if], select[data-required-if], textarea[data-required-if]").each(function () { el.find("input[data-required-if], select[data-required-if], textarea[data-required-if]").each(function () {
var dependent = $(this), var dependent = $(this),
dependency = $($(this).attr("data-required-if")), dependencies = $($(this).attr("data-required-if")),
update = function (ev) { update = function (ev) {
var enabled = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val(); var enabled = true;
dependencies.each(function () {
var dependency = $(this);
var e = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val();
enabled = enabled && e;
});
dependent.prop('required', enabled).closest('.form-group').toggleClass('required', enabled).find('.optional').stop().animate({ dependent.prop('required', enabled).closest('.form-group').toggleClass('required', enabled).find('.optional').stop().animate({
'opacity': enabled ? 0 : 1 'opacity': enabled ? 0 : 1
}, ev ? 500 : 1); }, ev ? 500 : 1);
}; };
update(); update();
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update); dependencies.each(function () {
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update); var dependency = $(this);
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update);
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update);
});
}); });
el.find("div.scrolling-choice:not(.no-search)").each(function () { el.find("div.scrolling-choice:not(.no-search)").each(function () {

View File

@@ -514,13 +514,17 @@ $(function () {
$("input[data-required-if], select[data-required-if], textarea[data-required-if]").each(function () { $("input[data-required-if], select[data-required-if], textarea[data-required-if]").each(function () {
var dependent = $(this), var dependent = $(this),
dependentLabel = $("label[for="+this.id+"]"), dependentLabel = $("label[for="+this.id+"]"),
dependency = $($(this).attr("data-required-if")), dependencies = $($(this).attr("data-required-if")),
update = function (ev) { update = function (ev) {
var enabled = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val(); var enabled = true;
dependencies.each(function () {
var dependency = $(this);
var e = (dependency.attr("type") === 'checkbox' || dependency.attr("type") === 'radio') ? dependency.prop('checked') : !!dependency.val();
enabled = enabled && e;
});
if (!dependent.is("[data-no-required-attr]")) { if (!dependent.is("[data-no-required-attr]")) {
dependent.prop('required', enabled); dependent.prop('required', enabled);
} }
dependent.closest('.form-group').toggleClass('required', enabled);
if (enabled) { if (enabled) {
dependentLabel.append('<i class="label-required">' + gettext('required') + '</i>'); dependentLabel.append('<i class="label-required">' + gettext('required') + '</i>');
} }
@@ -529,8 +533,11 @@ $(function () {
} }
}; };
update(); update();
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update); dependencies.each(function () {
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update); var dependency = $(this);
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("change", update);
dependency.closest('.form-group').find('input[name=' + dependency.attr("name") + ']').on("dp.change", update);
});
}); });
$("input[data-display-dependency], div[data-display-dependency], select[data-display-dependency], textarea[data-display-dependency]").each(function () { $("input[data-display-dependency], div[data-display-dependency], select[data-display-dependency], textarea[data-display-dependency]").each(function () {