Store the BBB link in the Pool model
This commit is contained in:
parent
56ad352e64
commit
35042f077f
|
@ -143,7 +143,7 @@ class SolutionForm(forms.ModelForm):
|
||||||
class PoolForm(forms.ModelForm):
|
class PoolForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Pool
|
model = Pool
|
||||||
fields = ('tournament', 'round', 'juries',)
|
fields = ('tournament', 'round', 'bbb_code', 'juries',)
|
||||||
widgets = {
|
widgets = {
|
||||||
"juries": forms.CheckboxSelectMultiple,
|
"juries": forms.CheckboxSelectMultiple,
|
||||||
}
|
}
|
||||||
|
|
|
@ -321,7 +321,7 @@ class Command(BaseCommand):
|
||||||
Matrix.set_room_avatar(f"#poule-{slug}-{pool.id}:tfjm.org", avatar_uri)
|
Matrix.set_room_avatar(f"#poule-{slug}-{pool.id}:tfjm.org", avatar_uri)
|
||||||
Matrix.set_room_avatar(f"#poule-{slug}-{pool.id}-jurys:tfjm.org", avatar_uri)
|
Matrix.set_room_avatar(f"#poule-{slug}-{pool.id}-jurys:tfjm.org", avatar_uri)
|
||||||
|
|
||||||
url_params = urlencode(dict(url="https://visio.animath.live/b/XXX-XXX-XXX",
|
url_params = urlencode(dict(url=f"https://visio.animath.live/b/{pool.bbb_code}",
|
||||||
isAudioConf='false', displayName='$matrix_display_name',
|
isAudioConf='false', displayName='$matrix_display_name',
|
||||||
avatarUrl='$matrix_avatar_url', userId='$matrix_user_id')) \
|
avatarUrl='$matrix_avatar_url', userId='$matrix_user_id')) \
|
||||||
.replace("%24", "$")
|
.replace("%24", "$")
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Generated by Django 3.0.11 on 2021-01-21 16:47
|
||||||
|
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('participation', '0011_note'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='pool',
|
||||||
|
name='bbb_code',
|
||||||
|
field=models.CharField(blank=True, default='', help_text='The code of the form xxx-xxx-xxx at the end of the BBB link.', max_length=11, validators=[django.core.validators.RegexValidator('[a-z]{3}-[a-z]{3}-[a-z]{3}')], verbose_name='BigBlueButton code'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -344,6 +344,15 @@ class Pool(models.Model):
|
||||||
verbose_name=_("juries"),
|
verbose_name=_("juries"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
bbb_code = models.CharField(
|
||||||
|
max_length=11,
|
||||||
|
blank=True,
|
||||||
|
default="",
|
||||||
|
verbose_name=_("BigBlueButton code"),
|
||||||
|
help_text=_("The code of the form xxx-xxx-xxx at the end of the BBB link."),
|
||||||
|
validators=[RegexValidator("[a-z]{3}-[a-z]{3}-[a-z]{3}")],
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def solutions(self):
|
def solutions(self):
|
||||||
return Solution.objects.filter(participation__in=self.participations, final_solution=self.tournament.final)
|
return Solution.objects.filter(participation__in=self.participations, final_solution=self.tournament.final)
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: TFJM\n"
|
"Project-Id-Version: TFJM\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-01-19 00:29+0100\n"
|
"POT-Creation-Date: 2021-01-21 17:46+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n"
|
"Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -120,26 +120,32 @@ msgstr "Je m'engage à participer à l'intégralité du TFJM²."
|
||||||
msgid "Message to address to the team:"
|
msgid "Message to address to the team:"
|
||||||
msgstr "Message à adresser à l'équipe :"
|
msgstr "Message à adresser à l'équipe :"
|
||||||
|
|
||||||
#: apps/participation/forms.py:123
|
#: apps/participation/forms.py:124
|
||||||
msgid "The uploaded file size must be under 5 Mo."
|
msgid "The uploaded file size must be under 5 Mo."
|
||||||
msgstr "Le fichier envoyé doit peser moins de 5 Mo."
|
msgstr "Le fichier envoyé doit peser moins de 5 Mo."
|
||||||
|
|
||||||
#: apps/participation/forms.py:125
|
#: apps/participation/forms.py:126 apps/participation/forms.py:189
|
||||||
msgid "The uploaded file must be a PDF file."
|
msgid "The uploaded file must be a PDF file."
|
||||||
msgstr "Le fichier envoyé doit être au format PDF."
|
msgstr "Le fichier envoyé doit être au format PDF."
|
||||||
|
|
||||||
#: apps/participation/forms.py:129
|
#: apps/participation/forms.py:130
|
||||||
msgid "The PDF file must not have more than 30 pages."
|
msgid "The PDF file must not have more than 30 pages."
|
||||||
msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages."
|
msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages."
|
||||||
|
|
||||||
#: apps/participation/forms.py:169
|
#: apps/participation/forms.py:170
|
||||||
msgid "The defender, the opponent and the reporter must be different."
|
msgid "The defender, the opponent and the reporter must be different."
|
||||||
msgstr "Le défenseur, l'opposant et le rapporteur doivent être différents."
|
msgstr "Le défenseur, l'opposant et le rapporteur doivent être différents."
|
||||||
|
|
||||||
#: apps/participation/forms.py:173
|
#: apps/participation/forms.py:174
|
||||||
msgid "This defender did not work on this problem."
|
msgid "This defender did not work on this problem."
|
||||||
msgstr "Ce défenseur ne travaille pas sur ce problème."
|
msgstr "Ce défenseur ne travaille pas sur ce problème."
|
||||||
|
|
||||||
|
#: apps/participation/forms.py:187 apps/registration/forms.py:116
|
||||||
|
#: apps/registration/forms.py:138 apps/registration/forms.py:160
|
||||||
|
#: apps/registration/forms.py:214
|
||||||
|
msgid "The uploaded file size must be under 2 Mo."
|
||||||
|
msgstr "Le fichier envoyé doit peser moins de 2 Mo."
|
||||||
|
|
||||||
#: apps/participation/models.py:30 apps/participation/models.py:121
|
#: apps/participation/models.py:30 apps/participation/models.py:121
|
||||||
#: apps/participation/tables.py:17 apps/participation/tables.py:34
|
#: apps/participation/tables.py:17 apps/participation/tables.py:34
|
||||||
msgid "name"
|
msgid "name"
|
||||||
|
@ -179,7 +185,7 @@ msgstr "début"
|
||||||
msgid "end"
|
msgid "end"
|
||||||
msgstr "fin"
|
msgstr "fin"
|
||||||
|
|
||||||
#: apps/participation/models.py:136 apps/participation/models.py:377
|
#: apps/participation/models.py:136 apps/participation/models.py:386
|
||||||
#: apps/participation/templates/participation/tournament_detail.html:18
|
#: apps/participation/templates/participation/tournament_detail.html:18
|
||||||
msgid "place"
|
msgid "place"
|
||||||
msgstr "lieu"
|
msgstr "lieu"
|
||||||
|
@ -257,8 +263,8 @@ msgstr "L'équipe est sélectionnée pour la finale."
|
||||||
msgid "Participation of the team {name} ({trigram})"
|
msgid "Participation of the team {name} ({trigram})"
|
||||||
msgstr "Participation de l'équipe {name} ({trigram})"
|
msgstr "Participation de l'équipe {name} ({trigram})"
|
||||||
|
|
||||||
#: apps/participation/models.py:315 apps/participation/models.py:499
|
#: apps/participation/models.py:315 apps/participation/models.py:508
|
||||||
#: apps/participation/models.py:537
|
#: apps/participation/models.py:546
|
||||||
msgid "participation"
|
msgid "participation"
|
||||||
msgstr "participation"
|
msgstr "participation"
|
||||||
|
|
||||||
|
@ -279,140 +285,148 @@ msgstr "Tour {round}"
|
||||||
msgid "juries"
|
msgid "juries"
|
||||||
msgstr "jurys"
|
msgstr "jurys"
|
||||||
|
|
||||||
#: apps/participation/models.py:358
|
#: apps/participation/models.py:352
|
||||||
|
msgid "BigBlueButton code"
|
||||||
|
msgstr "Code BigBlueButton"
|
||||||
|
|
||||||
|
#: apps/participation/models.py:353
|
||||||
|
msgid "The code of the form xxx-xxx-xxx at the end of the BBB link."
|
||||||
|
msgstr "Le code de la forme xxx-xxx-xxx à la fin du lien BBB."
|
||||||
|
|
||||||
|
#: apps/participation/models.py:367
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Pool {round} for tournament {tournament} with teams {teams}"
|
msgid "Pool {round} for tournament {tournament} with teams {teams}"
|
||||||
msgstr "Poule {round} du tournoi {tournament} avec les équipes {teams}"
|
msgstr "Poule {round} du tournoi {tournament} avec les équipes {teams}"
|
||||||
|
|
||||||
#: apps/participation/models.py:364 apps/participation/models.py:372
|
#: apps/participation/models.py:373 apps/participation/models.py:381
|
||||||
msgid "pool"
|
msgid "pool"
|
||||||
msgstr "poule"
|
msgstr "poule"
|
||||||
|
|
||||||
#: apps/participation/models.py:365
|
#: apps/participation/models.py:374
|
||||||
msgid "pools"
|
msgid "pools"
|
||||||
msgstr "poules"
|
msgstr "poules"
|
||||||
|
|
||||||
#: apps/participation/models.py:379
|
#: apps/participation/models.py:388
|
||||||
msgid "Where the solution is presented?"
|
msgid "Where the solution is presented?"
|
||||||
msgstr "Où est-ce que les solutions sont défendues ?"
|
msgstr "Où est-ce que les solutions sont défendues ?"
|
||||||
|
|
||||||
#: apps/participation/models.py:384
|
#: apps/participation/models.py:393
|
||||||
msgid "defended solution"
|
msgid "defended solution"
|
||||||
msgstr "solution défendue"
|
msgstr "solution défendue"
|
||||||
|
|
||||||
#: apps/participation/models.py:386 apps/participation/models.py:506
|
#: apps/participation/models.py:395 apps/participation/models.py:515
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Problem #{problem}"
|
msgid "Problem #{problem}"
|
||||||
msgstr "Problème n°{problem}"
|
msgstr "Problème n°{problem}"
|
||||||
|
|
||||||
#: apps/participation/models.py:393 apps/participation/tables.py:105
|
#: apps/participation/models.py:402 apps/participation/tables.py:105
|
||||||
msgid "defender"
|
msgid "defender"
|
||||||
msgstr "défenseur"
|
msgstr "défenseur"
|
||||||
|
|
||||||
#: apps/participation/models.py:400 apps/participation/models.py:549
|
#: apps/participation/models.py:409 apps/participation/models.py:558
|
||||||
msgid "opponent"
|
msgid "opponent"
|
||||||
msgstr "opposant"
|
msgstr "opposant"
|
||||||
|
|
||||||
#: apps/participation/models.py:407 apps/participation/models.py:550
|
#: apps/participation/models.py:416 apps/participation/models.py:559
|
||||||
msgid "reporter"
|
msgid "reporter"
|
||||||
msgstr "rapporteur"
|
msgstr "rapporteur"
|
||||||
|
|
||||||
#: apps/participation/models.py:467 apps/participation/models.py:470
|
#: apps/participation/models.py:476 apps/participation/models.py:479
|
||||||
#: apps/participation/models.py:473
|
#: apps/participation/models.py:482
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Team {trigram} is not registered in the pool."
|
msgid "Team {trigram} is not registered in the pool."
|
||||||
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
|
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
|
||||||
|
|
||||||
#: apps/participation/models.py:478
|
#: apps/participation/models.py:487
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Passage of {defender} for problem {problem}"
|
msgid "Passage of {defender} for problem {problem}"
|
||||||
msgstr "Passage de {defender} pour le problème {problem}"
|
msgstr "Passage de {defender} pour le problème {problem}"
|
||||||
|
|
||||||
#: apps/participation/models.py:482 apps/participation/models.py:544
|
#: apps/participation/models.py:491 apps/participation/models.py:553
|
||||||
#: apps/participation/models.py:582
|
#: apps/participation/models.py:591
|
||||||
msgid "passage"
|
msgid "passage"
|
||||||
msgstr "passage"
|
msgstr "passage"
|
||||||
|
|
||||||
#: apps/participation/models.py:483
|
#: apps/participation/models.py:492
|
||||||
msgid "passages"
|
msgid "passages"
|
||||||
msgstr "passages"
|
msgstr "passages"
|
||||||
|
|
||||||
#: apps/participation/models.py:504
|
#: apps/participation/models.py:513
|
||||||
msgid "problem"
|
msgid "problem"
|
||||||
msgstr "numéro de problème"
|
msgstr "numéro de problème"
|
||||||
|
|
||||||
#: apps/participation/models.py:511
|
#: apps/participation/models.py:520
|
||||||
msgid "solution for the final tournament"
|
msgid "solution for the final tournament"
|
||||||
msgstr "solution pour la finale"
|
msgstr "solution pour la finale"
|
||||||
|
|
||||||
#: apps/participation/models.py:516 apps/participation/models.py:555
|
#: apps/participation/models.py:525 apps/participation/models.py:564
|
||||||
msgid "file"
|
msgid "file"
|
||||||
msgstr "fichier"
|
msgstr "fichier"
|
||||||
|
|
||||||
#: apps/participation/models.py:524
|
#: apps/participation/models.py:533
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Solution of team {team} for problem {problem}"
|
msgid "Solution of team {team} for problem {problem}"
|
||||||
msgstr "Solution de l'équipe {team} pour le problème {problem}"
|
msgstr "Solution de l'équipe {team} pour le problème {problem}"
|
||||||
|
|
||||||
#: apps/participation/models.py:528
|
#: apps/participation/models.py:537
|
||||||
msgid "solution"
|
msgid "solution"
|
||||||
msgstr "solution"
|
msgstr "solution"
|
||||||
|
|
||||||
#: apps/participation/models.py:529
|
#: apps/participation/models.py:538
|
||||||
msgid "solutions"
|
msgid "solutions"
|
||||||
msgstr "solutions"
|
msgstr "solutions"
|
||||||
|
|
||||||
#: apps/participation/models.py:563
|
#: apps/participation/models.py:572
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Synthesis for the {type} of the {passage}"
|
msgid "Synthesis for the {type} of the {passage}"
|
||||||
msgstr "Synthèse pour {type} du {passage}"
|
msgstr "Synthèse pour {type} du {passage}"
|
||||||
|
|
||||||
#: apps/participation/models.py:566
|
#: apps/participation/models.py:575
|
||||||
msgid "synthesis"
|
msgid "synthesis"
|
||||||
msgstr "note de synthèse"
|
msgstr "note de synthèse"
|
||||||
|
|
||||||
#: apps/participation/models.py:567
|
#: apps/participation/models.py:576
|
||||||
msgid "syntheses"
|
msgid "syntheses"
|
||||||
msgstr "notes de synthèse"
|
msgstr "notes de synthèse"
|
||||||
|
|
||||||
#: apps/participation/models.py:575
|
#: apps/participation/models.py:584
|
||||||
msgid "jury"
|
msgid "jury"
|
||||||
msgstr "jury"
|
msgstr "jury"
|
||||||
|
|
||||||
#: apps/participation/models.py:587
|
#: apps/participation/models.py:596
|
||||||
msgid "defender writing note"
|
msgid "defender writing note"
|
||||||
msgstr "note d'écrit du défenseur"
|
msgstr "note d'écrit du défenseur"
|
||||||
|
|
||||||
#: apps/participation/models.py:593
|
#: apps/participation/models.py:602
|
||||||
msgid "defender oral note"
|
msgid "defender oral note"
|
||||||
msgstr "note d'oral du défenseur"
|
msgstr "note d'oral du défenseur"
|
||||||
|
|
||||||
#: apps/participation/models.py:599
|
#: apps/participation/models.py:608
|
||||||
msgid "opponent writing note"
|
msgid "opponent writing note"
|
||||||
msgstr "note d'écrit de l'opposant"
|
msgstr "note d'écrit de l'opposant"
|
||||||
|
|
||||||
#: apps/participation/models.py:605
|
#: apps/participation/models.py:614
|
||||||
msgid "opponent oral note"
|
msgid "opponent oral note"
|
||||||
msgstr "note d'oral de l'opposant"
|
msgstr "note d'oral de l'opposant"
|
||||||
|
|
||||||
#: apps/participation/models.py:611
|
#: apps/participation/models.py:620
|
||||||
msgid "reporter writing note"
|
msgid "reporter writing note"
|
||||||
msgstr "not d'écrit du rapporteur"
|
msgstr "not d'écrit du rapporteur"
|
||||||
|
|
||||||
#: apps/participation/models.py:617
|
#: apps/participation/models.py:626
|
||||||
msgid "reporter oral note"
|
msgid "reporter oral note"
|
||||||
msgstr "note d'oral du rapporteur"
|
msgstr "note d'oral du rapporteur"
|
||||||
|
|
||||||
#: apps/participation/models.py:626
|
#: apps/participation/models.py:635
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Notes of {jury} for {passage}"
|
msgid "Notes of {jury} for {passage}"
|
||||||
msgstr "Notes de {jury} pour le {passage}"
|
msgstr "Notes de {jury} pour le {passage}"
|
||||||
|
|
||||||
#: apps/participation/models.py:633
|
#: apps/participation/models.py:642
|
||||||
msgid "note"
|
msgid "note"
|
||||||
msgstr "note"
|
msgstr "note"
|
||||||
|
|
||||||
#: apps/participation/models.py:634
|
#: apps/participation/models.py:643
|
||||||
msgid "notes"
|
msgid "notes"
|
||||||
msgstr "notes"
|
msgstr "notes"
|
||||||
|
|
||||||
|
@ -1017,11 +1031,6 @@ msgstr "bénévole"
|
||||||
msgid "admin"
|
msgid "admin"
|
||||||
msgstr "admin"
|
msgstr "admin"
|
||||||
|
|
||||||
#: apps/registration/forms.py:116 apps/registration/forms.py:138
|
|
||||||
#: apps/registration/forms.py:160 apps/registration/forms.py:214
|
|
||||||
msgid "The uploaded file size must be under 2 Mo."
|
|
||||||
msgstr "Le fichier envoyé doit peser moins de 2 Mo."
|
|
||||||
|
|
||||||
#: apps/registration/forms.py:118 apps/registration/forms.py:140
|
#: apps/registration/forms.py:118 apps/registration/forms.py:140
|
||||||
#: apps/registration/forms.py:162 apps/registration/forms.py:216
|
#: apps/registration/forms.py:162 apps/registration/forms.py:216
|
||||||
msgid "The uploaded file must be a PDF, PNG of JPEG file."
|
msgid "The uploaded file must be a PDF, PNG of JPEG file."
|
||||||
|
|
Loading…
Reference in New Issue