mirror of
				https://gitlab.crans.org/bde/nk20-scripts
				synced 2025-10-30 06:49:50 +01:00 
			
		
		
		
	When data is imported from the NK15, prevent users whenever some aliases are deleted
This commit is contained in:
		| @@ -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 = { | |||||||
| # 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): | |||||||
|             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): | |||||||
|             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): | |||||||
|             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) | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								templates/scripts/deleted_aliases.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								templates/scripts/deleted_aliases.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								templates/scripts/unsupported_username.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								templates/scripts/unsupported_username.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user