templatetags: add phonenumber_fr filter (#41723)
This commit is contained in:
parent
2f6e7a3597
commit
053827b19b
|
@ -575,3 +575,32 @@ def test_reproj():
|
|||
coords = tmpl.render(CompatibilityNamesDict({'form': lazy_formdata})).split('/')
|
||||
assert int(float(coords[0])) == 1625337
|
||||
assert int(float(coords[1])) == 5422836
|
||||
|
||||
|
||||
def test_phonenumber_fr():
|
||||
t = Template('{{ number|phonenumber_fr }}')
|
||||
assert t.render({'number': '01 23 45 67 89'}) == '01 23 45 67 89'
|
||||
assert t.render({'number': '0 1 23 45 67 89'}) == '01 23 45 67 89'
|
||||
assert t.render({'number': '0123456789'}) == '01 23 45 67 89'
|
||||
assert t.render({'number': '01.23.45.67.89'}) == '01 23 45 67 89'
|
||||
assert t.render({'number': '01 23 45 67 89'}) == '01 23 45 67 89'
|
||||
|
||||
assert t.render({'number': '00 33 1 23 45 67 89'}) == '00 33 1 23 45 67 89'
|
||||
assert t.render({'number': '00 33 1 23 45 67 89'}) == '00 33 1 23 45 67 89'
|
||||
assert t.render({'number': '+33 1 23 45 67 89'}) == '+33 1 23 45 67 89'
|
||||
assert t.render({'number': '+33 (0)1 23 45 67 89'}) == '+33 1 23 45 67 89'
|
||||
|
||||
# drom
|
||||
assert t.render({'number': '02 62 11 22 33'}) == '02 62 11 22 33'
|
||||
assert t.render({'number': '00 262 11 22 33'}) == '00 262 11 22 33'
|
||||
assert t.render({'number': '+262 112233'}) == '+262 11 22 33'
|
||||
|
||||
t = Template('{{ number|phonenumber_fr:"." }}')
|
||||
assert t.render({'number': '01 23 45 67 89'}) == '01.23.45.67.89'
|
||||
|
||||
# unknown
|
||||
assert t.render({'number': '12 3'}) == '12 3'
|
||||
assert t.render({'number': 'bla bla'}) == 'bla bla'
|
||||
assert t.render({'number': None}) == 'None'
|
||||
t = Template('{{ number|decimal|phonenumber_fr }}')
|
||||
assert t.render({'number': '1,33'}) == '1.33'
|
||||
|
|
|
@ -438,3 +438,38 @@ def has_role(user, role_name):
|
|||
except KeyError: # role has been deleted
|
||||
pass
|
||||
return False
|
||||
|
||||
|
||||
@register.filter(is_safe=False)
|
||||
def phonenumber_fr(value, separator=' '):
|
||||
DROMS = ('262', '508', '590', '594', '596')
|
||||
|
||||
if not value or not isinstance(value, six.string_types):
|
||||
return value
|
||||
number = value.strip()
|
||||
if not number:
|
||||
return value
|
||||
if number[0] == '+':
|
||||
international = '+'
|
||||
number = '00' + number[1:]
|
||||
else:
|
||||
international = '00' + separator
|
||||
number = ''.join(c for c in number if c in '0123456789')
|
||||
|
||||
def in_pairs(num):
|
||||
return separator.join(num[i*2:i*2+2] for i in range(len(num)//2))
|
||||
|
||||
# local number
|
||||
if len(number) == 10 and number[0] == '0' and number[1] in '123456789':
|
||||
return in_pairs(number)
|
||||
# international
|
||||
if len(number) == 14 and number[0:5] == '00330':
|
||||
# +/00 33 (0)x xx xx xx xx : remove (0)
|
||||
number = number[0:4] + number[5:]
|
||||
if len(number) == 13 and number[0:4] == '0033':
|
||||
return international + '33' + separator + number[4] + separator + in_pairs(number[5:])
|
||||
if len(number) == 11 and number[0:2] == '00' and number[2:5] in DROMS:
|
||||
return international + number[2:5] + separator + in_pairs(number[5:])
|
||||
|
||||
# unknown
|
||||
return value
|
||||
|
|
Loading…
Reference in New Issue