*/ final readonly class PersonMenuBuilder implements LocalMenuBuilderInterface { public function __construct( private readonly ActivityACLAwareRepositoryInterface $activityACLAwareRepository, private AuthorizationCheckerInterface $authorizationChecker, private TranslatorInterface $translator, ) {} public function buildMenu($menuId, MenuItem $menu, array $parameters) { /** @var Person $person */ $person = $parameters['person']; $count = $this->activityACLAwareRepository->countByPerson($person, ActivityVoter::SEE); if ($this->authorizationChecker->isGranted(ActivityVoter::SEE, $person)) { $menu->addChild( $this->translator->trans('Activities'), [ 'route' => 'chill_activity_activity_list', 'routeParameters' => ['person_id' => $person->getId()], ] ) ->setExtras(['order' => 201, 'counter' => $count > 0 ? $count : null]); } } public static function getMenuIds(): array { return ['person']; } }