diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index 191f07dcf2..68f4ec80ec 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -285,7 +285,7 @@ DEFAULT_VARIABLES = OrderedDict(( ("telephone", { "label": _("Phone number"), "editor_sample": "+01 1234 567890", - "evaluate": lambda op, order, ev: phone_format(order.phone) + "evaluate": lambda op, order, ev: phone_format(order.phone, html=False) }), ("email", { "label": _("Email"), diff --git a/src/pretix/base/templatetags/phone_format.py b/src/pretix/base/templatetags/phone_format.py index 0a4b0180c2..c38ff75613 100644 --- a/src/pretix/base/templatetags/phone_format.py +++ b/src/pretix/base/templatetags/phone_format.py @@ -20,6 +20,8 @@ # . # from django import template +from django.utils.html import escape +from django.utils.safestring import mark_safe from phonenumber_field.phonenumber import PhoneNumber from phonenumbers import NumberParseException @@ -27,17 +29,20 @@ register = template.Library() @register.filter("phone_format") -def phone_format(value: str): +def phone_format(value: str, html=True): if not value: - return "" - - if isinstance(value, str): + v = "" + elif isinstance(value, str): try: - return PhoneNumber.from_string(value).as_international + v = PhoneNumber.from_string(value).as_international except NumberParseException: - return value + v = value + elif isinstance(value, PhoneNumber) and value.national_number: + v = value.as_international + else: + v = str(value) - if isinstance(value, PhoneNumber) and value.national_number: - return value.as_international + if html: + v = mark_safe('' + escape(v) + '') - return str(value) + return v diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index bc4008776b..a9cc5bd498 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -60,6 +60,7 @@ from pretix.base.services.cart import ( from pretix.base.services.memberships import validate_memberships_in_order from pretix.base.services.orders import perform_order from pretix.base.signals import validate_cart_addons +from pretix.base.templatetags.phone_format import phone_format from pretix.base.templatetags.rich_text import rich_text_snippet from pretix.base.views.tasks import AsyncAction from pretix.multidomain.urlreverse import eventreverse @@ -1088,7 +1089,7 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep): ctx['contact_info'] = [] phone = self.cart_session.get('contact_form_data', {}).get('phone') if phone: - ctx['contact_info'].append((_('Phone number'), phone)) + ctx['contact_info'].append((_('Phone number'), phone_format(phone))) responses = contact_form_fields.send(self.event, request=self.request) for r, response in sorted(responses, key=lambda r: str(r[0])): for key, value in response.items(): diff --git a/src/pretix/static/pretixbase/scss/_rtl.scss b/src/pretix/static/pretixbase/scss/_rtl.scss index c20634a1ff..75b4c66c23 100644 --- a/src/pretix/static/pretixbase/scss/_rtl.scss +++ b/src/pretix/static/pretixbase/scss/_rtl.scss @@ -20,6 +20,11 @@ html.rtl { } } +.force-ltr { + direction: ltr !important; + unicode-bidi: embed; +} + @media(min-width: $screen-sm-min) { html.rtl .nameparts-form-group { input, select {