✨ feat(MembersController): Trie et catégorise les membres par rôle pour l'affichage.
This commit is contained in:
@@ -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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user