|
@@ -3,7 +3,6 @@ from __future__ import unicode_literals
|
|
|
|
|
|
import ldapdb.models
|
|
|
import unicodedata
|
|
|
-import string
|
|
|
import datetime
|
|
|
from django.db import models
|
|
|
from django.db.models import Q
|
|
@@ -239,23 +238,34 @@ Member._meta.get_field('email').null = False
|
|
|
def count_active_members():
|
|
|
return Member.objects.filter(status='member').count()
|
|
|
|
|
|
-def get_automatic_username(first_name, last_name):
|
|
|
+def get_automatic_username(member):
|
|
|
"""
|
|
|
Calcul le username automatiquement en fonction
|
|
|
du nom et du prénom
|
|
|
"""
|
|
|
|
|
|
- # Première lettre de chaque partie du prénom
|
|
|
- first_name_letters = ''.join(
|
|
|
- [c[0] for c in first_name.split('-')]
|
|
|
- )
|
|
|
- # Concaténer avec nom de famille
|
|
|
- username = ('%s%s' % (first_name_letters, last_name))
|
|
|
+ # S'il s'agit d'une entreprise, utilise son nom:
|
|
|
+ if member.type == 'legal_entity' and member.organization_name:
|
|
|
+ username = member.organization_name
|
|
|
+ # Sinon, si un pseudo est définit, l'utilise
|
|
|
+ elif member.nickname:
|
|
|
+ username = member.nickname
|
|
|
+ # Sinon, utilise nom et prenom
|
|
|
+ elif member.first_name and member.last_name:
|
|
|
+ # Première lettre de chaque partie du prénom
|
|
|
+ first_name_letters = ''.join(
|
|
|
+ [c[0] for c in member.first_name.split('-')]
|
|
|
+ )
|
|
|
+ # Concaténer avec nom de famille
|
|
|
+ username = ('%s%s' % (first_name_letters, member.last_name))
|
|
|
+ else:
|
|
|
+ raise Exception('Il n\'y a pas sufissement d\'informations pour déterminer un login automatiquement')
|
|
|
+
|
|
|
# Remplacer ou enlever les caractères non ascii
|
|
|
username = unicodedata.normalize('NFD', username)\
|
|
|
.encode('ascii', 'ignore')
|
|
|
- # Enlever ponctuation et espace
|
|
|
- punctuation = (string.punctuation + ' ').encode('ascii')
|
|
|
+ # Enlever ponctuation (sauf _-.) et espace
|
|
|
+ punctuation = ('!"#$%&\'()*+,/:;<=>?@[\\]^`{|}~ ').encode('ascii')
|
|
|
username = username.translate(None, punctuation)
|
|
|
# En minuscule
|
|
|
username = username.lower()
|
|
@@ -266,7 +276,7 @@ def get_automatic_username(first_name, last_name):
|
|
|
member = Member.objects.filter(username=username)
|
|
|
base_username = username
|
|
|
incr = 2
|
|
|
- # Tant qu'un membre est trouvé, incrément un entier à la fin
|
|
|
+ # Tant qu'un membre est trouvé, incrémente un entier à la fin
|
|
|
while member:
|
|
|
if len(base_username) >= 30:
|
|
|
username = base_username[30-len(str(incr)):]
|
|
@@ -387,8 +397,7 @@ def define_username(sender, instance, **kwargs):
|
|
|
le calcul automatiquement en fonction du nom et du prénom
|
|
|
"""
|
|
|
if not instance.username and not instance.pk:
|
|
|
- instance.username = get_automatic_username(instance.first_name,
|
|
|
- instance.last_name)
|
|
|
+ instance.username = get_automatic_username(instance)
|
|
|
|
|
|
|
|
|
@receiver(pre_save, sender=LdapUser)
|