1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-08-11 09:28:56 +02:00

Compare commits

..

1 Commits

Author SHA1 Message Date
Emmy D'Anello
9cea493f31 Fix photo authorization export
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
2024-10-28 23:50:57 +01:00
29 changed files with 391 additions and 618 deletions

View File

@@ -2,6 +2,15 @@ stages:
- test
- quality-assurance
py311:
stage: test
image: python:3.11-alpine
before_script:
- apk add --no-cache libmagic
- apk add --no-cache gettext
- pip install tox --no-cache-dir
script: tox -e py311
py312:
stage: test
image: python:3.12-alpine

View File

@@ -30,9 +30,9 @@ Il faut maintenant récupérer ce dossier. Sortir du conteneur, et exécuter dan
.. code:: bash
sudo docker cp tfjm-inscription-1:/code/output/photo_authorizations .
sudo mv photo_authorizations/* "data/owncloud/data/Emmy/files/Autorisations de droit à l'image/Autorisations de droit à l'image 2024/"
sudo chown -R www-data:root "data/owncloud/data/Emmy/files/Autorisations de droit à l'image/Autorisations de droit à l'image 2024"
sudo docker cp tfjm_plateforme_1:/code/output/photo_authorizations .
sudo mv photo_authorizations/* "data/owncloud/files/Emmy/Autorisations de droit à l'image/Autorisations de droit à l'image 2024/"
sudo chown -R www-data:root "data/owncloud/files/Emmy/Autorisations de droit à l'image/Autorisations de droit à l'image 2024"
sudo rmdir photo_authorizations
Il faut enfin réactualiser Owncloud. Exécuter en tant que www-data :
@@ -60,43 +60,26 @@ Sauvegardez alors le dossier ``/srv/TFJM/data/inscription/media`` et exportez la
.. code:: bash
sudo cp -r data/inscription/media data/inscription/media-2024
sudo docker compose exec -u postgres postgres pg_dump inscription_tfjm | sudo tee inscription_tfjm_bkp_2024.sql > /dev/null
sudo docker compose exec -u postgres postgres pg_dump inscription | sudo tee inscription_bkp_2024.sql
Réinitialisation effective
""""""""""""""""""""""""""
Il est désormais possible de réinitialiser la base de données, après avoir éteint le serveur :
Il est désormais possible de réinitialiser la base de données. Rendez-vous dans le conteneur de
la plateforme, et exécutez :
.. code:: bash
sudo docker compose stop inscription
sudo rm -r data/inscription/media/*
sudo docker compose exec -u postgres postgres dropdb inscription_tfjm
sudo docker compose exec -u postgres postgres createdb -O inscription_tfjm inscription_tfjm
rm -r media/*
./manage.py reset_db
Redémarrez enfin le serveur (les migrations seront créées automatiquement)
et créez un nouveau compte administrateur⋅rice :
Créez enfin un nouveau compte administrateur⋅rice :
.. code:: bash
sudo docker compose up -d inscription
sudo docker compose exec inscription bash
./manage.py createsuperuser
Vérifiez finalement le bon fonctionnement du site.
Sites Django
""""""""""""
Après avoir réinitialisé les données, il faut mettre à jour le site Django, qui permettra
d'avoir notamment des noms de domaine correct dans les mails envoyés.
Se connecter alors sur le site réouvert, puis dans la partie « Administration », chercher la
section « Sites » et modifier l'unique site présent. Vous pouvez ensuite effectuer les modifications
à réaliser.
Nouveaux paramètres pour la nouvelle année
------------------------------------------
@@ -179,9 +162,9 @@ On sort du conteneur et on récupère les solutions pour les déplacer dans Ownc
.. code:: bash
sudo docker cp tfjm-inscription-1:/code/output/solutions .
sudo mv solutions/* "data/owncloud/data/Emmy/files/Solutions écrites 2024/"
sudo chown -R www-data:root "data/owncloud/data/Emmy/files/Solutions écrites 2024"
sudo docker cp tfjm_plateforme_1:/code/output/solutions .
sudo mv solutions/* "data/owncloud/files/Emmy/Solutions écrites 2024/"
sudo chown -R www-data:root "data/owncloud/files/Emmy/Solutions écrites 2024"
sudo rmdir solutions
Il faut enfin réactualiser Owncloud. Exécuter en tant que www-data :

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@ from io import StringIO
import re
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Div, Field, HTML, Layout, Submit
from crispy_forms.layout import Div, Field, Submit
from django import forms
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
@@ -77,30 +77,9 @@ class ParticipationForm(forms.ModelForm):
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if settings.SINGLE_TOURNAMENT:
if settings.TFJM_APP == "ETEAM":
# One single tournament only
del self.fields['tournament']
self.helper = FormHelper()
idf_warning_banner = f"""
<div class=\"alert alert-warning\">
<h5 class=\"alert-heading\">{_("IMPORTANT")}</h4>
{_("""For the tournaments in the region "Île-de-France": registration is
unified for each tournament. By choosing a tournament "Île-de-France",
you're accepting that your team may be selected for one of these tournaments.
In case of date conflict, please write them in your motivation letter.""")}
</div>
"""
unified_registration_tournament_ids = ",".join(
str(tournament.id) for tournament in Tournament.objects.filter(
unified_registration=True).all())
self.helper.layout = Layout(
'tournament',
Div(
HTML(idf_warning_banner),
css_id="idf_warning_banner",
data_tid_unified=unified_registration_tournament_ids,
),
'final',
)
class Meta:
model = Participation

View File

@@ -12,8 +12,6 @@ class Command(BaseCommand):
def handle(self, *args, **kwargs):
base_dir = Path(__file__).parent.parent.parent.parent
base_dir /= "output"
if not base_dir.is_dir():
base_dir.mkdir()
base_dir /= "solutions"
if not base_dir.is_dir():
base_dir.mkdir()

View File

@@ -1,21 +0,0 @@
# Generated by Django 5.1.5 on 2025-01-14 18:06
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("participation", "0022_alter_note_observer_oral"),
]
operations = [
migrations.AddField(
model_name="tournament",
name="unified_registration",
field=models.BooleanField(
default=False, verbose_name="unified registration"
),
),
]

View File

@@ -283,11 +283,6 @@ class Tournament(models.Model):
default=date.today,
)
unified_registration = models.BooleanField(
verbose_name=_("unified registration"),
default=False,
)
place = models.CharField(
max_length=255,
verbose_name=_("place"),

View File

@@ -2,28 +2,28 @@
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Demande de validation - TFJM²</title>
<title>Validation request - ETEAM</title>
</head>
<body>
<p>
Bonjour,
Hi,
</p>
<p>
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
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 :
The team "{{ team.name }}" ({{ team.trigram }}) has just asked to validate his team to take part
in ETEAM.
You can decide whether or not to accept the team by going to the team page:
<a href="https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}">
https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}
</a>
</p>
<p>
Cordialement,
Sincerely yours,
</p>
<p>
L'organisation du TFJM²
The ETEAM team
</p>
</body>
</html>

View File

@@ -1,10 +1,10 @@
Bonjour {{ user }},
Hi {{ user }},
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
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 :
The team "{{ team.name }}" ({{ team.trigram }}) has just asked to validate his team to take part
in ETEAM.
You can decide whether or not to accept the team by going to the team page:
https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}
Cordialement,
Sincerely yours,
L'organisation du TFJM²
The ETEAM team

View File

@@ -2,21 +2,21 @@
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Équipe non validée TFJM²</title>
<title>Team not validated ETEAM</title>
</head>
<body>
Bonjour,<br/>
Hi,<br/>
<br />
Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos autorisations
de droit à l'image sont correctes. Les organisateurs vous adressent ce message :<br />
Unfortunately, your team "{{ team.name }}" ({{ team.trigram }}) has not been validated.
Please check that your authorisations are correctly filled in.
The organisers are sending you this message:<br />
<br />
{{ message }}<br />
<br />
N'hésitez pas à nous contacter à l'adresse <a href="mailto:contact@tfjm.org">contact@tfjm.org</a>
pour plus d'informations.
Please contact us at <a href="mailto:eteam_moc@proton.me">eteam_moc@proton.me</a> if you need further information.
<br/>
Cordialement,<br/>
Sincerely yours,<br/>
<br/>
Le comité d'organisation du TFJM²
The ETEAM team
</body>
</html>

View File

@@ -1,12 +1,13 @@
Bonjour,
Hi,
Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos
autorisations de droit à l'image sont correctes. Les organisateurs vous adressent ce message :
Unfortunately, your team "{{ team.name }}" ({{ team.trigram }}) has not been validated.
Please check that your authorisations are correctly filled in.
The organisers are sending you this message:<br />
{{ message }}
N'hésitez pas à nous contacter à l'adresse contact@tfjm.org pour plus d'informations.
Please contact us at eteam_moc@proton.me if you need further information.
Cordialement,
Sincerely yours,
Le comité d'organisation du TFJM²
The ETEAM team

View File

@@ -2,37 +2,36 @@
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Équipe validée TFJM²</title>
<title>Team validated ETEAM</title>
</head>
<body>
<p>
Bonjour {{ registration }},
Hello {{ registration }},
</p>
<p>
Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais
apte à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme.
Congratulations! Your team "{{ team.name }}" ({{ team.trigram }}) is now validated! You are now ready to
to work on your problems. You can then upload your solutions to the platform.
</p>
{% if payment %}
<p>
Vous devez désormais vous acquitter de vos frais de participation, de {{ payment.amount }} € par élève.
Vous pouvez payer par carte bancaire ou par virement bancaire. Vous trouverez les informations
sur <a href="https://{{ domain }}{% url 'registration:update_payment' pk=payment.pk %}">la page de paiement</a>.
Si vous disposez d'une bourse, l'inscription est gratuite, mais vous devez soumettre un justificatif
sur la même page.
You must now pay your participation fee of € {{ payment.amount }}.
You can pay by credit card or bank transfer. You'll find information
on the payment page which you can find on
<a href="https://{{ domain }}{% url 'registration:my_account_detail' %}">your account</a>.
If you have a scholarship, registration is free, but you must submit a justification on the same page.
</p>
{% elif registration.is_coach and team.participation.tournament.price %}
<p>
Votre équipe doit désormais s'acquitter des frais de participation de {{ team.participation.tournament.price }} €
par élève (les encadrant⋅es sont exonéré⋅es). Les élèves qui disposent d'une bourse sont exonéré⋅es de ces frais.
Vous pouvez suivre l'état des paiements sur
<a href="https://{{ domain }}{% url 'participation:team_detail' pk=team.pk %}">la page de votre équipe</a>.
Your team must now pay a participation fee of {{ team.participation.tournament.price }} € per student (supervisors are exempt). Students with scholarships are exempt⋅es from these fees.
You can track the status of payments on
<a href="https://{{ domain }}{% url 'participation:team_detail' pk=team.pk %}">your team page</a>.
</p>
{% endif %}
{% if message %}
<p>
Les organisateur⋅ices vous adressent ce message :
The organisers send you this message:
</p>
<p>
{{ message }}
@@ -40,7 +39,7 @@
{% endif %}
<p>
Le comité d'organisation du TFJM²
The ETEAM team
</p>
</body>
</html>

View File

@@ -1,23 +1,21 @@
Bonjour {{ registration }},
Hello {{registration }},
Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte
à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme.
{% if team.participation.amount %}
Vous devez désormais vous acquitter de vos frais de participation, de {{ team.participation.amount }}.
Vous pouvez payer par carte bancaire ou par virement bancaire. Vous trouverez les informations
sur la page de paiement que vous pouvez retrouver sur votre compte :
Congratulations! Your team "{{ team.name }}" ({{ team.trigram }}) is now validated! You are now ready to
to work on your problems. You can then upload your solutions to the platform.
{% if payment %}
You must now pay your participation fee of € {{ payment.amount }}.
You can pay by credit card or bank transfer. You'll find information
on the payment page which you can find on your account:
https://{{ domain }}{% url 'registration:my_account_detail' %}
Si vous disposez d'une bourse, l'inscription est gratuite, mais vous devez soumettre un justificatif
sur la même page.
If you have a scholarship, registration is free, but you must submit a justification on the same page.
{% elif registration.is_coach and team.participation.tournament.price %}
Votre équipe doit désormais s'acquitter des frais de participation de {{ team.participation.tournament.price }} €
par élève (les encadrant⋅es sont exonéré⋅es). Les élèves qui disposent d'une bourse sont exonéré⋅es de ces frais.
Vous pouvez suivre l'état des paiements sur la page de votre équipe :
Your team must now pay a participation fee of {{ team.participation.tournament.price }} € per student (supervisors are exempt). Students with scholarships are exempt⋅es from these fees.
You can track the status of payments on your team page:
https://{{ domain }}{% url 'participation:team_detail' pk=team.pk %}
{% endif %}
{% if message %}
Les organisateurices vous adressent ce message :
The organisers send you this message:
{{ message }}
{% endif %}
Le comité d'organisation du TFJM²
The ETEAM team

View File

@@ -208,26 +208,22 @@
<h3>{% trans "Files available for download" %}</h3>
<div class="alert alert-warning fade show files-to-download-collapse" id="files-to-download-popup">
<h4>{% trans "IMPORTANT" %}</h4>
<h4>IMPORTANT</h4>
<p>
{% blocktrans trimmed %}
The files accessible below may contain personal information.
In compliance with European law and out of respect for the confidentiality of participants data,
In compliance with European law and out of respect for the confidentiality of participants' data,
you may only use this data for purposes strictly necessary to the organization of the tournament.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed %}
Moreover, it is your responsibility to delete these files once you no longer need them, especially at the end of the tournament.
{% endblocktrans %}
</p>
<p class="text-center">
<button class="btn btn-warning" data-bs-toggle="collapse" href=".files-to-download-collapse"
role="button" aria-expanded="false" aria-controls="files-to-download files-to-download-popup">
{% trans "I agree not to divulge participants data and to delete them at the end of the tournament." %}
I agree not to divulge participants' data and to delete them at the end of the tournament.
</button>
</p>
</div>

View File

@@ -1,37 +1,15 @@
{% extends request.content_only|yesno:"empty.html,base.html" %}
{% load crispy_forms_filters crispy_forms_tags i18n %}
{% load crispy_forms_filters i18n %}
{% block content %}
<form method="post">
<div id="form-content">
{% csrf_token %}
{{ form|crispy }}
{% crispy participation_form %}
{{ participation_form|crispy }}
</div>
<button class="btn btn-success" type="submit">{% trans "Update" %}</button>
</form>
{% endblock content %}
{% block extrajavascript %}
<script>
const tournamentSelect = document.getElementById('id_tournament')
const idfWarningBanner = document.getElementById('idf_warning_banner')
const unifiedRegistrationTournamentIds = idfWarningBanner.getAttribute('data-tid-unified').split(',')
if (idfWarningBanner.getAttribute('data-tid-unified') !== "") {
function updateIDFWarningBannerVisibility() {
const tid = tournamentSelect.value
if (unifiedRegistrationTournamentIds.includes(tid))
idfWarningBanner.classList.remove('d-none')
else
idfWarningBanner.classList.add('d-none')
}
tournamentSelect.addEventListener('change', updateIDFWarningBannerVisibility)
updateIDFWarningBannerVisibility()
}
else {
idfWarningBanner.classList.add('d-none')
}
</script>
{% endblock %}

View File

@@ -14,8 +14,6 @@ class Command(BaseCommand):
def handle(self, *args, **kwargs):
base_dir = Path(__file__).parent.parent.parent.parent
base_dir /= "output"
if not base_dir.is_dir():
base_dir.mkdir()
base_dir /= "photo_authorizations"
if not base_dir.is_dir():
base_dir.mkdir()

View File

@@ -9,29 +9,29 @@
<body>
<p>
Bonjour {{ user.registration }},
Hi {{ user.registration }},
</p>
<p>
Vous avez été invités par {{ inviter.registration }} à rejoindre la plateforme du TFJM², accessible à l'adresse
<a href="https://{{ domain }}/">https://{{ domain }}/</a>. Vous disposez d'un compte de bénévole.
You have been invited by {{ inviter.registration }} to join the ETEAM platform, available at
<a href="https://{{ domain }}/">https://{{ domain }}/</a>. You have a volunteer account.
</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.
A random password has been set: <strong>{{ password }}</strong>.
For security reasons, please change it as soon as you log in the first time.
</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>.
In the event of a problem, please contact us by e-mail at the following address
<a href="mailto:eteam_moc@proton.me">eteam_moc@proton.me</a>.
</p>
<p>
Bien cordialement,
Sincerely yours,
</p>
--
<p>
{% trans "The TFJM² team." %}<br>
{% trans "The ETEAM team." %}<br>
</p>

View File

@@ -1,17 +1,14 @@
{% load i18n %}
Bonjour {{ user.registration }},
Hi {{ user.registration }},
Vous avez été invités par {{ inviter.registration }} à rejoindre la plateforme du TFJM², accessible à l'adresse
https://{{ domain }}/. Vous disposez d'un compte de bénévole.
You have been invited by {{ inviter.registration }} to join the ETEAM platform, available at https://{{ domain }}. You have a volunteer account.
A random password has been set: {{ password }}.
For security reasons, please change it as soon as you log in the first time.
Un mot de passe aléatoire a été défini : {{ password }}.
Par sécurité, merci de le changer dès votre connexion.
In the event of a problem, please contact us by e-mail at the following address eteam_moc@proton.me.
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,
Sincerely yours,
--
{% trans "The TFJM² team." %}
{% trans "The ETEAM team." %}

View File

@@ -13,7 +13,7 @@
</p>
<p>
{% trans "You recently registered on the TFJM² platform. Please click on the link below to confirm your registration." %}
{% trans "You recently registered on the ETEAM platform. Please click on the link below to confirm your registration." %}
</p>
<p>
@@ -36,5 +36,5 @@
--
<p>
{% trans "The TFJM² team." %}<br>
{% trans "The ETEAM team." %}<br>
</p>

View File

@@ -2,7 +2,7 @@
{% trans "Hi" %} {{ user.registration }},
{% trans "You recently registered on the TFJM² platform. Please click on the link below to confirm your registration." %}
{% trans "You recently registered on the ETEAM platform. Please click on the link below to confirm your registration." %}
https://{{ domain }}{% url 'registration:email_validation' uidb64=uid token=token %}
@@ -12,4 +12,4 @@ https://{{ domain }}{% url 'registration:email_validation' uidb64=uid token=toke
{% trans "Thanks" %},
{% trans "The TFJM² team." %}
{% trans "The ETEAM team." %}

View File

@@ -14,7 +14,7 @@
<p>
{% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament.name %}
We successfully received the payment of {{ amount }} € for your participation for the TFJM² in the team {{ team }} for the tournament {{ tournament }}!
We successfully received the payment of {{ amount }} € for your participation for the ETEAM in the team {{ team }}!
{% endblocktrans %}
</p>
@@ -32,17 +32,13 @@
</ul>
</p>
<p>
{% trans "Please note that these dates may be subject to change. If your local organizers gave you different dates, trust them." %}
</p>
<p>
{% trans "NB: This mail don't represent a payment receipt. The payer should receive a mail from Hello Asso. If it is not the case, please contact us if necessary" %}
</p>
--
<p>
{% trans "The TFJM² team." %}<br>
{% trans "The ETEAM team." %}<br>
</p>
</body>
</html>

View File

@@ -2,7 +2,7 @@
{% trans "Hi" %} {{ registration|safe }},
{% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament.name %}
We successfully received the payment of {{ amount }} € for your participation for the TFJM² in the team {{ team }} for the tournament {{ tournament }}!
We successfully received the payment of {{ amount }} € for your participation for the ETEAM in the team {{ team }}!
{% endblocktrans %}
{% trans "Your registration is now fully completed, and you can work on your solutions." %}
@@ -13,10 +13,8 @@ We successfully received the payment of {{ amount }} € for your participation
* {% trans "Problems draw:" %} {{ payment.tournament.solutions_draw|date }}
* {% trans "Tournament dates:" %} {% trans "From" %} {{ payment.tournament.date_start|date }} {% trans "to" %} {{ payment.tournament.date_end|date }}
{% trans "Please note that these dates may be subject to change. If your local organizers gave you different dates, trust them." %}
{% trans "NB: This mail don't represent a payment receipt. The payer should receive a mail from Hello Asso. If it is not the case, please contact us if necessary" %}
--
{% trans "The TFJM² team" %}
{% trans "The ETEAM team" %}

View File

@@ -14,7 +14,7 @@
<p>
{% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament %}
You are registered for the TFJM² of {{ tournament }}. Your team {{ team }} has been successfully validated.
You are registered for the ETEAM. Your team {{ team }} has been successfully validated.
To end your inscription, you must pay the amount of {{ amount }} €.
{% endblocktrans %}
</p>
@@ -49,7 +49,7 @@
--
<p>
{% trans "The TFJM² team." %}<br>
{% trans "The ETEAM team." %}<br>
</p>
</body>
</html>

View File

@@ -2,7 +2,7 @@
{% trans "Hi" %} {{ registration|safe }},
{% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament %}
You are registered for the TFJM² of {{ tournament }}. Your team {{ team }} has been successfully validated.
You are registered for the ETEAM. Your team {{ team }} has been successfully validated.
To end your inscription, you must pay the amount of {{ amount }} €.
{% endblocktrans %}
{% if payment.grouped %}
@@ -19,4 +19,4 @@ https://{{ domain }}{% url "registration:update_payment" pk=payment.pk %}
{% trans "If you have any problem, feel free to contact us." %}
--
The TFJM² team
The ETEAM team

View File

@@ -17,7 +17,6 @@
% Specials
\newcommand{\writingsep}{\vrule height 4ex width 0pt}
\newcommand{\cdt}{\kern-0.5pt\ensuremath\cdot\kern-0.5pt}
% Page formating
\hoffset -1in
@@ -57,23 +56,19 @@ Autorisation d'enregistrement et de diffusion de l'image ({{ tournament.name }})
Je soussign\'e\cdt{}e {{ registration|safe|default:"\dotfill" }}\\
Je soussign\'e {{ registration|safe|default:"\dotfill" }}\\
demeurant au {{ registration.address|safe|default:"\dotfill" }}
\medskip
Cochez la/les cases correspondantes.\\
\medskip
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$
{% if tournament.unified_registration %} dans
l'un des tournois d'Île-de-France (selon sélection : du 26 au 27 avril 2025, du 3 au 4 mai 2025, ou du 10 au 11 mai 2025)
{% else %} de
{{ tournament.name }} du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }},
{% endif %} \`a
me photographier ou \`a me filmer et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion
sur son site et sur les sites partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit dutiliser mon
image sur tous ses supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente,
cessionnaire des droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ de {{ tournament.name }}
du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, \`a me photographier ou \`a me
filmer et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites
partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit dutiliser mon image sur tous ses supports
d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des droits
pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
\medskip
Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la
@@ -103,7 +98,7 @@ Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\
\bigskip
Signature pr\'ec\'ed\'ee de la mention « lu et approuv\'e »
Signature pr\'ec\'ed\'ee de la mention \og lu et approuv\'e \fg{}
\medskip
@@ -111,7 +106,7 @@ Signature pr\'ec\'ed\'ee de la mention « lu et approuv\'e »
\begin{minipage}[c]{0.5\textwidth}
\underline{La/le participant\cdt{}e :}\\
\underline{Le participant :}\\
Fait \`a :\\
le

View File

@@ -17,7 +17,6 @@
% Specials
\newcommand{\writingsep}{\vrule height 4ex width 0pt}
\newcommand{\cdt}{\kern-0.5pt\ensuremath\cdot\kern-0.5pt}
% Page formating
\hoffset -1in
@@ -58,25 +57,20 @@ Autorisation d'enregistrement et de diffusion de l'image
Je soussign\'e\cdt{}e \dotfill (p\`ere, m\`ere, responsable l\'egal) \\
agissant en qualit\'e de repr\'esentant\cdt{}e de {{ registration|safe|default:"\dotfill" }}\\
Je soussign\'e \dotfill (p\`ere, m\`ere, responsable l\'egal) \\
agissant en qualit\'e de repr\'esentant de {{ registration|safe|default:"\dotfill" }}\\
demeurant au {{ registration.address|safe|default:"\dotfill" }}
\medskip
Cochez la/les cases correspondantes.\\
\medskip
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$
{% if tournament.unified_registration %} dans
l'un des tournois d'Île-de-France (selon sélection : du 26 au 27 avril 2025, du 3 au 4 mai 2025, ou du 10 au 11 mai 2025)
{% else %} de
{{ tournament.name }} du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }},
{% endif %} \`a
photographier ou \`a filmer l'enfant et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion
sur son site et sur les sites partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit dutiliser l'image
de l'enfant sur tous ses supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la
pr\'esente, cessionnaire des droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de
ces photographies.\\
\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ de {{ tournament.name }}
du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, \`a photographier ou \`a filmer
l'enfant et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites
partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit dutiliser l'image de l'enfant sur tous ses
supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des
droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\
\medskip
Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la
@@ -106,14 +100,14 @@ Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\
\bigskip
Signatures pr\'ec\'ed\'ees de la mention « lu et approuv\'e »
Signatures pr\'ec\'ed\'ees de la mention \og lu et approuv\'e \fg{}
\medskip
\begin{minipage}[c]{0.5\textwidth}
\underline{La/le responsable l\'egal\cdt{}e :}\\
\underline{Le responsable l\'egal :}\\
Fait \`a :\\
le :

View File

@@ -17,7 +17,6 @@
% Specials
\newcommand{\writingsep}{\vrule height 4ex width 0pt}
\newcommand{\cdt}{\kern-0.5pt\ensuremath\cdot\kern-0.5pt}
% Page formating
\hoffset -1in
@@ -46,25 +45,16 @@
\Large \bf Autorisation parentale pour les mineurs ({{ tournament.name }})
\end{center}
Je soussigné\cdt{}e \hrulefill,\\
responsable légal\cdt{}e, demeurant \writingsep\hrulefill\\
Je soussigné(e) \hrulefill,\\
responsable légal, demeurant \writingsep\hrulefill\\
\writingsep\hrulefill,\\
\writingsep autorise {{ registration|default:"\hrulefill" }},\\
\cdt{}e le {{ registration.birth_date|default:"\underline{\phantom{dd/mm/aaaa} }" }},
à participer au Tournoi Français des Jeunes Mathématiciennes et Mathématiciens ($\mathbb{TFJM}^2$)
{% if tournament.unified_registration %} dans l'un des tournois d'Île-de-France selon sélection :
\begin{itemize}
\item Île-de-France 1, du 26 au 27 avril 2025 ;
\item Île-de-France 2, du 3 au 4 mai 2025 ;
\item Île-de-France 3, du 10 au 11 mai 2025.
\end{itemize}
{% else %}
organisé \`a :
(e) le {{ registration.birth_date }},
à participer au Tournoi Français des Jeunes Mathématiciennes et Mathématiciens ($\mathbb{TFJM}^2$) organisé \`a :
{{ tournament.place }}, du {{ tournament.date_start }} au {{ tournament.date_end }}.
{% endif %}
Iel se rendra au lieu indiqu\'e ci-dessus le samedi matin et quittera les lieux l'après-midi du dimanche par
ses propres moyens et sous la responsabilité du/de la représentant\cdt{}e légal\cdt{}e.
ses propres moyens et sous la responsabilité du représentant légal.

View File

@@ -30,15 +30,6 @@
</div>
</div>
<div class="alert alert-warning">
<h3 class="alert-heading"><i class="fas fa-warning"></i> {% trans "New in 2025" %}</h3>
{% blocktrans trimmed %}
Registration for Ile-de-France tournaments is now unified.
If you live in or near the Ile-de-France region, your registration will be pooled with each of the region's tournaments,
and the organizers will take care of team allocation. However, date constraints can be indicated in the motivation letter.
{% endblocktrans %}
</div>
<div class="jumbotron p-5 border rounded-5">
<h5 class="display-4">{% trans "How does it work?" %}</h5>
<p>

View File

@@ -1,5 +1,6 @@
[tox]
envlist =
py311
py312
py313