Fix reversed phone numbers in rtl languages

This commit is contained in:
Raphael Michel
2021-05-25 11:31:31 +02:00
parent a8f2cbdf76
commit 9f7be4e267
4 changed files with 22 additions and 11 deletions

View File

@@ -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"),

View File

@@ -20,6 +20,8 @@
# <https://www.gnu.org/licenses/>.
#
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('<span class="force-ltr">' + escape(v) + '</span>')
return str(value)
return v

View File

@@ -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():

View File

@@ -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 {