Add group leader functionality and update group member management

- Create GroupLeader model and migration
- Alter GroupLeader member field to include related_name
- Implement is_leader and is_owner methods in Group model
- Update GroupDetailView to pass leader and owner status to template
- Refactor group buttons and members display into separate templates
- Add view and URL for setting group leaders
- Update permissions for adding/removing members and clearing blacklist
- Bump version to 0.1.1 in uv.lock
This commit is contained in:
Edgar P. Burkhart 2025-06-14 21:58:33 +02:00
parent 6cd9c0c841
commit 7409b4cd8f
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
10 changed files with 244 additions and 101 deletions

View file

@ -9,30 +9,7 @@
{% endif %}
{{ group.name }}
</h1>
{% if group.owner == user %}
<p>
<form method="post">
{% csrf_token %}
<p>
<a href="{% url "start_game" pk=group.pk %}" role="button"><i class="ri-play-fill"></i> Jouer</a>
</p>
<div role="group">
<a href="{% url "group_update" pk=group.pk %}"
class="secondary"
role="button"><i class="ri-edit-line"></i> Renommer</a>
<button type="submit"
class="secondary"
formaction="{% url "group_clear_blacklist" pk=group.pk %}">
<i class="ri-history-fill"></i> Effacer la blacklist
</button>
<a href="{% url "group_delete" group.pk %}"
role="button"
class="secondary">
<i class="ri-delete-bin-fill"></i> Supprimer</a>
</div>
</form>
</p>
{% endif %}
{% include "game/include/group_buttons.html" %}
{% if group.musikgame_set.exists %}
<h2>
<i class="ri-play-circle-fill"></i> Parties
@ -79,68 +56,7 @@
{% endif %}
</form>
{% endif %}
<h2>
<i class="ri-group-2-fill"></i> Membres
</h2>
<form method="post">
{% csrf_token %}
<table>
<thead>
<tr>
{% if group.owner == user %}<th></th>{% endif %}
<th>Membre</th>
<th>
<i class="ri-vip-crown-fill"></i>
</th>
<th>
<i class="ri-mv-line"></i>
</th>
</tr>
</thead>
<tbody>
<tr>
{% if group.owner == user %}<td></td>{% endif %}
<td>{{ group.owner }}</td>
<td>
<i class="ri-vip-crown-fill owner"></i>
</td>
<td>{{ owner_count }}</td>
</tr>
{% for member in members.all %}
<tr>
{% if group.owner == user %}
<td>
<input type="checkbox" name="member" value="{{ member.pk }}">
</td>
{% endif %}
<td>{{ member }}</td>
<td></td>
<td>{{ member.count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if group.owner == user %}
<button type="submit"
class="secondary"
formaction="{% url "group_remove_member" pk=group.pk %}">
<i class="ri-delete-bin-fill"></i> Supprimer les membres sélectionnés
</button>
{% endif %}
</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 %}
{% include "game/include/group_members.html" %}
<h2>
<i class="ri-music-2-fill"></i> Mes musiques <span class="music-count">{{ musics.count }}</span>
</h2>

View file

@ -0,0 +1,28 @@
{% if is_leader %}
<p>
<form method="post">
{% csrf_token %}
<p>
<a href="{% url "start_game" pk=group.pk %}" role="button"><i class="ri-play-fill"></i> Jouer</a>
</p>
<div role="group">
{% if is_owner %}
<a href="{% url "group_update" pk=group.pk %}"
class="secondary"
role="button"><i class="ri-edit-line"></i> Renommer</a>
{% endif %}
<button type="submit"
class="secondary"
formaction="{% url "group_clear_blacklist" pk=group.pk %}">
<i class="ri-history-fill"></i> Effacer la blacklist
</button>
{% if is_owner %}
<a href="{% url "group_delete" group.pk %}"
role="button"
class="secondary">
<i class="ri-delete-bin-fill"></i> Supprimer</a>
{% endif %}
</div>
</form>
</p>
{% endif %}

View file

@ -0,0 +1,79 @@
<h2>
<i class="ri-group-2-fill"></i> Membres
</h2>
<form method="post">
{% csrf_token %}
<table>
<thead>
<tr>
{% if is_leader %}<th></th>{% endif %}
<th>Membre</th>
<th class="c">
<i class="ri-vip-crown-fill"></i>
</th>
<th>
<i class="ri-mv-line"></i>
</th>
</tr>
</thead>
<tbody>
<tr>
{% if is_leader %}<td></td>{% endif %}
<td>{{ group.owner }}</td>
<td class="c">
<i class="ri-vip-crown-fill owner"></i>
</td>
<td>{{ owner_count }}</td>
</tr>
{% for member in members.all %}
<tr>
{% if is_leader %}
<td>
<input type="checkbox" name="member" value="{{ member.pk }}">
</td>
{% endif %}
<td>{{ member.user }}</td>
<td class="c">
{% if is_owner %}
<input type="checkbox"
name="leader"
value="{{ member.pk }}"
role="switch"
{% if member.lead.is_leader %}checked{% endif %}>
{% endif %}
</td>
<td>{{ member.count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if is_leader %}
<div role="group">
{% if is_owner %}
<button type="submit"
class="secondary"
formaction="{% url "group_set_leader" pk=group.pk %}">
<i class="ri-vip-crown-fill"></i> Mettre à jour meneurs
</button>
{% endif %}
<button type="submit"
class="secondary"
formaction="{% url "group_remove_member" pk=group.pk %}">
<i class="ri-delete-bin-fill"></i> Supprimer
</button>
</div>
{% endif %}
</form>
{% if is_leader %}
<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 %}