diff --git a/apps/participation/templates/participation/team_list.html b/apps/participation/templates/participation/team_list.html
new file mode 100644
index 0000000..71d0b98
--- /dev/null
+++ b/apps/participation/templates/participation/team_list.html
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+
+{% load django_tables2 i18n %}
+
+{% block contenttitle %}
+
{% trans "All teams" %}
+{% endblock %}
+
+{% block content %}
+
+ {% render_table table %}
+
+{% endblock %}
diff --git a/apps/participation/tests.py b/apps/participation/tests.py
index ee4fd75..b1b7bd2 100644
--- a/apps/participation/tests.py
+++ b/apps/participation/tests.py
@@ -185,6 +185,13 @@ class TestStudentParticipation(TestCase):
))
self.assertEqual(response.status_code, 403)
+ def test_team_list(self):
+ """
+ Test to display the list of teams.
+ """
+ response = self.client.get(reverse("participation:team_list"))
+ self.assertTrue(response.status_code, 200)
+
def test_no_myteam_redirect_noteam(self):
"""
Test redirection.
diff --git a/apps/participation/urls.py b/apps/participation/urls.py
index b3233dc..f36d8a5 100644
--- a/apps/participation/urls.py
+++ b/apps/participation/urls.py
@@ -4,7 +4,7 @@ from django.views.generic import TemplateView
from .views import CalendarView, CreateQuestionView, CreateTeamView, DeleteQuestionView, JoinTeamView, \
MyParticipationDetailView, MyTeamDetailView, ParticipationDetailView, PhaseUpdateView, \
SetParticipationReceiveParticipationView, SetParticipationSendParticipationView, TeamAuthorizationsView, \
- TeamDetailView, TeamLeaveView, TeamUpdateView, UpdateQuestionView, UploadVideoView
+ TeamDetailView, TeamLeaveView, TeamListView, TeamUpdateView, UpdateQuestionView, UploadVideoView
app_name = "participation"
@@ -12,6 +12,7 @@ app_name = "participation"
urlpatterns = [
path("create_team/", CreateTeamView.as_view(), name="create_team"),
path("join_team/", JoinTeamView.as_view(), name="join_team"),
+ path("teams/", TeamListView.as_view(), name="team_list"),
path("team/", MyTeamDetailView.as_view(), name="my_team_detail"),
path("team//", TeamDetailView.as_view(), name="team_detail"),
path("team//update/", TeamUpdateView.as_view(), name="update_team"),
diff --git a/apps/participation/views.py b/apps/participation/views.py
index f83a37b..5534278 100644
--- a/apps/participation/views.py
+++ b/apps/participation/views.py
@@ -23,7 +23,7 @@ from .forms import JoinTeamForm, ParticipationForm, PhaseForm, QuestionForm, \
ReceiveParticipationForm, RequestValidationForm, SendParticipationForm, TeamForm, \
UploadVideoForm, ValidateParticipationForm
from .models import Participation, Phase, Question, Team, Video
-from .tables import CalendarTable
+from .tables import CalendarTable, TeamTable
class CreateTeamView(LoginRequiredMixin, CreateView):
@@ -119,6 +119,15 @@ class JoinTeamView(LoginRequiredMixin, FormView):
return reverse_lazy("participation:team_detail", args=(self.object.pk,))
+class TeamListView(AdminMixin, SingleTableView):
+ """
+ Display the whole list of teams
+ """
+ model = Team
+ table_class = TeamTable
+ ordering = ('participation__problem', 'trigram',)
+
+
class MyTeamDetailView(LoginRequiredMixin, RedirectView):
"""
Redirect to the detail of the team in which the user is.
diff --git a/corres2math/templates/base.html b/corres2math/templates/base.html
index b5ece84..9a6611e 100644
--- a/corres2math/templates/base.html
+++ b/corres2math/templates/base.html
@@ -70,7 +70,11 @@
{% trans "Calendar" %}
{% endif %}
- {% if user.is_authenticated and user.registration.participates %}
+ {% if user.is_authenticated and user.registration.is_admin %}
+
+ {% trans "Teams" %}
+
+ {% elif user.is_authenticated and user.registration.participates %}
{% if not user.registration.team %}
@@ -218,21 +222,28 @@
{% trans "Calendar" as modal_title %}
{% include "base_modal.html" with modal_id="calendar" modal_additional_class="modal-lg" %}
-{% trans "Search results" as modal_title %}
-{% include "base_modal.html" with modal_id="search" modal_form_method="get" modal_additional_class="modal-lg" %}
-{% trans "Log in" as modal_title %}
-{% trans "Log in" as modal_button %}
-{% url "login" as modal_action %}
-{% include "base_modal.html" with modal_id="login" %}
+
{% if user.is_authenticated %}
+ {% trans "All teams" as modal_title %}
+ {% include "base_modal.html" with modal_id="teams" modal_additional_class="modal-lg" %}
+
+ {% trans "Search results" as modal_title %}
+ {% include "base_modal.html" with modal_id="search" modal_form_method="get" modal_additional_class="modal-lg" %}
+
{% trans "Join team" as modal_title %}
{% trans "Join" as modal_button %}
{% url "participation:join_team" as modal_action %}
+
{% include "base_modal.html" with modal_id="joinTeam" %}
{% trans "Create team" as modal_title %}
{% trans "Create" as modal_button %}
{% url "participation:create_team" as modal_action %}
{% include "base_modal.html" with modal_id="createTeam" modal_button_type="success" %}
+{% else %}
+ {% trans "Log in" as modal_title %}
+ {% trans "Log in" as modal_button %}
+ {% url "login" as modal_action %}
+ {% include "base_modal.html" with modal_id="login" %}
{% endif %}
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index 3dc6ebf..984e3a1 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Corres2math\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-15 01:49+0100\n"
+"POT-Creation-Date: 2020-11-16 11:55+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Yohann D'ANELLO \n"
"Language-Team: LANGUAGE \n"
@@ -99,13 +99,13 @@ msgstr "changelogs"
msgid "Changelog of type \"{action}\" for model {model} at {timestamp}"
msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
-#: apps/participation/admin.py:16 apps/participation/models.py:132
+#: apps/participation/admin.py:16 apps/participation/models.py:121
#: apps/participation/tables.py:35 apps/participation/tables.py:62
msgid "problem number"
msgstr "numéro de problème"
-#: apps/participation/admin.py:21 apps/participation/models.py:138
-#: apps/participation/models.py:192
+#: apps/participation/admin.py:21 apps/participation/models.py:127
+#: apps/participation/models.py:181
msgid "valid"
msgstr "valide"
@@ -184,96 +184,96 @@ msgstr ""
"Donner l'autorisation de publier la vidéo sur le site principal pour "
"promouvoir les Correspondances."
-#: apps/participation/models.py:107
+#: apps/participation/models.py:96
#, python-brace-format
msgid "Team {name} ({trigram})"
msgstr "Équipe {name} ({trigram})"
-#: apps/participation/models.py:110 apps/participation/models.py:125
+#: apps/participation/models.py:99 apps/participation/models.py:114
#: apps/registration/models.py:106 apps/registration/models.py:155
msgid "team"
msgstr "équipe"
-#: apps/participation/models.py:111
+#: apps/participation/models.py:100
msgid "teams"
msgstr "équipes"
-#: apps/participation/models.py:129
+#: apps/participation/models.py:118
#, python-brace-format
msgid "Problem #{problem:d}"
msgstr "Problème n°{problem:d}"
-#: apps/participation/models.py:139 apps/participation/models.py:193
+#: apps/participation/models.py:128 apps/participation/models.py:182
msgid "The video got the validation of the administrators."
msgstr "La vidéo a été validée par les administrateurs."
-#: apps/participation/models.py:148
+#: apps/participation/models.py:137
msgid "solution video"
msgstr "vidéo de solution"
-#: apps/participation/models.py:157
+#: apps/participation/models.py:146
msgid "received participation"
msgstr "participation reçue"
-#: apps/participation/models.py:166
+#: apps/participation/models.py:155
msgid "synthesis video"
msgstr "vidéo de synthèse"
-#: apps/participation/models.py:173
+#: apps/participation/models.py:162
#, python-brace-format
msgid "Participation of the team {name} ({trigram})"
msgstr "Participation de l'équipe {name} ({trigram})"
-#: apps/participation/models.py:176 apps/participation/models.py:250
+#: apps/participation/models.py:165 apps/participation/models.py:239
msgid "participation"
msgstr "participation"
-#: apps/participation/models.py:177
+#: apps/participation/models.py:166
msgid "participations"
msgstr "participations"
-#: apps/participation/models.py:185
+#: apps/participation/models.py:174
msgid "link"
msgstr "lien"
-#: apps/participation/models.py:186
+#: apps/participation/models.py:175
msgid "The full video link."
msgstr "Le lien complet de la vidéo."
-#: apps/participation/models.py:235
+#: apps/participation/models.py:224
#, python-brace-format
msgid "Video of team {name} ({trigram})"
msgstr "Vidéo de l'équipe {name} ({trigram})"
-#: apps/participation/models.py:239
+#: apps/participation/models.py:228
msgid "video"
msgstr "vidéo"
-#: apps/participation/models.py:240
+#: apps/participation/models.py:229
msgid "videos"
msgstr "vidéos"
-#: apps/participation/models.py:255
+#: apps/participation/models.py:244
msgid "question"
msgstr "question"
-#: apps/participation/models.py:269
+#: apps/participation/models.py:258
msgid "phase number"
msgstr "phase"
-#: apps/participation/models.py:274
+#: apps/participation/models.py:263
msgid "phase description"
msgstr "description"
-#: apps/participation/models.py:278
+#: apps/participation/models.py:267
msgid "start date of the given phase"
msgstr "début de la phase"
-#: apps/participation/models.py:283
+#: apps/participation/models.py:272
msgid "end date of the given phase"
msgstr "fin de la phase"
-#: apps/participation/models.py:299
+#: apps/participation/models.py:290
msgid ""
"Phase {phase_number:d} starts on {start:%Y-%m-%d %H:%M} and ends on {end:%Y-"
"%m-%d %H:%M}"
@@ -281,21 +281,21 @@ msgstr ""
"Phase {phase_number:d} démarrant le {start:%d/%m/%Y %H:%M} et finissant le "
"{end:%d/%m/%Y %H:%M}"
-#: apps/participation/models.py:303
+#: apps/participation/models.py:294
msgid "phase"
msgstr "phase"
-#: apps/participation/models.py:304
+#: apps/participation/models.py:295
msgid "phases"
msgstr "phases"
#: apps/participation/templates/participation/create_team.html:11
-#: corres2math/templates/base.html:233
+#: corres2math/templates/base.html:237
msgid "Create"
msgstr "Créer"
#: apps/participation/templates/participation/join_team.html:11
-#: corres2math/templates/base.html:229
+#: corres2math/templates/base.html:232
msgid "Join"
msgstr "Rejoindre"
@@ -469,7 +469,7 @@ msgstr "Définir l'équipe qui recevra votre vidéo"
#: apps/participation/templates/participation/participation_detail.html:181
#: apps/participation/templates/participation/participation_detail.html:233
-#: apps/participation/views.py:490
+#: apps/participation/views.py:494
msgid "Upload video"
msgstr "Envoyer la vidéo"
@@ -504,7 +504,7 @@ msgid "Update question"
msgstr "Modifier la question"
#: apps/participation/templates/participation/participation_detail.html:217
-#: apps/participation/views.py:466
+#: apps/participation/views.py:470
msgid "Delete question"
msgstr "Supprimer la question"
@@ -514,8 +514,8 @@ msgid "Display synthesis"
msgstr "Afficher la synthèse"
#: apps/participation/templates/participation/phase_list.html:10
-#: apps/participation/views.py:509 corres2math/templates/base.html:68
-#: corres2math/templates/base.html:70 corres2math/templates/base.html:219
+#: apps/participation/views.py:513 corres2math/templates/base.html:68
+#: corres2math/templates/base.html:70 corres2math/templates/base.html:221
msgid "Calendar"
msgstr "Calendrier"
@@ -627,7 +627,7 @@ msgid "Update team"
msgstr "Modifier l'équipe"
#: apps/participation/templates/participation/team_detail.html:127
-#: apps/participation/views.py:319
+#: apps/participation/views.py:323
msgid "Leave team"
msgstr "Quitter l'équipe"
@@ -635,8 +635,13 @@ msgstr "Quitter l'équipe"
msgid "Are you sure that you want to leave this team?"
msgstr "Êtes-vous sûr·e de vouloir quitter cette équipe ?"
-#: apps/participation/views.py:36 corres2math/templates/base.html:77
-#: corres2math/templates/base.html:232
+#: apps/participation/templates/participation/team_list.html:6
+#: corres2math/templates/base.html:225
+msgid "All teams"
+msgstr "Toutes les équipes"
+
+#: apps/participation/views.py:36 corres2math/templates/base.html:81
+#: corres2math/templates/base.html:236
msgid "Create team"
msgstr "Créer une équipe"
@@ -648,36 +653,36 @@ msgstr "Vous ne participez pas, vous ne pouvez pas créer d'équipe."
msgid "You are already in a team."
msgstr "Vous êtes déjà dans une équipe."
-#: apps/participation/views.py:82 corres2math/templates/base.html:82
-#: corres2math/templates/base.html:228
+#: apps/participation/views.py:82 corres2math/templates/base.html:86
+#: corres2math/templates/base.html:231
msgid "Join team"
msgstr "Rejoindre une équipe"
-#: apps/participation/views.py:133 apps/participation/views.py:325
-#: apps/participation/views.py:358
+#: apps/participation/views.py:142 apps/participation/views.py:329
+#: apps/participation/views.py:362
msgid "You are not in a team."
msgstr "Vous n'êtes pas dans une équipe."
-#: apps/participation/views.py:134 apps/participation/views.py:359
+#: apps/participation/views.py:143 apps/participation/views.py:363
msgid "You don't participate, so you don't have any team."
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
-#: apps/participation/views.py:156
+#: apps/participation/views.py:165
#, python-brace-format
msgid "Detail of team {trigram}"
msgstr "Détails de l'équipe {trigram}"
-#: apps/participation/views.py:188
+#: apps/participation/views.py:197
msgid "You don't participate, so you can't request the validation of the team."
msgstr ""
"Vous ne participez pas, vous ne pouvez pas demander la validation de "
"l'équipe."
-#: apps/participation/views.py:191
+#: apps/participation/views.py:200
msgid "The validation of the team is already done or pending."
msgstr "La validation de l'équipe est déjà faite ou en cours."
-#: apps/participation/views.py:194
+#: apps/participation/views.py:203
msgid ""
"The team can't be validated: missing email address confirmations, photo "
"authorizations, people or the chosen problem is not set."
@@ -686,51 +691,51 @@ msgstr ""
"d'adresse e-mail, soit une autorisation parentale, soit des personnes soit "
"le problème n'a pas été choisi."
-#: apps/participation/views.py:213
+#: apps/participation/views.py:222
msgid "You are not an administrator."
msgstr "Vous n'êtes pas administrateur."
-#: apps/participation/views.py:216
+#: apps/participation/views.py:225
msgid "This team has no pending validation."
msgstr "L'équipe n'a pas de validation en attente."
-#: apps/participation/views.py:240
+#: apps/participation/views.py:244
msgid "You must specify if you validate the registration or not."
msgstr "Vous devez spécifier si vous validez l'inscription ou non."
-#: apps/participation/views.py:268
+#: apps/participation/views.py:272
#, python-brace-format
msgid "Update team {trigram}"
msgstr "Mise à jour de l'équipe {trigram}"
-#: apps/participation/views.py:305 apps/registration/views.py:253
+#: apps/participation/views.py:309 apps/registration/views.py:243
#, python-brace-format
msgid "Photo authorization of {student}.{ext}"
msgstr "Autorisation de droit à l'image de {student}.{ext}"
-#: apps/participation/views.py:309
+#: apps/participation/views.py:313
#, python-brace-format
msgid "Photo authorizations of team {trigram}.zip"
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
-#: apps/participation/views.py:327
+#: apps/participation/views.py:331
msgid "The team is already validated or the validation is pending."
msgstr "La validation de l'équipe est déjà faite ou en cours."
-#: apps/participation/views.py:371
+#: apps/participation/views.py:375
msgid "The team is not validated yet."
msgstr "L'équipe n'est pas encore validée."
-#: apps/participation/views.py:381
+#: apps/participation/views.py:385
#, python-brace-format
msgid "Participation of team {trigram}"
msgstr "Participation de l'équipe {trigram}"
-#: apps/participation/views.py:418
+#: apps/participation/views.py:422
msgid "Create question"
msgstr "Créer une question"
-#: apps/participation/views.py:518
+#: apps/participation/views.py:522
msgid "Calendar update"
msgstr "Mise à jour du calendrier"
@@ -923,8 +928,8 @@ msgid "Your password has been set. You may go ahead and log in now."
msgstr "Votre mot de passe a été changé. Vous pouvez désormais vous connecter."
#: apps/registration/templates/registration/password_reset_complete.html:10
-#: corres2math/templates/base.html:132 corres2math/templates/base.html:223
-#: corres2math/templates/base.html:224
+#: corres2math/templates/base.html:134 corres2math/templates/base.html:241
+#: corres2math/templates/base.html:242
#: corres2math/templates/registration/login.html:7
#: corres2math/templates/registration/login.html:8
#: corres2math/templates/registration/login.html:25
@@ -1161,43 +1166,47 @@ msgstr ""
msgid "Home"
msgstr "Accueil"
-#: corres2math/templates/base.html:88
+#: corres2math/templates/base.html:75
+msgid "Teams"
+msgstr "Équipes"
+
+#: corres2math/templates/base.html:92
msgid "My team"
msgstr "Mon équipe"
-#: corres2math/templates/base.html:93
+#: corres2math/templates/base.html:97
msgid "My participation"
msgstr "Ma participation"
-#: corres2math/templates/base.html:100
+#: corres2math/templates/base.html:104
msgid "Chat"
msgstr "Chat"
-#: corres2math/templates/base.html:104
+#: corres2math/templates/base.html:108
msgid "Administration"
msgstr "Administration"
-#: corres2math/templates/base.html:112
+#: corres2math/templates/base.html:116
msgid "Search..."
msgstr "Chercher ..."
-#: corres2math/templates/base.html:121
+#: corres2math/templates/base.html:125
msgid "Return to admin view"
msgstr "Retourner à l'interface administrateur"
-#: corres2math/templates/base.html:127
+#: corres2math/templates/base.html:130
msgid "Register"
msgstr "S'inscrire"
-#: corres2math/templates/base.html:144
+#: corres2math/templates/base.html:146
msgid "My account"
msgstr "Mon compte"
-#: corres2math/templates/base.html:147
+#: corres2math/templates/base.html:149
msgid "Log out"
msgstr "Déconnexion"
-#: corres2math/templates/base.html:164
+#: corres2math/templates/base.html:166
#, python-format
msgid ""
"Your email address is not validated. Please click on the link you received "
@@ -1208,11 +1217,11 @@ msgstr ""
"avez reçu par mail. Vous pouvez renvoyer un mail en cliquant sur ce lien."
-#: corres2math/templates/base.html:188
+#: corres2math/templates/base.html:190
msgid "Contact us"
msgstr "Nous contacter"
-#: corres2math/templates/base.html:221
+#: corres2math/templates/base.html:228
msgid "Search results"
msgstr "Résultats de la recherche"