forked from CGM_Public/pretix_original
Enforce that questions cannot depend on other question which are asked during checkin (Z#2352753)
This commit is contained in:
@@ -249,6 +249,9 @@ class QuestionSerializer(I18nAwareModelSerializer):
|
|||||||
|
|
||||||
dep = full_data.get('dependency_question')
|
dep = full_data.get('dependency_question')
|
||||||
if dep:
|
if dep:
|
||||||
|
if dep.ask_during_checkin:
|
||||||
|
raise ValidationError(_('Question cannot depend on a question asked during check-in.'))
|
||||||
|
|
||||||
seen_ids = {self.instance.pk} if self.instance else set()
|
seen_ids = {self.instance.pk} if self.instance else set()
|
||||||
while dep:
|
while dep:
|
||||||
if dep.pk in seen_ids:
|
if dep.pk in seen_ids:
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ class QuestionForm(I18nModelForm):
|
|||||||
self.fields['items'].queryset = self.instance.event.items.all()
|
self.fields['items'].queryset = self.instance.event.items.all()
|
||||||
self.fields['items'].required = True
|
self.fields['items'].required = True
|
||||||
self.fields['dependency_question'].queryset = self.instance.event.questions.filter(
|
self.fields['dependency_question'].queryset = self.instance.event.questions.filter(
|
||||||
type__in=(Question.TYPE_BOOLEAN, Question.TYPE_CHOICE, Question.TYPE_CHOICE_MULTIPLE)
|
type__in=(Question.TYPE_BOOLEAN, Question.TYPE_CHOICE, Question.TYPE_CHOICE_MULTIPLE),
|
||||||
|
ask_during_checkin=False
|
||||||
)
|
)
|
||||||
if self.instance.pk:
|
if self.instance.pk:
|
||||||
self.fields['dependency_question'].queryset = self.fields['dependency_question'].queryset.exclude(
|
self.fields['dependency_question'].queryset = self.fields['dependency_question'].queryset.exclude(
|
||||||
@@ -65,6 +66,9 @@ class QuestionForm(I18nModelForm):
|
|||||||
def clean_dependency_question(self):
|
def clean_dependency_question(self):
|
||||||
dep = val = self.cleaned_data.get('dependency_question')
|
dep = val = self.cleaned_data.get('dependency_question')
|
||||||
if dep:
|
if dep:
|
||||||
|
if dep.ask_during_checkin:
|
||||||
|
raise ValidationError(_('Question cannot depend on a question asked during check-in.'))
|
||||||
|
|
||||||
seen_ids = {self.instance.pk} if self.instance else set()
|
seen_ids = {self.instance.pk} if self.instance else set()
|
||||||
while dep:
|
while dep:
|
||||||
if dep.pk in seen_ids:
|
if dep.pk in seen_ids:
|
||||||
|
|||||||
Reference in New Issue
Block a user