Skip to content
Snippets Groups Projects
Commit 4179cad6 authored by ynerant's avatar ynerant
Browse files

When data is imported from the NK15, prevent users whenever some aliases are deleted

parent 81709539
No related branches found
No related tags found
Loading
...@@ -6,6 +6,7 @@ import psycopg2.extras as pge ...@@ -6,6 +6,7 @@ import psycopg2.extras as pge
import datetime import datetime
import json import json
from django.template.loader import render_to_string
from django.utils.timezone import make_aware, now from django.utils.timezone import make_aware, now
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
...@@ -33,6 +34,11 @@ MAP_IDBDE = { ...@@ -33,6 +34,11 @@ MAP_IDBDE = {
# some Aliases have been created in the fixtures # some Aliases have been created in the fixtures
ALIAS_SET = {a[0] for a in Alias.objects.all().values_list("normalized_name")} 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_user_type = ContentType.objects.get(app_label="note", model="noteuser")
note_club_type = ContentType.objects.get(app_label="note", model="noteclub") note_club_type = ContentType.objects.get(app_label="note", model="noteclub")
...@@ -85,9 +91,10 @@ class Command(ImportCommand): ...@@ -85,9 +91,10 @@ class Command(ImportCommand):
pseudo = row["pseudo"] pseudo = row["pseudo"]
pseudo_norm = Alias.normalize(pseudo) pseudo_norm = Alias.normalize(pseudo)
self.update_line(idx, n, pseudo) self.update_line(idx, n, pseudo)
# clean pseudo (normalized pseudo must be unique) # clean pseudo (normalized pseudo must be unique and not empty)
if pseudo_norm in ALIAS_SET: if not pseudo_norm or pseudo_norm in ALIAS_SET:
pseudo = pseudo + str(row["idbde"]) pseudo = pseudo + str(row["idbde"])
CHANGED_USERNAMES.append((pk_note, row[pseudo], pseudo))
else: else:
ALIAS_SET.add(pseudo_norm) ALIAS_SET.add(pseudo_norm)
# clean date # clean date
...@@ -206,7 +213,9 @@ class Command(ImportCommand): ...@@ -206,7 +213,9 @@ class Command(ImportCommand):
alias_norm = Alias.normalize(alias_name) alias_norm = Alias.normalize(alias_name)
self.update_line(idx, n, alias_norm) self.update_line(idx, n, alias_norm)
# clean pseudo (normalized pseudo must be unique) # 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 continue
else: else:
ALIAS_SET.add(alias_norm) ALIAS_SET.add(alias_norm)
...@@ -237,3 +246,20 @@ class Command(ImportCommand): ...@@ -237,3 +246,20 @@ class Command(ImportCommand):
filename = kwargs["save"] filename = kwargs["save"]
with open(filename, 'w') as fp: with open(filename, 'w') as fp:
json.dump(MAP_IDBDE, fp, sort_keys=True, indent=2) 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)
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment