mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 02:12:05 +01:00 
			
		
		
		
	Use slugs for email addresses instead of lower names
This commit is contained in:
		@@ -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}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user