{% extends 'base.html.twig' %} {% block title %}Troupe — CSI World{% endblock %} {% block stylesheets %} {{ parent() }} {% endblock %} {% block body %}
← Revenir à la carte {# ══════════════════════════════════════════════════════════════════════ ÉTAT 1 — Joueur sans troupe ══════════════════════════════════════════════════════════════════════ #} {% if membership is null %}

Troupes

Rejoignez ou créez une troupe pour partir à l'aventure en groupe.

{# Invitations reçues #} {% if invitations|length > 0 %}

Invitations reçues ({{ invitations|length }})

{% for inv in invitations %}
{{ inv.troupe.name }}
Reçue le {{ inv.createdAt|date('d/m/Y') }}
{% endfor %}
{% endif %} {# Demandes envoyées #} {% if myRequests|length > 0 %}

Demandes envoyées ({{ myRequests|length }})

{% for req in myRequests %}
{{ req.troupe.name }}
Envoyée le {{ req.createdAt|date('d/m/Y') }} — en attente de réponse
{% endfor %}
{% endif %} {# Rechercher une troupe #}

Rechercher une troupe

{# Créer une troupe #}

Créer une troupe

Doit être unique sur le serveur.
{# ══════════════════════════════════════════════════════════════════════ ÉTAT 2 — Joueur dans une troupe ══════════════════════════════════════════════════════════════════════ #} {% else %} {% set myRole = membership.role %} {% set isChef = myRole == 'chef' %} {% set isBrasDroit = myRole == 'bras_droit' %} {% set isElite = myRole == 'elite' %} {% set canSetRole = isChef or isBrasDroit or isElite %} {% set canInvite = myRole in ['chef','bras_droit','tresorier','elite','membre'] %} {% set canAcceptReq = myRole in ['chef','bras_droit','tresorier','elite','membre'] %} {% set joinReqCount = joinRequests|length %} {% set canDeposit = myRole in ['membre','elite','bras_droit','chef'] %} {% set canWithdrawRequest = myRole in ['membre','elite','bras_droit','chef'] %} {% set canValidateBank = myRole in ['chef','bras_droit','tresorier'] %} {% set wrCount = withdrawRequests|length %} {# Helper macro: role label #} {% macro roleLabel(role) %} {%- if role == 'chef' %}Chef {%- elseif role == 'bras_droit' %}Bras droit {%- elseif role == 'tresorier' %}Trésorier {%- elseif role == 'elite' %}Élite {%- elseif role == 'membre' %}Membre {%- else %}Recrue {%- endif -%} {% endmacro %}
{% if troupe.emblem %} {% else %}
Pas
d'emblème
{% endif %}

{{ troupe.name }}

{{ troupe.getMemberCount() }} / {{ maxMembers }} membres

{{ _self.roleLabel(myRole) }}
{# ── Onglet Membres ───────────────────────────────────────────── #}
{% if canSetRole or isChef %}{% endif %} {% for m in members %} {% set isMe = m.player.id == app.user.id %} {% set mRole = m.role %} {% set mTier = subscriber_tier(m.player) %} {% if canSetRole or isChef %} {% endif %} {% endfor %}
Joueur Rôle Membre depuisActions
{{ m.player.username }} {% if mTier %}Abonné{% endif %} {{ _self.roleLabel(mRole) }} {{ m.joinedAt|date('d/m/Y') }}
{% if not isMe and mRole != 'chef' %} {# ── Kick button ── #} {% set canKickThis = false %} {% if isChef %}{% set canKickThis = true %} {% elseif isBrasDroit and mRole in ['tresorier','elite','membre','recrue'] %}{% set canKickThis = true %} {% elseif isElite and mRole in ['membre','recrue'] %}{% set canKickThis = true %} {% endif %} {% if canKickThis %} {% endif %} {# ── Role buttons ── #} {% if canSetRole %} {# Chef: can assign bras_droit, tresorier, elite, membre, recrue to any non-chef #} {% if isChef %} {% if mRole != 'bras_droit' %} {% endif %} {% if mRole != 'tresorier' %} {% endif %} {% if mRole != 'elite' %} {% endif %} {% if mRole != 'membre' %} {% endif %} {% if mRole != 'recrue' %} {% endif %} {# Transfer leadership #} {# Bras droit: can assign tresorier, elite, membre, recrue to non-chef/non-bras_droit #} {% elseif isBrasDroit and mRole != 'bras_droit' %} {% if mRole != 'tresorier' %} {% endif %} {% if mRole != 'elite' %} {% endif %} {% if mRole != 'membre' %} {% endif %} {% if mRole != 'recrue' %} {% endif %} {# Élite: can assign elite, membre, recrue to membre/recrue only #} {% elseif isElite and mRole in ['membre','recrue'] %} {% if mRole != 'elite' %} {% endif %} {% if mRole != 'membre' %} {% endif %} {% if mRole != 'recrue' %} {% endif %} {% endif %} {% endif %}{# canSetRole #} {% endif %}{# not isMe and not chef #}
{% if canInvite %}

Inviter un joueur

{% endif %}
{# ── Onglet Journal ───────────────────────────────────────────── #}
{% if logs|length > 0 %}
    {% for entry in logs %}
  • {% if entry.type == 'create' %}🏕 {% elseif entry.type == 'join' %}+ {% elseif entry.type == 'leave' %}🚶 {% elseif entry.type == 'kick' %}🥾 {% elseif entry.type == 'invite' %}✉ {% elseif entry.type == 'promote' %}↑ {% elseif entry.type == 'demote' %}↓ {% elseif entry.type == 'transfer' %}👑 {% elseif entry.type == 'dissolve' %}❌ {% elseif entry.type == 'join_request' %}📨 {% elseif entry.type == 'request_accept' %}✅ {% elseif entry.type == 'request_decline' %}⛔ {% else %}• {% endif %} {% if entry.type == 'create' %} {{ entry.playerUsername }} a fondé la troupe. {% elseif entry.type == 'join' %} {{ entry.playerUsername }} a rejoint la troupe. {% elseif entry.type == 'leave' %} {{ entry.playerUsername }} a quitté la troupe. {% elseif entry.type == 'kick' %} {{ entry.playerUsername }} a expulsé {{ entry.targetUsername }}. {% elseif entry.type == 'invite' %} {{ entry.playerUsername }} a invité {{ entry.targetUsername }}. {% elseif entry.type == 'promote' %} {{ entry.playerUsername }} a promu {{ entry.targetUsername }}. {% elseif entry.type == 'demote' %} {{ entry.playerUsername }} a rétrogradé {{ entry.targetUsername }}. {% elseif entry.type == 'transfer' %} {{ entry.playerUsername }} a transféré la direction à {{ entry.targetUsername }}. {% elseif entry.type == 'dissolve' %} {{ entry.playerUsername }} a dissous la troupe. {% elseif entry.type == 'join_request' %} {{ entry.playerUsername }} a demandé à rejoindre la troupe. {% elseif entry.type == 'request_accept' %} {{ entry.playerUsername }} a accepté la demande de {{ entry.targetUsername }}. {% elseif entry.type == 'request_decline' %} {{ entry.playerUsername }} a refusé la demande de {{ entry.targetUsername }}. {% else %} Événement inconnu. {% endif %} {{ entry.createdAt|date('d/m H:i') }}
  • {% endfor %}
{% else %}

Aucun événement enregistré.

{% endif %}
{# ── Onglet Gestion (tous) ────────────────────────────────────── #}
{# Demandes d'adhésion #} {% if canAcceptReq %} {% if joinRequests|length > 0 %}

Demandes d'adhésion ({{ joinRequests|length }})

{% for req in joinRequests %}
{{ req.player.username }}
Demande envoyée le {{ req.createdAt|date('d/m/Y') }}
{% endfor %}
{% else %}

Demandes d'adhésion

Aucune demande en attente.

{% endif %} {% endif %} {# Emblème (chef) #} {% if isChef %}

Emblème de la troupe

{% if troupe.emblem %} Emblème actuel {% else %}
Aucun
emblème
{% endif %}

JPG, PNG, GIF ou WebP — max 2 Mo

{% endif %} {# Quitter #}

Quitter la troupe

{% if isChef %}

En tant que chef, vous ne pouvez quitter la troupe que si vous êtes le dernier membre, ou après avoir transféré la direction.

{% endif %}
{# Dissoudre (chef) #} {% if isChef %}

Dissoudre la troupe

Dissoudre la troupe supprime définitivement toutes les données associées (membres, invitations, journal). Cette action est irréversible.

{% endif %}
{# ── Onglet Banque ───────────────────────────────────────────── #}
{# Solde actuel (visible par tous) #}

Solde actuel

{{ bankBalance|number_format(0, ',', ' ') }} Dollawrs
{# Déposer (Membre, Élite, Bras droit, Chef) #} {% if canDeposit %}

Déposer

{% endif %} {# Demande de retrait (Membre, Élite, Bras droit, Chef) #} {% if canWithdrawRequest %}

Demande de retrait

{% if myWithdrawRequest %}
{{ myWithdrawRequest.amount|number_format(0, ',', ' ') }} Dollawrs
{% if myWithdrawRequest.reason %}
{{ myWithdrawRequest.reason }}
{% endif %}
Envoyée le {{ myWithdrawRequest.createdAt|date('d/m/Y') }} — en attente de validation
{% else %}
{% endif %}
{% endif %} {# Demandes en attente (Chef, Bras droit, Trésorier) #} {% if canValidateBank %}

Demandes en attente{% if wrCount > 0 %} ({{ wrCount }}){% endif %}

{% if wrCount > 0 %}
{% for req in withdrawRequests %}
{{ req.player.username }} — {{ req.amount|number_format(0, ',', ' ') }} Dollawrs
{% if req.reason %}
{{ req.reason }}
{% endif %}
Envoyée le {{ req.createdAt|date('d/m/Y') }}
{% if req.player.id != app.user.id %} {% else %} Votre demande {% endif %}
{% endfor %}
{% else %}

Aucune demande en attente.

{% endif %}
{% endif %} {# Historique (visible par tous) #}

Historique

{% if bankLogs|length > 0 %}
    {% for entry in bankLogs %}
  • {% if entry.type == 'bank_deposit' %}💰 {% elseif entry.type == 'bank_withdraw' %}💸 {% elseif entry.type == 'bank_wr_request' %}📄 {% elseif entry.type == 'bank_wr_approve' %}✅ {% elseif entry.type == 'bank_wr_decline' %}⛔ {% else %}• {% endif %} {% set amt = entry.data and entry.data['amount'] is defined ? entry.data['amount']|number_format(0, ',', ' ') ~ ' Dollawrs' : '' %} {% if entry.type == 'bank_deposit' %} {{ entry.playerUsername }} a déposé {{ amt }}. {% elseif entry.type == 'bank_withdraw' %} {{ entry.playerUsername }} a retiré {{ amt }}. {% elseif entry.type == 'bank_wr_request' %} {{ entry.playerUsername }} a demandé un retrait de {{ amt }}. {% elseif entry.type == 'bank_wr_approve' %} {{ entry.playerUsername }} a approuvé le retrait de {{ entry.targetUsername }}{% if amt %} ({{ amt }}){% endif %}. {% elseif entry.type == 'bank_wr_decline' %} {{ entry.playerUsername }} a refusé le retrait de {{ entry.targetUsername }}{% if amt %} ({{ amt }}){% endif %}. {% else %} Événement inconnu. {% endif %} {{ entry.createdAt|date('d/m H:i') }}
  • {% endfor %}
{% else %}

Aucun mouvement enregistré.

{% endif %}
{% endif %}
{% endblock %}