From 4179cad611151d2b66da3fc87cebcb5317779cb2 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Mon, 24 Aug 2020 12:41:51 +0200 Subject: [PATCH] When data is imported from the NK15, prevent users whenever some aliases are deleted --- management/commands/import_account.py | 32 ++++++++++++++++++++-- templates/scripts/deleted_aliases.txt | 27 ++++++++++++++++++ templates/scripts/unsupported_username.txt | 27 ++++++++++++++++++ 3 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 templates/scripts/deleted_aliases.txt create mode 100644 templates/scripts/unsupported_username.txt diff --git a/management/commands/import_account.py b/management/commands/import_account.py index 0e35247..4de1de8 100644 --- a/management/commands/import_account.py +++ b/management/commands/import_account.py @@ -6,6 +6,7 @@ import psycopg2.extras as pge import datetime import json +from django.template.loader import render_to_string from django.utils.timezone import make_aware, now from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType @@ -33,6 +34,11 @@ MAP_IDBDE = { # some Aliases have been created in the fixtures ALIAS_SET = {a[0] for a in Alias.objects.all().values_list("normalized_name")} +# Some people might loose some aliases due to normalization. We warn them on them. +LOST_ALIASES = {} +# In some rare cases, the username might be in conflict with some others. We change them and warn the users. +CHANGED_USERNAMES = [] + note_user_type = ContentType.objects.get(app_label="note", model="noteuser") note_club_type = ContentType.objects.get(app_label="note", model="noteclub") @@ -85,9 +91,10 @@ class Command(ImportCommand): pseudo = row["pseudo"] pseudo_norm = Alias.normalize(pseudo) self.update_line(idx, n, pseudo) - # clean pseudo (normalized pseudo must be unique) - if pseudo_norm in ALIAS_SET: + # clean pseudo (normalized pseudo must be unique and not empty) + if not pseudo_norm or pseudo_norm in ALIAS_SET: pseudo = pseudo + str(row["idbde"]) + CHANGED_USERNAMES.append((pk_note, row[pseudo], pseudo)) else: ALIAS_SET.add(pseudo_norm) # clean date @@ -206,7 +213,9 @@ class Command(ImportCommand): alias_norm = Alias.normalize(alias_name) self.update_line(idx, n, alias_norm) # clean pseudo (normalized pseudo must be unique) - if alias_norm in ALIAS_SET: + if not alias_norm or alias_norm in ALIAS_SET: + LOST_ALIASES.setdefault(MAP_IDBDE[row["idbde"]], []) + LOST_ALIASES[MAP_IDBDE[row["idbde"]]].append(alias_name) continue else: ALIAS_SET.add(alias_norm) @@ -237,3 +246,20 @@ class Command(ImportCommand): filename = kwargs["save"] with open(filename, 'w') as fp: json.dump(MAP_IDBDE, fp, sort_keys=True, indent=2) + + for pk_user, old_username, new_username in CHANGED_USERNAMES: + user = User.objects.get(pk_user) + mail_text = render_to_string("scripts/unsupported_username.txt", dict( + user=user, + old_username=old_username, + new_username=new_username, + )) + user.email_user("Transition à la Note Kfet 2020 : pseudo non supporté", mail_text) + + for pk_user, aliases_list in CHANGED_USERNAMES: + user = User.objects.get(pk_user) + mail_text = render_to_string("scripts/deleted_aliases.txt", dict( + user=user, + aliases_list=aliases_list, + )) + user.email_user("Transition à la Note Kfet 2020 : suppression d'alias", mail_text) diff --git a/templates/scripts/deleted_aliases.txt b/templates/scripts/deleted_aliases.txt new file mode 100644 index 0000000..ddbbcf0 --- /dev/null +++ b/templates/scripts/deleted_aliases.txt @@ -0,0 +1,27 @@ +Bonjour {{ user.first_name }} {{ user.last_name }}, + +Ce message vous est envoyé automatiquement par la Note Kfet du BDE de +l'ENS Cachan, à laquelle vous êtes inscrit·e. Si vous n'êtes plus +adhérent·e, vous n'êtes pas nécessairement concerné·e par la suite +de ce message. + +La Note Kfet 2020 vient d'être déployée, succédant à la Note Kfet 2015. +Les données ont été migrées. + +Toutefois, la nouvelle note utilise un algorithme de normalisation des alias +permettant de rechercher plus facilement un nom de note, et empêchant la +création d'un alias trop proche d'un autre. + +Nous vous informons que les alias suivants ont été supprimés de votre compte, +jugés trop proches d'autres alias déjà existants : + +{{ aliases_list|join:", " }} + +Nous nous excusons pour le désagrément, et espérons que vous pourrez +profiter de la nouvelle Note Kfet. + +Cordialement, + +-- +Le BDE + diff --git a/templates/scripts/unsupported_username.txt b/templates/scripts/unsupported_username.txt new file mode 100644 index 0000000..692aa6b --- /dev/null +++ b/templates/scripts/unsupported_username.txt @@ -0,0 +1,27 @@ +Bonjour {{ user.first_name }} {{ user.last_name }}, + +Ce message vous est envoyé automatiquement par la Note Kfet du BDE de +l'ENS Cachan, à laquelle vous êtes inscrit·e. Si vous n'êtes plus +adhérent·e, vous n'êtes pas nécessairement concerné·e par la suite +de ce message. + +La Note Kfet 2020 vient d'être déployée, succédant à la Note Kfet 2015. +Les données ont été migrées. + +Toutefois, la nouvelle note utilise un algorithme de normalisation des alias +permettant de rechercher plus facilement un nom de note, et empêchant la +création d'un alias trop proche d'un autre. + +Nous vous informons que votre pseudo {{ old_username }} fait pas partie des +alias problématiques. Il a été remplacé par le pseudo {{ new_username }}, +que vous devrez utiliser pour pouvoir vous connecter. Il sera ensuite +possible de modifier votre pseudo. + +Nous nous excusons pour le désagrément, et espérons que vous pourrez +profiter de la nouvelle Note Kfet. + +Cordialement, + +-- +Le BDE +