*/ class PersonMenuBuilder implements LocalMenuBuilderInterface { /** * @var string 'visible' or 'hidden' */ protected $showAccompanyingPeriod; protected TranslatorInterface $translator; private ResidentialAddressRepository $residentialAddressRepo; private Security $security; public function __construct( ParameterBagInterface $parameterBag, Security $security, TranslatorInterface $translator, ResidentialAddressRepository $residentialAddressRepo ) { $this->showAccompanyingPeriod = $parameterBag->get('chill_person.accompanying_period'); $this->security = $security; $this->translator = $translator; $this->residentialAddressRepo = $residentialAddressRepo; } /** * @param $menuId * @param MenuItem $menu * @param array{person: Person} $parameters * @return void */ public function buildMenu($menuId, MenuItem $menu, array $parameters) { $menu->addChild($this->translator->trans('Person details'), [ 'route' => 'chill_person_view', 'routeParameters' => [ 'person_id' => $parameters['person']->getId(), ], ]) ->setExtras([ 'order' => 50, ]); $menu->addChild($this->translator->trans('Residential addresses'), [ 'route' => 'chill_person_residential_address_list', 'routeParameters' => [ 'id' => $parameters['person']->getId(), ], ]) ->setExtras([ 'order' => 60, 'counter' => 0 < ($nbResidentials = $this->residentialAddressRepo->countByPerson($parameters['person'])) ? $nbResidentials : null, ]); $menu->addChild($this->translator->trans('person_resources_menu'), [ 'route' => 'chill_person_resource_list', 'routeParameters' => [ 'person_id' => $parameters['person']->getId(), ], ]) ->setExtras([ 'order' => 70, 'counter' => 0 < ($nbResources = $parameters['person']->countResources()) ? $nbResources : null, ]); $menu->addChild($this->translator->trans('household.person history'), [ 'route' => 'chill_person_household_person_history', 'routeParameters' => [ 'person_id' => $parameters['person']->getId(), ], ]) ->setExtras([ 'order' => 99999, ]); if ($this->security->isGranted(PersonVoter::DUPLICATE, $parameters['person'])) { $menu->addChild($this->translator->trans('Person duplicate'), [ 'route' => 'chill_person_duplicate_view', 'routeParameters' => [ 'person_id' => $parameters['person']->getId(), ], ]) ->setExtras([ 'order' => 99999, ]); } if ( 'visible' === $this->showAccompanyingPeriod && $this->security->isGranted(AccompanyingPeriodVoter::SEE, $parameters['person']) ) { $menu->addChild($this->translator->trans('Accompanying period list'), [ 'route' => 'chill_person_accompanying_period_list', 'routeParameters' => [ 'person_id' => $parameters['person']->getId(), ], ]) ->setExtras([ 'order' => 100, 'counter' => 0 < ($nbAccompanyingPeriod = $parameters['person']->countAccompanyingPeriodInvolved()) ? $nbAccompanyingPeriod : null, ]); } } public static function getMenuIds(): array { return ['person']; } }