From 2f1445a3f39ccdb200975f6d07e48fd16e2200e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Fri, 5 Dec 2025 14:50:06 +0000 Subject: [PATCH] Refactor `UserMenuBuilder` to include `User` type check for better type safety --- .../Menu/UserMenuBuilder.php | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php b/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php index df04e9bf0..b6f16d06b 100644 --- a/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php +++ b/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php @@ -12,40 +12,45 @@ declare(strict_types=1); namespace Chill\CalendarBundle\Menu; use Chill\CalendarBundle\Repository\InviteRepository; +use Chill\MainBundle\Entity\User; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; -use Chill\MainBundle\Security\ChillSecurity; use Knp\Menu\MenuItem; +use Symfony\Component\Security\Core\Security; use Symfony\Contracts\Translation\TranslatorInterface; final readonly class UserMenuBuilder implements LocalMenuBuilderInterface { public function __construct( - private ChillSecurity $security, + private Security $security, private TranslatorInterface $translator, private InviteRepository $inviteRepository, ) {} public function buildMenu($menuId, MenuItem $menu, array $parameters): void { - $invitationsPending = $this->inviteRepository->countPendingInvitesByUser($this->security->getUser()); + $user = $this->security->getUser(); - if ($this->security->isGranted('ROLE_USER')) { - $menu->addChild('My calendar list', [ - 'route' => 'chill_calendar_calendar_list_my', - ]) - ->setExtras([ - 'order' => 8, - 'icon' => 'tasks', - ]); - $menu->addChild( - $this->translator->trans('invite.menu with counter', ['nb' => $invitationsPending]), - ['route' => 'chill_calendar_invitations_list_my'] - ) - ->setExtras([ - 'order' => 9, - 'icon' => 'tasks', - 'counter' => 0 < $invitationsPending ? $invitationsPending : null, - ]); + if ($user instanceof User) { + $invitationsPending = $this->inviteRepository->countPendingInvitesByUser($user); + + if ($this->security->isGranted('ROLE_USER')) { + $menu->addChild('My calendar list', [ + 'route' => 'chill_calendar_calendar_list_my', + ]) + ->setExtras([ + 'order' => 8, + 'icon' => 'tasks', + ]); + $menu->addChild( + $this->translator->trans('invite.menu with counter', ['nb' => $invitationsPending]), + ['route' => 'chill_calendar_invitations_list_my'] + ) + ->setExtras([ + 'order' => 9, + 'icon' => 'tasks', + 'counter' => 0 < $invitationsPending ? $invitationsPending : null, + ]); + } } }