diff --git a/src/pretix/api/serializers/event.py b/src/pretix/api/serializers/event.py index 3ea81340ca..fce2793771 100644 --- a/src/pretix/api/serializers/event.py +++ b/src/pretix/api/serializers/event.py @@ -54,7 +54,7 @@ from pretix.base.models.items import SubEventItem, SubEventItemVariation from pretix.base.services.seating import ( SeatProtected, generate_seats, validate_plan_change, ) -from pretix.base.settings import validate_event_settings +from pretix.base.settings import LazyI18nStringList, validate_event_settings from pretix.base.signals import api_event_settings_fields logger = logging.getLogger(__name__) @@ -789,6 +789,10 @@ class EventSettingsSerializer(SettingsSerializer): data = super().validate(data) settings_dict = self.instance.freeze() settings_dict.update(data) + + if data.get('confirm_texts') is not None: + data['confirm_texts'] = LazyI18nStringList(data['confirm_texts']) + validate_event_settings(self.event, settings_dict) return data diff --git a/src/pretix/helpers/json.py b/src/pretix/helpers/json.py index 6d2515292b..b73031573a 100644 --- a/src/pretix/helpers/json.py +++ b/src/pretix/helpers/json.py @@ -28,10 +28,14 @@ from pretix.base.reldate import RelativeDateWrapper class CustomJSONEncoder(I18nJSONEncoder): def default(self, obj): + from pretix.base.settings import LazyI18nStringList + if isinstance(obj, RelativeDateWrapper): return obj.to_string() elif isinstance(obj, File): return obj.name + elif isinstance(obj, LazyI18nStringList): + return [s.data for s in obj.data] if isinstance(obj, PhoneNumber): return str(obj) else: diff --git a/src/tests/api/test_events.py b/src/tests/api/test_events.py index 000c22da7a..789393458c 100644 --- a/src/tests/api/test_events.py +++ b/src/tests/api/test_events.py @@ -1212,7 +1212,12 @@ def test_patch_event_settings(token_client, organizer, event): resp = token_client.patch( '/api/v1/organizers/{}/events/{}/settings/'.format(organizer.slug, event.slug), { - 'imprint_url': 'https://example.com' + 'imprint_url': 'https://example.com', + 'confirm_texts': [ + { + 'de': 'Ich bin mit den AGB einverstanden.' + } + ] }, format='json' )