Refactor group detail and musikgame detail templates for improved owner visibility and styling; update CSS for music count display

This commit is contained in:
Edgar P. Burkhart 2025-06-14 00:11:39 +02:00
parent 43ba52f31e
commit 78e5be580b
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
5 changed files with 64 additions and 49 deletions

View file

@ -25,9 +25,15 @@ a.group {
}
.group-owner, .group i {
margin-left: .5rem;
margin-left: .5em;
}
.group-owner {
color: var(--pico-color-zinc-500);
}
.music-count {
font-weight: 900;
color: var(--pico-color-zinc-500);
margin-left: .5em;
}

View file

@ -2,7 +2,12 @@
{% load form %}
{% block content %}
<h1>
<i class="ri-group-2-fill"></i> {{ group.name }}
{% if group.owner == user %}
<i class="ri-vip-crown-fill owner"></i>
{% else %}
<i class="ri-group-2-fill"></i>
{% endif %}
{{ group.name }}
</h1>
{% if group.owner == user %}
<p>
@ -21,9 +26,11 @@
<thead>
<th>Date</th>
<th>Joueurs</th>
<th>
<i class="ri-delete-bin-fill"></i>
</th>
{% if group.owner == user %}
<th>
<i class="ri-delete-bin-fill"></i>
</th>
{% endif %}
</thead>
<tbody>
{% for game in group.musikgame_set.all %}
@ -32,9 +39,11 @@
<a href="{% url "game_detail" pk=game.pk %}">{{ game.date }}</a>
</td>
<td>{{ game.players.all|join:", " }}</td>
<td>
<a href="{% url "group_remove_game" pk=game.pk %}"><i class="ri-close-fill" alt="Supprimer"></i></a>
</td>
{% if group.owner == user %}
<td>
<a href="{% url "group_remove_game" pk=game.pk %}"><i class="ri-close-fill" alt="Supprimer"></i></a>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
@ -43,11 +52,6 @@
<h2>
<i class="ri-group-2-fill"></i> Membres
</h2>
{% if group.owner == user %}
<p>
<a href="{% url "group_edit_members" pk=group.pk %}" role="button"><i class="ri-user-add-fill"></i> Modifier les membres</a>
</p>
{% endif %}
<table>
<thead>
<tr>
@ -58,9 +62,11 @@
<th>
<i class="ri-mv-line"></i>
</th>
<th>
<i class="ri-delete-bin-fill"></i>
</th>
{% if group.owner == user %}
<th>
<i class="ri-delete-bin-fill"></i>
</th>
{% endif %}
</tr>
</thead>
<tbody>
@ -70,35 +76,39 @@
<i class="ri-vip-crown-fill owner"></i>
</td>
<td>{{ owner_count }}</td>
<td></td>
{% if group.owner == user %}<td></td>{% endif %}
</tr>
{% for member in members.all %}
<tr>
<td>{{ member }}</td>
<td></td>
<td>{{ member.count }}</td>
<td>
<a href="{% url "group_remove_member" pk=group.pk user_pk=member.pk %}">
<i class="ri-close-fill" alt="Supprimer"></i>
</a>
</td>
{% if group.owner == user %}
<td>
<a href="{% url "group_remove_member" pk=group.pk user_pk=member.pk %}">
<i class="ri-close-fill" alt="Supprimer"></i>
</a>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
<form method="post" action="{% url "group_add_member" pk=group.pk %}">
{% csrf_token %}
<fieldset role="group">
<input type="string"
name="username"
id="username"
placeholder="Membre"
required>
<button type="submit">Ajouter</button>
</fieldset>
</form>
{% if group.owner == user %}
<form method="post" action="{% url "group_add_member" pk=group.pk %}">
{% csrf_token %}
<fieldset role="group">
<input type="string"
name="username"
id="username"
placeholder="Membre"
required>
<button type="submit">Ajouter</button>
</fieldset>
</form>
{% endif %}
<h2>
<i class="ri-music-2-fill"></i> Mes musiques ({{ musics.count }})
<i class="ri-music-2-fill"></i> Mes musiques <span class="music-count">{{ musics.count }}</span>
</h2>
<details>
<summary role="button">

View file

@ -13,9 +13,7 @@
<h2>
<i class="ri-group-2-fill"></i> Joueurs
</h2>
<ul>
{% for member in musikgame.players.all %}<li>{{ member }}</li>{% endfor %}
</ul>
<p>{{ musikgame.players.all|join:", " }}</p>
<h2>
<i class="ri-music-2-fill"></i> Musiques
</h2>

View file

@ -10,11 +10,6 @@ urlpatterns = [
path(
"group/<int:pk>/delete/", views.GroupDeleteView.as_view(), name="group_delete"
),
path(
"group/<int:pk>/edit_members/",
views.GroupAddMembersView.as_view(),
name="group_edit_members",
),
path("group/<int:pk>/", views.GroupDetailView.as_view(), name="group_detail"),
path(
"group/<int:pk>/add_music/",

View file

@ -70,11 +70,6 @@ class GroupDetailView(MemberFilterMixin, GroupMixin, DetailView):
return data
class GroupAddMembersView(OwnerFilterMixin, GroupMixin, UpdateView):
fields = None
form_class = forms.GroupAddMembersForm
class GroupAddMusicView(MemberFilterMixin, SingleObjectMixin, View):
model = models.Group
@ -118,8 +113,12 @@ class GroupRemoveMusicView(OwnerFilterMixin, SingleObjectMixin, View):
class GroupRemoveMemberView(View):
def get(self, request, pk, user_pk):
relation = get_object_or_404(
models.Group.members.through, group_id=pk, user_id=user_pk
models.Group.members.through,
group_id=pk,
user_id=user_pk,
group__owner=request.user,
)
group = relation.group
relation.delete()
return redirect(group)
@ -220,7 +219,14 @@ class GameDetailView(LoginRequiredMixin, DetailView):
model = models.MusikGame
def get_queryset(self):
return super().get_queryset().filter(group__owner=self.request.user)
return (
super()
.get_queryset()
.filter(
Q(group__members=self.request.user) | Q(group__owner=self.request.user)
)
.distinct()
)
class YoutubeLoginView(LoginRequiredMixin, View):