diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index fda3b41..b81e583 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -14,7 +14,7 @@ from django.utils.html import format_html from django.urls import reverse from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.contrib.contenttypes.models import ContentType -from utils import RestrictedFileField +from utils import RestrictedFileField, normalize_name import os from mailer.mailutils import send as send_mail, get_mail_confirmation_link,\ prepend_base_url, get_registration_link, get_wait_confirmation_link,\ @@ -2012,8 +2012,3 @@ def import_from_csv_waitinglist(path): for row in rows: transform_row(row) - - -def normalize_name(raw): - noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue').replace(' ', '_') - return unicodedata.normalize('NFKD', noumlaut).encode('ascii', 'ignore').decode('ascii') diff --git a/jdav_web/members/templatetags/tex_extras.py b/jdav_web/members/templatetags/tex_extras.py index beb678d..4f954a0 100644 --- a/jdav_web/members/templatetags/tex_extras.py +++ b/jdav_web/members/templatetags/tex_extras.py @@ -1,5 +1,6 @@ from django import template from django.utils.safestring import mark_safe +from utils import normalize_name register = template.Library() @@ -12,7 +13,7 @@ def checked_if_true(name, value): @register.filter def esc_all(val): - return mark_safe(str(val).replace('_', '\\_').replace('&', '\\&')) + return mark_safe(str(normalize_name(val, False)).replace('_', '\\_').replace('&', '\\&')) @register.filter diff --git a/jdav_web/utils.py b/jdav_web/utils.py index b6131bc..db3e93d 100644 --- a/jdav_web/utils.py +++ b/jdav_web/utils.py @@ -2,6 +2,7 @@ from django.db import models from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ from decimal import Decimal, ROUND_HALF_DOWN +import unicodedata def file_size_validator(max_upload_size): @@ -60,3 +61,11 @@ def get_member(request): return None else: return request.user.member + + +def normalize_name(raw, nospaces=True): + if nospaces: + noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue').replace(' ', '_') + else: + noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue') + return unicodedata.normalize('NFKD', noumlaut).encode('ascii', 'ignore').decode('ascii')