mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-03-15 23:17:33 +00:00
Use slugs for email addresses instead of lower names
This commit is contained in:
parent
c57ad854fe
commit
bdf181e7e4
@ -3,6 +3,7 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management import BaseCommand
|
from django.core.management import BaseCommand
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from django.template.defaultfilters import slugify
|
||||||
from participation.models import Team, Tournament
|
from participation.models import Team, Tournament
|
||||||
from registration.models import ParticipantRegistration, VolunteerRegistration
|
from registration.models import ParticipantRegistration, VolunteerRegistration
|
||||||
from tfjm.lists import get_sympa_client
|
from tfjm.lists import get_sympa_client
|
||||||
@ -36,7 +37,7 @@ class Command(BaseCommand):
|
|||||||
"education", raise_error=False)
|
"education", raise_error=False)
|
||||||
|
|
||||||
for tournament in Tournament.objects.all():
|
for tournament in Tournament.objects.all():
|
||||||
slug = tournament.name.lower().replace(" ", "-")
|
slug = slugify(tournament.name)
|
||||||
sympa.create_list(f"equipes-{slug}", f"Equipes du tournoi {tournament.name}", "hotline",
|
sympa.create_list(f"equipes-{slug}", f"Equipes du tournoi {tournament.name}", "hotline",
|
||||||
f"Liste de diffusion pour contacter toutes les equipes du tournoi {tournament.name}"
|
f"Liste de diffusion pour contacter toutes les equipes du tournoi {tournament.name}"
|
||||||
" du TFJM2.", "education", raise_error=False)
|
" du TFJM2.", "education", raise_error=False)
|
||||||
@ -54,7 +55,7 @@ class Command(BaseCommand):
|
|||||||
for team in Team.objects.filter(participation__valid=True).all():
|
for team in Team.objects.filter(participation__valid=True).all():
|
||||||
team.create_mailing_list()
|
team.create_mailing_list()
|
||||||
sympa.unsubscribe(team.email, "equipes-non-valides", True)
|
sympa.unsubscribe(team.email, "equipes-non-valides", True)
|
||||||
sympa.subscribe(team.email, f"equipes-{team.participation.tournament.name.lower().replace(' ', '-')}",
|
sympa.subscribe(team.email, f"equipes-{slugify(team.participation.tournament.name)}",
|
||||||
True, f"Equipe {team.name}")
|
True, f"Equipe {team.name}")
|
||||||
|
|
||||||
for team in Team.objects.filter(Q(participation__valid=False) | Q(participation__valid__isnull=True)).all():
|
for team in Team.objects.filter(Q(participation__valid=False) | Q(participation__valid__isnull=True)).all():
|
||||||
@ -62,16 +63,16 @@ class Command(BaseCommand):
|
|||||||
sympa.subscribe(team.email, "equipes-non-valides", True, f"Equipe {team.name}")
|
sympa.subscribe(team.email, "equipes-non-valides", True, f"Equipe {team.name}")
|
||||||
|
|
||||||
for participant in ParticipantRegistration.objects.filter(team__isnull=False).all():
|
for participant in ParticipantRegistration.objects.filter(team__isnull=False).all():
|
||||||
sympa.subscribe(participant.user.email, f"equipe-{participant.team.trigram.lower()}",
|
sympa.subscribe(participant.user.email, f"equipe-{slugify(participant.team.trigram)}",
|
||||||
True, f"{participant}")
|
True, f"{participant}")
|
||||||
|
|
||||||
for volunteer in VolunteerRegistration.objects.all():
|
for volunteer in VolunteerRegistration.objects.all():
|
||||||
for organized_tournament in volunteer.organized_tournaments.all():
|
for organized_tournament in volunteer.organized_tournaments.all():
|
||||||
slug = organized_tournament.name.lower().replace(" ", "-")
|
slug = slugify(organized_tournament.name)
|
||||||
sympa.subscribe(volunteer.user.email, f"organisateurs-{slug}", True)
|
sympa.subscribe(volunteer.user.email, f"organisateurs-{slug}", True)
|
||||||
|
|
||||||
for jury_in in volunteer.jury_in.all():
|
for jury_in in volunteer.jury_in.all():
|
||||||
slug = jury_in.tournament.name.lower().replace(" ", "-")
|
slug = slugify(jury_in.tournament.name)
|
||||||
sympa.subscribe(volunteer.user.email, f"jurys-{slug}", True)
|
sympa.subscribe(volunteer.user.email, f"jurys-{slug}", True)
|
||||||
|
|
||||||
for admin in VolunteerRegistration.objects.filter(admin=True).all():
|
for admin in VolunteerRegistration.objects.filter(admin=True).all():
|
||||||
|
@ -10,6 +10,7 @@ from django.core.exceptions import ValidationError
|
|||||||
from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator
|
from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Index
|
from django.db.models import Index
|
||||||
|
from django.template.defaultfilters import slugify
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils import timezone, translation
|
from django.utils import timezone, translation
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
@ -210,14 +211,14 @@ class Team(models.Model):
|
|||||||
"""
|
"""
|
||||||
:return: The mailing list to contact the team members.
|
:return: The mailing list to contact the team members.
|
||||||
"""
|
"""
|
||||||
return f"equipe-{self.trigram.lower()}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
return f"equipe-{slugify(self.trigram)}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
||||||
|
|
||||||
def create_mailing_list(self):
|
def create_mailing_list(self):
|
||||||
"""
|
"""
|
||||||
Create a new Sympa mailing list to contact the team.
|
Create a new Sympa mailing list to contact the team.
|
||||||
"""
|
"""
|
||||||
get_sympa_client().create_list(
|
get_sympa_client().create_list(
|
||||||
f"equipe-{self.trigram.lower()}",
|
f"equipe-{slugify(self.trigram)}",
|
||||||
f"Equipe {self.name} ({self.trigram})",
|
f"Equipe {self.name} ({self.trigram})",
|
||||||
"hotline", # TODO Use a custom sympa template
|
"hotline", # TODO Use a custom sympa template
|
||||||
f"Liste de diffusion pour contacter l'equipe {self.name} du TFJM2",
|
f"Liste de diffusion pour contacter l'equipe {self.name} du TFJM2",
|
||||||
@ -231,7 +232,7 @@ class Team(models.Model):
|
|||||||
"""
|
"""
|
||||||
if self.participation.valid: # pragma: no cover
|
if self.participation.valid: # pragma: no cover
|
||||||
get_sympa_client().unsubscribe(
|
get_sympa_client().unsubscribe(
|
||||||
self.email, f"equipes-{self.participation.tournament.name.lower().replace(' ', '-')}", False)
|
self.email, f"equipes-{slugify(self.participation.tournament.name)}", False)
|
||||||
else:
|
else:
|
||||||
get_sympa_client().unsubscribe(self.email, "equipes-non-valides", False)
|
get_sympa_client().unsubscribe(self.email, "equipes-non-valides", False)
|
||||||
get_sympa_client().delete_list(f"equipe-{self.trigram}")
|
get_sympa_client().delete_list(f"equipe-{self.trigram}")
|
||||||
@ -391,28 +392,28 @@ class Tournament(models.Model):
|
|||||||
"""
|
"""
|
||||||
:return: The mailing list to contact the team members.
|
:return: The mailing list to contact the team members.
|
||||||
"""
|
"""
|
||||||
return f"equipes-{self.name.lower().replace(' ', '-')}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
return f"equipes-{slugify(self.name)}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def organizers_email(self):
|
def organizers_email(self):
|
||||||
"""
|
"""
|
||||||
:return: The mailing list to contact the team members.
|
:return: The mailing list to contact the team members.
|
||||||
"""
|
"""
|
||||||
return f"organisateurs-{self.name.lower().replace(' ', '-')}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
return f"organisateurs-{slugify(self.name)}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def jurys_email(self):
|
def jurys_email(self):
|
||||||
"""
|
"""
|
||||||
:return: The mailing list to contact the team members.
|
:return: The mailing list to contact the team members.
|
||||||
"""
|
"""
|
||||||
return f"jurys-{self.name.lower().replace(' ', '-')}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
return f"jurys-{slugify(self.name)}@{os.getenv('SYMPA_HOST', 'localhost')}"
|
||||||
|
|
||||||
def create_mailing_lists(self):
|
def create_mailing_lists(self):
|
||||||
"""
|
"""
|
||||||
Create a new Sympa mailing list to contact the team.
|
Create a new Sympa mailing list to contact the team.
|
||||||
"""
|
"""
|
||||||
get_sympa_client().create_list(
|
get_sympa_client().create_list(
|
||||||
f"equipes-{self.name.lower().replace(' ', '-')}",
|
f"equipes-{slugify(self.name)}",
|
||||||
f"Equipes du tournoi de {self.name}",
|
f"Equipes du tournoi de {self.name}",
|
||||||
"hotline", # TODO Use a custom sympa template
|
"hotline", # TODO Use a custom sympa template
|
||||||
f"Liste de diffusion pour contacter les equipes du tournoi {self.name} du TFJM²",
|
f"Liste de diffusion pour contacter les equipes du tournoi {self.name} du TFJM²",
|
||||||
@ -420,7 +421,7 @@ class Tournament(models.Model):
|
|||||||
raise_error=False,
|
raise_error=False,
|
||||||
)
|
)
|
||||||
get_sympa_client().create_list(
|
get_sympa_client().create_list(
|
||||||
f"organisateurs-{self.name.lower().replace(' ', '-')}",
|
f"organisateurs-{slugify(self.name)}",
|
||||||
f"Organisateurs du tournoi de {self.name}",
|
f"Organisateurs du tournoi de {self.name}",
|
||||||
"hotline", # TODO Use a custom sympa template
|
"hotline", # TODO Use a custom sympa template
|
||||||
f"Liste de diffusion pour contacter les equipes du tournoi {self.name} du TFJM²",
|
f"Liste de diffusion pour contacter les equipes du tournoi {self.name} du TFJM²",
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.template.defaultfilters import slugify
|
||||||
from participation.models import Note, Participation, Passage, Pool, Team, Tournament
|
from participation.models import Note, Participation, Passage, Pool, Team, Tournament
|
||||||
from registration.models import Payment
|
from registration.models import Payment
|
||||||
from tfjm.lists import get_sympa_client
|
from tfjm.lists import get_sympa_client
|
||||||
@ -34,10 +35,10 @@ def update_mailing_list(instance: Team, raw, **_):
|
|||||||
instance.create_mailing_list()
|
instance.create_mailing_list()
|
||||||
# Subscribe all team members in the mailing list
|
# Subscribe all team members in the mailing list
|
||||||
for student in instance.students.all():
|
for student in instance.students.all():
|
||||||
get_sympa_client().subscribe(student.user.email, f"equipe-{instance.trigram.lower()}", False,
|
get_sympa_client().subscribe(student.user.email, f"equipe-{slugify(instance.trigram)}", False,
|
||||||
f"{student.user.first_name} {student.user.last_name}")
|
f"{student.user.first_name} {student.user.last_name}")
|
||||||
for coach in instance.coaches.all():
|
for coach in instance.coaches.all():
|
||||||
get_sympa_client().subscribe(coach.user.email, f"equipe-{instance.trigram.lower()}", False,
|
get_sympa_client().subscribe(coach.user.email, f"equipe-{slugify(instance.trigram)}", False,
|
||||||
f"{coach.user.first_name} {coach.user.last_name}")
|
f"{coach.user.first_name} {coach.user.last_name}")
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ from django.db import transaction
|
|||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.http import FileResponse, Http404, HttpResponse
|
from django.http import FileResponse, Http404, HttpResponse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
|
from django.template.defaultfilters import slugify
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils import timezone, translation
|
from django.utils import timezone, translation
|
||||||
@ -88,7 +89,7 @@ class CreateTeamView(LoginRequiredMixin, CreateView):
|
|||||||
registration.save()
|
registration.save()
|
||||||
|
|
||||||
# Subscribe the user mail address to the team mailing list
|
# Subscribe the user mail address to the team mailing list
|
||||||
get_sympa_client().subscribe(user.email, f"equipe-{form.instance.trigram.lower()}", False,
|
get_sympa_client().subscribe(user.email, f"equipe-{slugify(form.instance.trigram)}", False,
|
||||||
f"{user.first_name} {user.last_name}")
|
f"{user.first_name} {user.last_name}")
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
@ -130,7 +131,7 @@ class JoinTeamView(LoginRequiredMixin, FormView):
|
|||||||
registration.save()
|
registration.save()
|
||||||
|
|
||||||
# Subscribe to the team mailing list
|
# Subscribe to the team mailing list
|
||||||
get_sympa_client().subscribe(user.email, f"equipe-{form.instance.trigram.lower()}", False,
|
get_sympa_client().subscribe(user.email, f"equipe-{slugify(form.instance.trigram)}", False,
|
||||||
f"{user.first_name} {user.last_name}")
|
f"{user.first_name} {user.last_name}")
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
@ -519,7 +520,7 @@ class TeamLeaveView(LoginRequiredMixin, TemplateView):
|
|||||||
team = request.user.registration.team
|
team = request.user.registration.team
|
||||||
request.user.registration.team = None
|
request.user.registration.team = None
|
||||||
request.user.registration.save()
|
request.user.registration.save()
|
||||||
get_sympa_client().unsubscribe(request.user.email, f"equipe-{team.trigram.lower()}", False)
|
get_sympa_client().unsubscribe(request.user.email, f"equipe-{slugify(team.trigram)}", False)
|
||||||
if team.students.count() + team.coaches.count() == 0:
|
if team.students.count() + team.coaches.count() == 0:
|
||||||
team.delete()
|
team.delete()
|
||||||
return redirect(reverse_lazy("index"))
|
return redirect(reverse_lazy("index"))
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.template.defaultfilters import slugify
|
||||||
from tfjm.lists import get_sympa_client
|
from tfjm.lists import get_sympa_client
|
||||||
|
|
||||||
from .models import Registration, VolunteerRegistration
|
from .models import Registration, VolunteerRegistration
|
||||||
@ -29,8 +30,8 @@ def send_email_link(instance, **_):
|
|||||||
registration.send_email_validation_link()
|
registration.send_email_validation_link()
|
||||||
|
|
||||||
if registration.participates and registration.team:
|
if registration.participates and registration.team:
|
||||||
get_sympa_client().unsubscribe(old_instance.email, f"equipe-{registration.team.trigram.lower()}", False)
|
get_sympa_client().unsubscribe(old_instance.email, f"equipe-{slugify(registration.team.trigram)}", False)
|
||||||
get_sympa_client().subscribe(instance.email, f"equipe-{registration.team.trigram.lower()}", False,
|
get_sympa_client().subscribe(instance.email, f"equipe-{slugify(registration.team.trigram)}", False,
|
||||||
f"{instance.first_name} {instance.last_name}")
|
f"{instance.first_name} {instance.last_name}")
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user