diff --git a/src/pretix/api/serializers/item.py b/src/pretix/api/serializers/item.py index 8fda6d921..7bfee1492 100644 --- a/src/pretix/api/serializers/item.py +++ b/src/pretix/api/serializers/item.py @@ -541,6 +541,7 @@ class LegacyDependencyValueField(serializers.CharField): class QuestionSerializer(I18nAwareModelSerializer): options = InlineQuestionOptionSerializer(many=True, required=False) identifier = serializers.CharField(allow_null=True) + internal_name = serializers.CharField(allow_null=True, source='question', read_only=True) dependency_value = LegacyDependencyValueField(source='dependency_values', required=False, allow_null=True) class Meta: @@ -549,7 +550,7 @@ class QuestionSerializer(I18nAwareModelSerializer): 'ask_during_checkin', 'show_during_checkin', 'identifier', 'dependency_question', 'dependency_values', 'hidden', 'dependency_value', 'print_on_invoice', 'help_text', 'valid_number_min', 'valid_number_max', 'valid_date_min', 'valid_date_max', 'valid_datetime_min', 'valid_datetime_max', - 'valid_string_length_max', 'valid_file_portrait') + 'valid_string_length_max', 'valid_file_portrait', 'internal_name',) def validate_identifier(self, value): Question._clean_identifier(self.context['event'], value, self.instance) diff --git a/src/pretix/control/templates/pretixcontrol/items/questionnaires.html b/src/pretix/control/templates/pretixcontrol/items/questionnaires.html index 9c37139f0..80f7c36e9 100644 --- a/src/pretix/control/templates/pretixcontrol/items/questionnaires.html +++ b/src/pretix/control/templates/pretixcontrol/items/questionnaires.html @@ -10,10 +10,12 @@ {% trans "Questionnaires" %} {% endblock %} {% block inside %} - - {% icon "wrench" %} {% trans "Manage data fields" %} - -

{% trans "Questionnaires" %}

+

+ {% trans "Questionnaires" %} + + {% icon "wrench" %} {% trans "Manage data fields" %} + +

{% blocktrans trimmed %} Questions allow your attendees to fill in additional data about their ticket. If you provide food, one diff --git a/src/pretix/static/pretixcontrol/js/ui/questionnaires/Question.vue b/src/pretix/static/pretixcontrol/js/ui/questionnaires/Question.vue index 18fe4453b..a7d3e49f5 100644 --- a/src/pretix/static/pretixcontrol/js/ui/questionnaires/Question.vue +++ b/src/pretix/static/pretixcontrol/js/ui/questionnaires/Question.vue @@ -61,16 +61,6 @@ const editor = ref(); -

- -
- -
-
+
+ +
+

+ {{ question.question }} + Manage data field details +

+
+
+
+ +
+ +
+
diff --git a/src/pretix/static/pretixcontrol/js/ui/questionnaires/Questionnaire.vue b/src/pretix/static/pretixcontrol/js/ui/questionnaires/Questionnaire.vue index b800cc091..531ce0062 100644 --- a/src/pretix/static/pretixcontrol/js/ui/questionnaires/Questionnaire.vue +++ b/src/pretix/static/pretixcontrol/js/ui/questionnaires/Questionnaire.vue @@ -6,6 +6,7 @@ import I18nTextField from "./I18nTextField.vue"; import NativeDialog from "./NativeDialog.vue"; const id = useId(); const props = defineProps(['questionnaire', 'datafields', 'selected_product', 'items']) +const gettext = (window as any).gettext function toggleItem() { const i = props.questionnaire.items.indexOf(props.selected_product); @@ -16,10 +17,23 @@ function toggleItem() { } } +function addExistingDatafield(field) { + props.questionnaire.children.push({ + question: field.id, + required: false, + label: {}, + help_text: {}, + dependency_question: null, + dependency_values: [], + }); + dlgAddExisting.value.close(); +} + const isHidden = computed(() => props.selected_product && props.questionnaire.items.indexOf(props.selected_product) === -1); const isEditable = computed(() => props.selected_product && props.questionnaire.items.indexOf(props.selected_product) !== -1); -const editor = ref(); +const dlgEditor = ref(); +const dlgAddExisting = ref(); @@ -27,7 +41,7 @@ const editor = ref(); diff --git a/src/pretix/static/pretixcontrol/js/ui/questionnaires/helper.js b/src/pretix/static/pretixcontrol/js/ui/questionnaires/helper.js index 6ec396dbb..8a263737a 100644 --- a/src/pretix/static/pretixcontrol/js/ui/questionnaires/helper.js +++ b/src/pretix/static/pretixcontrol/js/ui/questionnaires/helper.js @@ -1,6 +1,8 @@ export function i18n_any(data) { if (!data) return null; + const preferred = document.body.getAttribute("data-pretixlocale"); + if (data[preferred]) return data[preferred]; return Object.values(data)[0]; }