feat(MembersController): Trie et catégorise les membres par rôle pour l'affichage.

This commit is contained in:
Serreau Jovann
2025-11-22 23:38:56 +01:00
parent 495bbf7676
commit 57cc319927

View File

@@ -27,40 +27,65 @@ class MembersController extends AbstractController
#[Route(path: '/membres', name: 'app_members', options: ['sitemap' => true], methods: ['GET'])]
public function index(MembersRepository $membersRepository,UploaderHelper $uploaderHelper): Response
{
// 1. Définir l'ordre de priorité des rôles pour les membres du bureau
$roleOrder = [
'President' => 1,
'Tresorier' => 2,
'Secretaire' => 3,
'VicePresident' => 4,
'TresorierAdjoint' => 5,
'SecretaireAdjoint' => 6,
];
$board_members =[];
$members =[];
foreach ($membersRepository->findBy(['status'=>'actif']) as $member) {
if($member->getRole() == "President" ||
$member->getRole() == "Tresorier" ||
$member->getRole() == "Secretaire" ||
$member->getRole() == "VicePresident" ||
$member->getRole() == "TresorierAdjoint" ||
$member->getRole() == "SecretaireAdjoint")
$board_members[] = [
'pseudo' => $member->getPseudo(),
'photo_url' =>$uploaderHelper->asset($member,'members'),
'role' => $member->getRole(),
'cosplayer' => $member->isCosplayer(),
'crosscosplayer' => $member->isCrosscosplayer(),
'trans' => $member->isTrans(),
'orientation' => $member->getOrientation(),
];
$board_members_sorted = []; // Pour les membres du bureau (avec priorité)
$regular_members = []; // Pour les membres ayant le rôle "Membre"
// Récupération de tous les membres actifs en une seule fois
foreach ($membersRepository->findBy(['status' => 'actif'], ['id' => 'ASC']) as $member) {
$role = $member->getRole();
// Données communes pour chaque membre
$memberData = [
'pseudo' => $member->getPseudo(),
'photo_url' => $uploaderHelper->asset($member, 'members'),
'role' => $member->getRole(),
'cosplayer' => $member->isCosplayer(),
'crosscosplayer' => $member->isCrosscosplayer(),
'trans' => $member->isTrans(),
'orientation' => $member->getOrientation(),
];
// 2. Filtrer et assigner la priorité
if (isset($roleOrder[$role])) {
// Membre du bureau : on ajoute la priorité
$memberData['priority'] = $roleOrder[$role];
$board_members_sorted[] = $memberData;
} elseif ($role == "Membre") {
// Membre régulier : on ajoute à la liste séparée
$regular_members[] = $memberData;
}
// Les autres rôles sont ignorés
}
foreach ($membersRepository->findBy(['status'=>'actif']) as $member) {
if($member->getRole() == "Membre")
$board_members[] = [
'pseudo' => $member->getPseudo(),
'photo_url' =>$uploaderHelper->asset($member,'members'),
'role' => $member->getRole(),
'cosplayer' => $member->isCosplayer(),
'crosscosplayer' => $member->isCrosscosplayer(),
'trans' => $member->isTrans(),
'orientation' => $member->getOrientation(),
];
// 3. Trier les membres du bureau par ordre de priorité (croissant)
usort($board_members_sorted, function ($a, $b) {
// Utilise l'opérateur <=> pour une comparaison simple
return $a['priority'] <=> $b['priority'];
});
// 4. Nettoyage : Supprimer la clé 'priority'
foreach ($board_members_sorted as &$member) {
unset($member['priority']);
}
unset($member); // Important de désactiver la référence
// 5. Ne plus combiner : on passe les deux listes séparément au template
return $this->render('members.twig',[
'board_members' =>$board_members
'board_members' => $board_members_sorted, // Membres du bureau triés
'regular_members' => $regular_members, // Membres réguliers
]);
}
}