mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 13:52:17 +01:00 
			
		
		
		
	Send mails
This commit is contained in:
		@@ -1,6 +1,8 @@
 | 
				
			|||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.core.mail import send_mail
 | 
				
			||||||
from django.db import models
 | 
					from django.db import models
 | 
				
			||||||
 | 
					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
 | 
					from django.utils import timezone
 | 
				
			||||||
from django.utils.translation import gettext_lazy as _
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
@@ -201,6 +203,15 @@ class Team(models.Model):
 | 
				
			|||||||
        verbose_name_plural = _("teams")
 | 
					        verbose_name_plural = _("teams")
 | 
				
			||||||
        unique_together = (('name', 'year',), ('trigram', 'year',),)
 | 
					        unique_together = (('name', 'year',), ('trigram', 'year',),)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def send_mail(self, template_name, subject="Contact TFJM²", **kwargs):
 | 
				
			||||||
 | 
					        context = kwargs
 | 
				
			||||||
 | 
					        context["team"] = self
 | 
				
			||||||
 | 
					        for user in self.users.all():
 | 
				
			||||||
 | 
					            context["user"] = user
 | 
				
			||||||
 | 
					            message = render_to_string("mail_templates/" + template_name + ".txt", context=context)
 | 
				
			||||||
 | 
					            message_html = render_to_string("mail_templates/" + template_name + ".html", context=context)
 | 
				
			||||||
 | 
					            send_mail(subject, message, "contact@tfjm.org", [user.email], html_message=message_html)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return self.trigram + " -- " + self.name
 | 
					        return self.trigram + " -- " + self.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ from django.urls import path
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from .views import TournamentListView, TournamentCreateView, TournamentDetailView, TournamentUpdateView, \
 | 
					from .views import TournamentListView, TournamentCreateView, TournamentDetailView, TournamentUpdateView, \
 | 
				
			||||||
    TeamDetailView, TeamUpdateView, AddOrganizerView, SolutionsView, SolutionsOrgaListView, SynthesesView, \
 | 
					    TeamDetailView, TeamUpdateView, AddOrganizerView, SolutionsView, SolutionsOrgaListView, SynthesesView, \
 | 
				
			||||||
    SynthesesOrgaListView, PoolListView, PoolCreateView, PoolDetailView, PoolEndpoint
 | 
					    SynthesesOrgaListView, PoolListView, PoolCreateView, PoolDetailView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app_name = "tournament"
 | 
					app_name = "tournament"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -20,6 +20,5 @@ urlpatterns = [
 | 
				
			|||||||
    path("all_syntheses/", SynthesesOrgaListView.as_view(), name="all_syntheses"),
 | 
					    path("all_syntheses/", SynthesesOrgaListView.as_view(), name="all_syntheses"),
 | 
				
			||||||
    path("pools/", PoolListView.as_view(), name="pools"),
 | 
					    path("pools/", PoolListView.as_view(), name="pools"),
 | 
				
			||||||
    path("pool/add/", PoolCreateView.as_view(), name="create_pool"),
 | 
					    path("pool/add/", PoolCreateView.as_view(), name="create_pool"),
 | 
				
			||||||
    path("pool/add/endpoint/", PoolEndpoint.as_view(), name="create_pool_endpoint"),
 | 
					 | 
				
			||||||
    path("pool/<int:pk>/", PoolDetailView.as_view(), name="pool_detail"),
 | 
					    path("pool/<int:pk>/", PoolDetailView.as_view(), name="pool_detail"),
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,15 +11,12 @@ from django.shortcuts import redirect
 | 
				
			|||||||
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
 | 
					from django.utils import timezone
 | 
				
			||||||
from django.utils.decorators import method_decorator
 | 
					 | 
				
			||||||
from django.utils.translation import gettext_lazy as _
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
from django.views import View
 | 
					 | 
				
			||||||
from django.views.decorators.csrf import csrf_exempt
 | 
					 | 
				
			||||||
from django.views.generic import DetailView, CreateView, UpdateView
 | 
					from django.views.generic import DetailView, CreateView, UpdateView
 | 
				
			||||||
from django.views.generic.edit import BaseFormView
 | 
					from django.views.generic.edit import BaseFormView
 | 
				
			||||||
from django_tables2.views import SingleTableView
 | 
					from django_tables2.views import SingleTableView
 | 
				
			||||||
 | 
					 | 
				
			||||||
from member.models import TFJMUser, Solution, Synthesis
 | 
					from member.models import TFJMUser, Solution, Synthesis
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .forms import TournamentForm, OrganizerForm, SolutionForm, SynthesisForm, TeamForm, PoolForm
 | 
					from .forms import TournamentForm, OrganizerForm, SolutionForm, SynthesisForm, TeamForm, PoolForm
 | 
				
			||||||
from .models import Tournament, Team, Pool
 | 
					from .models import Tournament, Team, Pool
 | 
				
			||||||
from .tables import TournamentTable, TeamTable, SolutionTable, SynthesisTable, PoolTable
 | 
					from .tables import TournamentTable, TeamTable, SolutionTable, SynthesisTable, PoolTable
 | 
				
			||||||
@@ -145,17 +142,17 @@ class TeamDetailView(LoginRequiredMixin, DetailView):
 | 
				
			|||||||
        elif "request_validation" in request.POST and request.user.participates:
 | 
					        elif "request_validation" in request.POST and request.user.participates:
 | 
				
			||||||
            team.validation_status = "1waiting"
 | 
					            team.validation_status = "1waiting"
 | 
				
			||||||
            team.save()
 | 
					            team.save()
 | 
				
			||||||
            # TODO Send mail
 | 
					            team.send_mail("request_validation", "Demande de validation TFJM²")
 | 
				
			||||||
            return redirect('tournament:team_detail', pk=team.pk)
 | 
					            return redirect('tournament:team_detail', pk=team.pk)
 | 
				
			||||||
        elif "validate" in request.POST and request.user.organizes:
 | 
					        elif "validate" in request.POST and request.user.organizes:
 | 
				
			||||||
            team.validation_status = "2valid"
 | 
					            team.validation_status = "2valid"
 | 
				
			||||||
            team.save()
 | 
					            team.save()
 | 
				
			||||||
            # TODO Send mail
 | 
					            team.send_mail("validate_team", "Équipe validée TFJM²")
 | 
				
			||||||
            return redirect('tournament:team_detail', pk=team.pk)
 | 
					            return redirect('tournament:team_detail', pk=team.pk)
 | 
				
			||||||
        elif "invalidate" in request.POST and request.user.organizes:
 | 
					        elif "invalidate" in request.POST and request.user.organizes:
 | 
				
			||||||
            team.validation_status = "0invalid"
 | 
					            team.validation_status = "0invalid"
 | 
				
			||||||
            team.save()
 | 
					            team.save()
 | 
				
			||||||
            # TODO Send mail
 | 
					            team.send_mail("unvalidate_team", "Équipe non validée TFJM²")
 | 
				
			||||||
            return redirect('tournament:team_detail', pk=team.pk)
 | 
					            return redirect('tournament:team_detail', pk=team.pk)
 | 
				
			||||||
        elif "delete" in request.POST and request.user.organizes:
 | 
					        elif "delete" in request.POST and request.user.organizes:
 | 
				
			||||||
            team.delete()
 | 
					            team.delete()
 | 
				
			||||||
@@ -485,11 +482,3 @@ class PoolDetailView(LoginRequiredMixin, DetailView):
 | 
				
			|||||||
            return resp
 | 
					            return resp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return self.get(request, *args, **kwargs)
 | 
					        return self.get(request, *args, **kwargs)
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@method_decorator(csrf_exempt, 'dispatch')
 | 
					 | 
				
			||||||
class PoolEndpoint(View):
 | 
					 | 
				
			||||||
    def post(self, request, *args, **kwargs):
 | 
					 | 
				
			||||||
        print(request.headers)
 | 
					 | 
				
			||||||
        print(request.user)
 | 
					 | 
				
			||||||
        print(self.request.POST)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,11 +6,11 @@
 | 
				
			|||||||
    <title>Demande de validation - TFJM²</title>
 | 
					    <title>Demande de validation - TFJM²</title>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
Bonjour {FIRST_NAME} {SURNAME},<br />
 | 
					Bonjour {{ user }},<br />
 | 
				
			||||||
<br />
 | 
					<br />
 | 
				
			||||||
L'équipe « {TEAM_NAME} » ({TRIGRAM}) vient de demander à valider son équipe pour participer au tournoi {TOURNAMENT} du
 | 
					L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer au tournoi
 | 
				
			||||||
TFJM². Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
 | 
					{{ tournament }} du TFJM². Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
 | 
				
			||||||
<a href="{URL_BASE}/equipe/{TRIGRAM}">{URL_BASE}/equipe/{TRIGRAM}</a><br/>
 | 
					<a href="{% url "tournament:team_detail" pk=team.pk %}">{% url "tournament:team_detail" pk=team.pk %}</a><br/>
 | 
				
			||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
Cordialement,<br/>
 | 
					Cordialement,<br/>
 | 
				
			||||||
<br />
 | 
					<br />
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								templates/mail_templates/request_validation.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								templates/mail_templates/request_validation.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					Bonjour {{ user }},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer au tournoi
 | 
				
			||||||
 | 
					{{ tournament }} du TFJM². Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
 | 
				
			||||||
 | 
					<a href="{% url "tournament:team_detail" pk=team.pk %}">{% url "tournament:team_detail" pk=team.pk %}</a>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cordialement,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le comité national d'organisation du TFJM²
 | 
				
			||||||
@@ -2,15 +2,22 @@
 | 
				
			|||||||
<html lang="fr">
 | 
					<html lang="fr">
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="UTF-8">
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
    <title>Équipe non validée – TFJM² {YEAR}</title>
 | 
					    <title>Équipe non validée – TFJM²</title>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
Bonjour {FIRST_NAME} {SURNAME},<br/>
 | 
					Bonjour {{ user }},<br/>
 | 
				
			||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
Maleureusement, votre équipe « {TEAM_NAME} » ({TRIGRAM}) n'a pas été validée. Veuillez vérifier que vos autorisations sont correctes.
 | 
					Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos autorisations sont correctes.
 | 
				
			||||||
{MESSAGE}<br />
 | 
					{% if message %}
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    Le CNO vous adresse le message suivant :
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					        {{ message }}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
<br />
 | 
					<br />
 | 
				
			||||||
N'hésitez pas à nous contacter à l'adresse <a href="contact@tfjm.org">contact@tfjm.org</a> pour plus d'informations.
 | 
					N'hésitez pas à nous contacter à l'adresse <a href="mailto:contact@tfjm.org">contact@tfjm.org</a> pour plus d'informations.
 | 
				
			||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
Cordialement,<br/>
 | 
					Cordialement,<br/>
 | 
				
			||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								templates/mail_templates/unvalidate_team.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								templates/mail_templates/unvalidate_team.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					Bonjour {{ user }},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos autorisations sont correctes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if message %}
 | 
				
			||||||
 | 
					Le CNO vous adresse le message suivant :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{ message }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					N'hésitez pas à nous contacter à l'adresse contact@tfjm.org pour plus d'informations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cordialement,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le comité national d'organisation du TFJM²
 | 
				
			||||||
@@ -9,7 +9,14 @@ Bonjour {{ user }},<br/>
 | 
				
			|||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
Félicitations ! Votre équipe « {{ team }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
 | 
					Félicitations ! Votre équipe « {{ team }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
 | 
				
			||||||
vos problèmes et publier vos solutions sur la plateforme.
 | 
					vos problèmes et publier vos solutions sur la plateforme.
 | 
				
			||||||
{{ message }}<br />
 | 
					{% if message %}
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    Le CNO vous adresse le message suivant :
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					        {{ message }}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
Cordialement,<br/>
 | 
					Cordialement,<br/>
 | 
				
			||||||
<br/>
 | 
					<br/>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								templates/mail_templates/validate_team.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								templates/mail_templates/validate_team.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					Bonjour {{ user }},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Félicitations ! Votre équipe « {{ team }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
 | 
				
			||||||
 | 
					vos problèmes et publier vos solutions sur la plateforme.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if message %}
 | 
				
			||||||
 | 
					Le CNO vous adresse le message suivant :
 | 
				
			||||||
 | 
					{{ message }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cordialement,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le comité national d'organisation du TFJM²
 | 
				
			||||||
		Reference in New Issue
	
	Block a user