diff --git a/base/static/css/main.css b/base/static/css/main.css
index 90e5032..219394c 100644
--- a/base/static/css/main.css
+++ b/base/static/css/main.css
@@ -117,6 +117,9 @@ h6,
i.i {
margin-right: .5em;
}
+i.hl {
+ color: var(--pico-primary);
+}
footer {
text-align: center;
diff --git a/game/migrations/0019_alter_musikgame_options_musikgame_over.py b/game/migrations/0019_alter_musikgame_options_musikgame_over.py
new file mode 100644
index 0000000..f5e4489
--- /dev/null
+++ b/game/migrations/0019_alter_musikgame_options_musikgame_over.py
@@ -0,0 +1,21 @@
+# Generated by Django 5.2.3 on 2025-06-15 10:44
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("game", "0018_musicgameanswer"),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name="musikgame",
+ options={"ordering": ["-over", "-date"]},
+ ),
+ migrations.AddField(
+ model_name="musikgame",
+ name="over",
+ field=models.BooleanField(default=False),
+ ),
+ ]
diff --git a/game/migrations/0020_alter_musikgame_options.py b/game/migrations/0020_alter_musikgame_options.py
new file mode 100644
index 0000000..cd933d9
--- /dev/null
+++ b/game/migrations/0020_alter_musikgame_options.py
@@ -0,0 +1,16 @@
+# Generated by Django 5.2.3 on 2025-06-15 10:59
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("game", "0019_alter_musikgame_options_musikgame_over"),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name="musikgame",
+ options={"ordering": ["over", "-date"]},
+ ),
+ ]
diff --git a/game/models.py b/game/models.py
index 6f4e672..a4e1f91 100644
--- a/game/models.py
+++ b/game/models.py
@@ -74,10 +74,14 @@ class MusikGame(models.Model):
players = models.ManyToManyField(User, verbose_name="Joueurs")
playlist = models.CharField(blank=True, verbose_name="Playlist YouTube")
playlist_loading = models.BooleanField(default=False)
+ over = models.BooleanField(default=False)
def get_absolute_url(self):
return reverse("game_detail", kwargs={"pk": self.pk})
+ class Meta:
+ ordering = ["over", "-date"]
+
@receiver(post_save, sender=MusikGame)
def generateYoutubePlaylist(sender, instance, created, **kwargs):
diff --git a/game/templates/game/group_detail.html b/game/templates/game/group_detail.html
index d523f29..3812b6e 100644
--- a/game/templates/game/group_detail.html
+++ b/game/templates/game/group_detail.html
@@ -10,52 +10,7 @@
{{ group.name }}
{% include "game/include/group_buttons.html" %}
- {% if group.musikgame_set.exists %}
-
- Parties
-
-
- {% endif %}
+ {% include "game/include/group_games.html" %}
{% include "game/include/group_members.html" %}
Mes musiques {{ musics.count }}
diff --git a/game/templates/game/include/group_games.html b/game/templates/game/include/group_games.html
new file mode 100644
index 0000000..09ad49a
--- /dev/null
+++ b/game/templates/game/include/group_games.html
@@ -0,0 +1,57 @@
+{% load form youtube %}
+{% if group.musikgame_set.exists %}
+
+ Parties
+
+
+{% endif %}
diff --git a/game/templates/game/musikgame_detail.html b/game/templates/game/musikgame_detail.html
index 77f424c..0d84cda 100644
--- a/game/templates/game/musikgame_detail.html
+++ b/game/templates/game/musikgame_detail.html
@@ -2,18 +2,33 @@
{% load youtube %}
{% block content %}
- {{ musikgame.date }}
+ {% if musikgame.over %}
+
+ {% else %}
+
+ {% endif %}
+ {{ musikgame.date }}
{% if musikgame.playlist or musikgame.playlist_loading %}
-
- Playlist
- Répondre
-
+
{% endif %}
Joueurs
@@ -34,38 +49,40 @@
{% endfor %}
-
- Résultats
-
-
-
- Résultats
-
-
-
-
-
-
- |
-
- Musique
- |
-
- Joueur
- |
-
-
-
- {% for music in musikgame.musicgameorder_set.all %}
+ {% if musikgame.over %}
+
+ Résultats
+
+
+
+ Résultats
+
+
-
+
+
+ {% for music in musikgame.musicgameorder_set.all %}
+
+ {{ music.order }} |
+
+ {{ music.music_video.title }}
+ |
+ {{ music.player }} |
+
+ {% endfor %}
+
+
+
+ {% endif %}
{% endblock content %}
diff --git a/game/urls.py b/game/urls.py
index 15b8d3e..927dc79 100644
--- a/game/urls.py
+++ b/game/urls.py
@@ -68,4 +68,5 @@ urlpatterns = [
views.GameAnswerView.as_view(),
name="game_answer",
),
+ path("group/game//end/", views.GameEndView.as_view(), name="game_end"),
]
diff --git a/game/views.py b/game/views.py
index 3ebb49b..1e1cae0 100644
--- a/game/views.py
+++ b/game/views.py
@@ -344,6 +344,12 @@ class GameDetailView(LoginRequiredMixin, DetailView):
.distinct()
)
+ def get_context_data(self, **kwargs):
+ data = super().get_context_data(**kwargs)
+ data["is_leader"] = data["musikgame"].group.is_leader(self.request.user)
+ data["is_owner"] = data["musikgame"].group.is_owner(self.request.user)
+ return data
+
class YoutubeCallbackView(LoginRequiredMixin, View):
def get(self, request):
@@ -428,7 +434,7 @@ class GameAnswerView(LoginRequiredMixin, DetailView):
template_name = "game/musikgame_answer.html"
def get_queryset(self):
- return super().get_queryset().filter(players=self.request.user)
+ return super().get_queryset().filter(over=False, players=self.request.user)
def get_context_data(self, **kwargs):
return super().get_context_data(**kwargs) | {
@@ -452,3 +458,15 @@ class GameAnswerView(LoginRequiredMixin, DetailView):
defaults={"answer": None},
)
return redirect("game_answer", pk)
+
+
+class GameEndView(LoginRequiredMixin, SingleObjectMixin, View):
+ model = models.MusikGame
+
+ def post(self, request, pk):
+ game = self.get_object()
+ if not game.group.is_leader(request.user):
+ raise PermissionDenied()
+ game.over = True
+ game.save()
+ return redirect("game_detail", pk)