* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\PersonBundle\Menu; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Knp\Menu\MenuItem; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\Security\Core\Security; use Symfony\Contracts\Translation\TranslatorInterface; /** * Add menu entrie to person menu. * * Menu entries added : * * - person details ; * - accompanying period (if `visible`) * */ class PersonMenuBuilder implements LocalMenuBuilderInterface { /** * * @var string 'visible' or 'hidden' */ protected $showAccompanyingPeriod; /** * * @var TranslatorInterface */ protected $translator; private Security $security; public function __construct( ParameterBagInterface $parameterBag, Security $security, TranslatorInterface $translator ) { $this->showAccompanyingPeriod = $parameterBag->get('chill_person.accompanying_period'); $this->security = $security; $this->translator = $translator; } 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('household.person history'), [ 'route' => 'chill_person_household_person_history', 'routeParameters' => [ 'person_id' => $parameters['person']->getId() ] ]) ->setExtras([ 'order' => 99999 ]); $menu->addChild($this->translator->trans('Person duplicate'), [ 'route' => 'chill_person_duplicate_view', 'routeParameters' => [ 'person_id' => $parameters['person']->getId() ] ]) ->setExtras([ 'order' => 99999 ]); if ($this->showAccompanyingPeriod === 'visible' && $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 ]); } } public static function getMenuIds(): array { return [ 'person' ]; } }