mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-02-19 01:41:19 +00:00
Compare commits
4 Commits
b4da740fb6
...
e0f230b8c7
Author | SHA1 | Date | |
---|---|---|---|
|
e0f230b8c7 | ||
|
47b14c3e47 | ||
|
0607398491 | ||
|
a454441097 |
@ -68,7 +68,7 @@ class RequestValidationForm(forms.Form):
|
|||||||
)
|
)
|
||||||
|
|
||||||
engagement = forms.BooleanField(
|
engagement = forms.BooleanField(
|
||||||
label=_("I engage myself to participate to the whole \"Correspondances\"."),
|
label=_("I engage myself to participate to the whole TFJM²."),
|
||||||
required=True,
|
required=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ from tfjm.matrix import Matrix, RoomPreset, RoomVisibility
|
|||||||
|
|
||||||
class Team(models.Model):
|
class Team(models.Model):
|
||||||
"""
|
"""
|
||||||
The Team model represents a real team that participates to the Correspondances.
|
The Team model represents a real team that participates to the TFJM².
|
||||||
This only includes the registration detail.
|
This only includes the registration detail.
|
||||||
"""
|
"""
|
||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
|
@ -11,7 +11,7 @@ Bonjour {{ user.registration }},
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
|
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
|
||||||
au {{ team.participation.get_problem_display }} du TFJM² des Jeunes Mathématicien·ne·s.
|
au {{ team.participation.get_problem_display }} du TFJM².
|
||||||
Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
||||||
<a href="https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}">
|
<a href="https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}">
|
||||||
https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}
|
https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}
|
||||||
@ -23,7 +23,7 @@ Cordialement,
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
L'organisation du TFJM² des Jeunes Mathématicien·ne·s
|
L'organisation du TFJM²
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
Bonjour {{ user.registration }},
|
Bonjour {{ user.registration }},
|
||||||
|
|
||||||
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
|
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
|
||||||
au {{ team.participation.get_problem_display }} du TFJM² des Jeunes Mathématicien·ne·s.
|
au {{ team.participation.get_problem_display }} du TFJM².
|
||||||
Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
||||||
https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}
|
https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}
|
||||||
|
|
||||||
Cordialement,
|
Cordialement,
|
||||||
|
|
||||||
L'organisation du TFJM² des Jeunes Mathématicien·ne·s
|
L'organisation du TFJM²
|
||||||
|
@ -17,6 +17,6 @@ pour plus d'informations.
|
|||||||
<br/>
|
<br/>
|
||||||
Cordialement,<br/>
|
Cordialement,<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Le comité d'organisation du TFJM² des Jeunes Mathématicien·ne·s
|
Le comité d'organisation du TFJM²
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -9,4 +9,4 @@ N'hésitez pas à nous contacter à l'adresse contact@tfjm.org pour plus d'infor
|
|||||||
|
|
||||||
Cordialement,
|
Cordialement,
|
||||||
|
|
||||||
Le comité d'organisation du TFJM² des Jeunes Mathématicien·ne·s
|
Le comité d'organisation du TFJM²
|
||||||
|
@ -7,14 +7,14 @@
|
|||||||
<body>
|
<body>
|
||||||
Bonjour,<br/>
|
Bonjour,<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
|
Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte
|
||||||
votre problème. Lorsque les Correspondances auront débutées, vous pourrez soumettre votre vidéo sur la plateforme d'inscription.<br>
|
à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme.<br>
|
||||||
Les organisateurs vous adressent ce message :<br/>
|
Les organisateurs vous adressent ce message :<br/>
|
||||||
<br/>
|
<br/>
|
||||||
{{ message }}<br />
|
{{ message }}<br />
|
||||||
<br/>
|
<br/>
|
||||||
Cordialement,<br/>
|
Cordialement,<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Le comité d'organisation du TFJM² des Jeunes Mathématicien·ne·s
|
Le comité d'organisation du TFJM²
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Bonjour,
|
Bonjour,
|
||||||
|
|
||||||
Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
|
Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte
|
||||||
votre problème. Lorsque les Correspondances auront débutées, vous pourrez soumettre votre vidéo sur la plateforme d'inscription.
|
à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme.
|
||||||
|
|
||||||
Les organisateurs vous adressent ce message :
|
Les organisateurs vous adressent ce message :
|
||||||
|
|
||||||
@ -9,4 +9,4 @@ Les organisateurs vous adressent ce message :
|
|||||||
|
|
||||||
Cordialement,
|
Cordialement,
|
||||||
|
|
||||||
Le comité d'organisation du TFJM² des Jeunes Mathématicien·ne·s
|
Le comité d'organisation du TFJM²
|
||||||
|
@ -218,7 +218,7 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView)
|
|||||||
mail_context = dict(user=admin.user, team=self.object, domain=Site.objects.first().domain)
|
mail_context = dict(user=admin.user, team=self.object, domain=Site.objects.first().domain)
|
||||||
mail_plain = render_to_string("participation/mails/request_validation.txt", mail_context)
|
mail_plain = render_to_string("participation/mails/request_validation.txt", mail_context)
|
||||||
mail_html = render_to_string("participation/mails/request_validation.html", mail_context)
|
mail_html = render_to_string("participation/mails/request_validation.html", mail_context)
|
||||||
admin.user.email_user("[Corres2math] Validation d'équipe", mail_plain, html_message=mail_html)
|
admin.user.email_user("[TFJM²] Validation d'équipe", mail_plain, html_message=mail_html)
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
def handle_validate_participation(self, form):
|
def handle_validate_participation(self, form):
|
||||||
@ -238,7 +238,7 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView)
|
|||||||
mail_context = dict(team=self.object, message=form.cleaned_data["message"])
|
mail_context = dict(team=self.object, message=form.cleaned_data["message"])
|
||||||
mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context)
|
mail_plain = render_to_string("participation/mails/team_validated.txt", mail_context)
|
||||||
mail_html = render_to_string("participation/mails/team_validated.html", mail_context)
|
mail_html = render_to_string("participation/mails/team_validated.html", mail_context)
|
||||||
send_mail("[Corres2math] Équipe validée", mail_plain, None, [self.object.email], html_message=mail_html)
|
send_mail("[TFJM²] Équipe validée", mail_plain, None, [self.object.email], html_message=mail_html)
|
||||||
|
|
||||||
get_sympa_client().subscribe(self.object.email, "equipes", False, f"Equipe {self.object.name}")
|
get_sympa_client().subscribe(self.object.email, "equipes", False, f"Equipe {self.object.name}")
|
||||||
get_sympa_client().unsubscribe(self.object.email, "equipes-non-valides", False)
|
get_sympa_client().unsubscribe(self.object.email, "equipes-non-valides", False)
|
||||||
@ -248,7 +248,7 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView)
|
|||||||
mail_context = dict(team=self.object, message=form.cleaned_data["message"])
|
mail_context = dict(team=self.object, message=form.cleaned_data["message"])
|
||||||
mail_plain = render_to_string("participation/mails/team_not_validated.txt", mail_context)
|
mail_plain = render_to_string("participation/mails/team_not_validated.txt", mail_context)
|
||||||
mail_html = render_to_string("participation/mails/team_not_validated.html", mail_context)
|
mail_html = render_to_string("participation/mails/team_not_validated.html", mail_context)
|
||||||
send_mail("[Corres2math] Équipe non validée", mail_plain, None, [self.object.email],
|
send_mail("[TFJM²] Équipe non validée", mail_plain, None, [self.object.email],
|
||||||
html_message=mail_html)
|
html_message=mail_html)
|
||||||
else:
|
else:
|
||||||
form.add_error(None, _("You must specify if you validate the registration or not."))
|
form.add_error(None, _("You must specify if you validate the registration or not."))
|
||||||
|
@ -45,7 +45,7 @@ class Registration(PolymorphicModel):
|
|||||||
The account got created or the email got changed.
|
The account got created or the email got changed.
|
||||||
Send an email that contains a link to validate the address.
|
Send an email that contains a link to validate the address.
|
||||||
"""
|
"""
|
||||||
subject = "[Corres2math] " + str(_("Activate your Correspondances account"))
|
subject = "[TFJM²] " + str(_("Activate your TFJM² account"))
|
||||||
token = email_validation_token.make_token(self.user)
|
token = email_validation_token.make_token(self.user)
|
||||||
uid = urlsafe_base64_encode(force_bytes(self.user.pk))
|
uid = urlsafe_base64_encode(force_bytes(self.user.pk))
|
||||||
site = Site.objects.first()
|
site = Site.objects.first()
|
||||||
|
@ -20,7 +20,7 @@ class RegistrationTable(tables.Table):
|
|||||||
|
|
||||||
def order_type(self, queryset, desc):
|
def order_type(self, queryset, desc):
|
||||||
types = ["volunteerregistration__adminregistration", "volunteerregistration", "participantregistration"]
|
types = ["volunteerregistration__adminregistration", "volunteerregistration", "participantregistration"]
|
||||||
return queryset.order_by(*(("" if desc else "-") + t for t in types)), True
|
return queryset.order_by(*(("-" if desc else "") + t for t in types)), True
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
attrs = {
|
attrs = {
|
||||||
@ -28,5 +28,5 @@ class RegistrationTable(tables.Table):
|
|||||||
}
|
}
|
||||||
model = Registration
|
model = Registration
|
||||||
fields = ('last_name', 'user__first_name', 'user__email', 'type',)
|
fields = ('last_name', 'user__first_name', 'user__email', 'type',)
|
||||||
order_by = ('volunteerregistration__adminregistration', 'volunteerregistration', 'last_name', 'first_name',)
|
order_by = ('type', 'last_name', 'first_name',)
|
||||||
template_name = 'django_tables2/bootstrap4.html'
|
template_name = 'django_tables2/bootstrap4.html'
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Bonjour {{ user.registration }},
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Vous avez été invités par {{ inviter }} à rejoindre la plateforme du TFJM², accessible à l'adresse
|
||||||
|
<a href="https://{{ domain }}/">https://{{ domain }}/</a>. Vous disposez d'un compte d'organisateur.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Un mot de passe aléatoire a été défini : <strong>{{ password }}</strong>.
|
||||||
|
Par sécurité, merci de le changer dès votre connexion.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
En cas de problème, merci de nous contacter soit par mail à l'adresse
|
||||||
|
<a href="mailto:contact@tfjm.org">contact@tfjm.org</a>, soit sur la plateforme de chat accessible sur
|
||||||
|
<a href="https://element.tfjm.org/">https://element.tfjm.org/</a> en vous connectant avec les mêmes identifiants.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Bien cordialement,
|
||||||
|
</p>
|
||||||
|
|
||||||
|
--
|
||||||
|
<p>
|
||||||
|
{% trans "The TFJM² team." %}<br>
|
||||||
|
</p>
|
@ -0,0 +1,17 @@
|
|||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
Bonjour {{ user.registration }},
|
||||||
|
|
||||||
|
Vous avez été invités par {{ inviter }} à rejoindre la plateforme du TFJM², accessible à l'adresse
|
||||||
|
https://{{ domain }}/. Vous disposez d'un compte d'organisateur.
|
||||||
|
|
||||||
|
Un mot de passe aléatoire a été défini : {{ password }}.
|
||||||
|
Par sécurité, merci de le changer dès votre connexion.
|
||||||
|
|
||||||
|
En cas de problème, merci de nous contacter soit par mail à l'adresse contact@tfjm.org, soit sur la plateforme
|
||||||
|
de chat accessible sur https://element.tfjm.org/ en vous connectant avec les mêmes identifiants.
|
||||||
|
|
||||||
|
Bien cordialement,
|
||||||
|
|
||||||
|
--
|
||||||
|
{% trans "The TFJM² team." %}
|
@ -9,11 +9,11 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{% trans "Hi" %} {{ user.username }},
|
{% trans "Hi" %} {{ user.registration }},
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{% trans "You recently registered on the Correspondances platform. Please click on the link below to confirm your registration." %}
|
{% trans "You recently registered on the TFJM² platform. Please click on the link below to confirm your registration." %}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% trans "Hi" %} {{ user.username }},
|
{% trans "Hi" %} {{ user.registration }},
|
||||||
|
|
||||||
{% trans "You recently registered on the Correspondances platform. Please click on the link below to confirm your registration." %}
|
{% trans "You recently registered on the TFJM² platform. Please click on the link below to confirm your registration." %}
|
||||||
|
|
||||||
https://{{ domain }}{% url 'registration:email_validation' uidb64=uid token=token %}
|
https://{{ domain }}{% url 'registration:email_validation' uidb64=uid token=token %}
|
||||||
|
|
||||||
|
@ -21,6 +21,15 @@
|
|||||||
<dd class="col-sm-6"><a href="mailto:{{ user_object.email }}">{{ user_object.email }}</a>
|
<dd class="col-sm-6"><a href="mailto:{{ user_object.email }}">{{ user_object.email }}</a>
|
||||||
{% if not user_object.registration.email_confirmed %} (<em>{% trans "Not confirmed" %}, <a href="{% url "registration:email_validation_resend" pk=user_object.pk %}">{% trans "resend the validation link" %}</a></em>){% endif %}</dd>
|
{% if not user_object.registration.email_confirmed %} (<em>{% trans "Not confirmed" %}, <a href="{% url "registration:email_validation_resend" pk=user_object.pk %}">{% trans "resend the validation link" %}</a></em>){% endif %}</dd>
|
||||||
|
|
||||||
|
{% if user_object == user %}
|
||||||
|
<dt class="col-sm-6 text-right">{% trans "Password:" %}</dt>
|
||||||
|
<dd class="col-sm-6">
|
||||||
|
<a href="{% url 'password_change' %}" class="btn-sm btn-secondary" data-turbolinks="false">
|
||||||
|
<i class="fas fa-edit"></i> {% trans "Change password" %}
|
||||||
|
</a>
|
||||||
|
</dd>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if user_object.registration.participates %}
|
{% if user_object.registration.participates %}
|
||||||
<dt class="col-sm-6 text-right">{% trans "Team:" %}</dt>
|
<dt class="col-sm-6 text-right">{% trans "Team:" %}</dt>
|
||||||
{% trans "any" as any %}
|
{% trans "any" as any %}
|
||||||
|
@ -6,13 +6,17 @@ import os
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.contrib.sites.models import Site
|
||||||
from django.core.exceptions import PermissionDenied, ValidationError
|
from django.core.exceptions import PermissionDenied, ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.http import FileResponse, Http404
|
from django.http import FileResponse, Http404
|
||||||
from django.shortcuts import redirect, resolve_url
|
from django.shortcuts import redirect, resolve_url
|
||||||
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.http import urlsafe_base64_decode
|
from django.utils.crypto import get_random_string
|
||||||
|
from django.utils.encoding import force_bytes
|
||||||
|
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import CreateView, DetailView, RedirectView, TemplateView, UpdateView, View
|
from django.views.generic import CreateView, DetailView, RedirectView, TemplateView, UpdateView, View
|
||||||
from django_tables2 import SingleTableView
|
from django_tables2 import SingleTableView
|
||||||
@ -114,6 +118,22 @@ class AddOrganizerView(VolunteerMixin, CreateView):
|
|||||||
registration.save()
|
registration.save()
|
||||||
registration.send_email_validation_link()
|
registration.send_email_validation_link()
|
||||||
|
|
||||||
|
password = get_random_string(16)
|
||||||
|
form.instance.set_password(password)
|
||||||
|
form.instance.save()
|
||||||
|
|
||||||
|
subject = "[TFJM²] " + str(_("New TFJM² organizer account"))
|
||||||
|
site = Site.objects.first()
|
||||||
|
message = render_to_string('registration/mails/add_organizer.txt', dict(user=registration.user,
|
||||||
|
inviter=self.request.user,
|
||||||
|
password=password,
|
||||||
|
domain=site.domain))
|
||||||
|
html = render_to_string('registration/mails/add_organizer.html', dict(user=registration.user,
|
||||||
|
inviter=self.request.user,
|
||||||
|
password=password,
|
||||||
|
domain=site.domain))
|
||||||
|
registration.user.email_user(subject, message, html_message=html)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<p>
|
<p>
|
||||||
La plateforme d'inscription du TFJM² des Jeunes Mathématiciennes a été développée entre 2019 et 2021
|
La plateforme d'inscription du TFJM² a été développée entre 2019 et 2021
|
||||||
par Yohann D'ANELLO, bénévole pour l'association Animath. Elle est vouée à être utilisée par les participants
|
par Yohann D'ANELLO, bénévole pour l'association Animath. Elle est vouée à être utilisée par les participants
|
||||||
pour intéragir avec les organisateurs et les autres participants.
|
pour intéragir avec les organisateurs et les autres participants.
|
||||||
</p>
|
</p>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user