From 5e5dcaefe7771069fb7f29f47d1131720a4a3d98 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Tue, 9 Nov 2021 15:25:45 +0100 Subject: [PATCH] Fix implicit variable creation. --- phpstan-baseline.neon | 160 -------- .../src/Templating/Entity/CategoryRender.php | 4 +- .../ChillCustomFieldsExtension.php | 24 +- .../Controller/ParticipationController.php | 357 +++++++++--------- .../Command/LoadCountriesCommand.php | 31 +- .../DataFixtures/ORM/LoadLanguages.php | 31 +- .../DataTransformer/CenterTransformer.php | 8 +- .../ChillMainBundle/Search/SearchApi.php | 8 +- .../Normalizer/AddressNormalizer.php | 58 +-- .../Normalizer/CollectionNormalizer.php | 44 ++- .../Timeline/TimelineBuilder.php | 9 +- .../Command/ImportPeopleFromCSVCommand.php | 2 + .../DataFixtures/ORM/LoadHousehold.php | 6 +- .../Aggregator/CountryOfBirthAggregator.php | 19 +- .../Aggregator/NationalityAggregator.php | 17 +- .../ChillPersonBundle/Search/PersonSearch.php | 5 +- .../Templating/Entity/SocialActionRender.php | 2 +- .../Templating/Entity/SocialIssueRender.php | 3 +- .../Export/Export/ReportList.php | 178 ++++----- .../TaskLifeCycleEventTimelineProvider.php | 46 +-- .../Normalizer/ThirdPartyNormalizer.php | 33 +- 21 files changed, 464 insertions(+), 581 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index d2b73f299..e578c1d45 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -150,11 +150,6 @@ parameters: count: 1 path: src/Bundle/ChillAsideActivityBundle/src/Menu/AdminMenuBuilder.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$titles does not exist\\.$#" - count: 1 - path: src/Bundle/ChillAsideActivityBundle/src/Templating/Entity/CategoryRender.php - - message: "#^Only booleans are allowed in an if condition, mixed given\\.$#" count: 3 @@ -265,11 +260,6 @@ parameters: count: 1 path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldTitle.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$twigConfig does not exist\\.$#" - count: 1 - path: src/Bundle/ChillCustomFieldsBundle/DependencyInjection/ChillCustomFieldsExtension.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 1 @@ -330,16 +320,6 @@ parameters: count: 1 path: src/Bundle/ChillDocStoreBundle/EntityRepository/DocumentCategoryRepository.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$ignoredParticipations might not exist\\.$#" - count: 1 - path: src/Bundle/ChillEventBundle/Controller/ParticipationController.php - - - - message: "#^Implicit array creation is not allowed \\- variable \\$newParticipations might not exist\\.$#" - count: 1 - path: src/Bundle/ChillEventBundle/Controller/ParticipationController.php - - message: "#^Variable \\$participation might not be defined\\.$#" count: 3 @@ -570,21 +550,11 @@ parameters: count: 2 path: src/Bundle/ChillMainBundle/Command/LoadAndUpdateLanguagesCommand.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$countries might not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php - - message: "#^Method Chill\\\\MainBundle\\\\Command\\\\LoadCountriesCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#" count: 1 path: src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php - - - message: "#^Variable \\$countries might not be defined\\.$#" - count: 2 - path: src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php - - message: "#^Method Chill\\\\MainBundle\\\\Command\\\\LoadPostalCodesCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#" count: 1 @@ -645,16 +615,6 @@ parameters: count: 2 path: src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$names might not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php - - - - message: "#^Variable \\$names might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php - - message: "#^Call to function array_search\\(\\) requires parameter \\#3 to be set\\.$#" count: 5 @@ -800,11 +760,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/Form/Type/ComposedRoleScopeType.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$ids does not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/CenterTransformer.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 3 @@ -865,11 +820,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/Search/Entity/SearchUserApiProvider.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$items might not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Search/SearchApi.php - - message: "#^Method Chill\\\\MainBundle\\\\Search\\\\SearchApi\\:\\:buildUnionQuery\\(\\) invoked with 4 parameters, 3 required\\.$#" count: 1 @@ -935,21 +885,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/Security/UserProvider/UserProvider.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$data does not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php - - - - message: "#^Implicit array creation is not allowed \\- variable \\$data does not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php - - - - message: "#^Implicit array creation is not allowed \\- variable \\$pagination does not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php - - message: "#^Variable \\$message on left side of \\?\\? always exists and is not nullable\\.$#" count: 1 @@ -965,11 +900,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$timelineEntry might not exist\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php - - message: "#^Method Chill\\\\MainBundle\\\\Timeline\\\\TimelineBuilder\\:\\:getTemplateData\\(\\) should return array but return statement is missing\\.$#" count: 1 @@ -1045,21 +975,11 @@ parameters: count: 6 path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$matchingTableRowAnswer might not exist\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - message: "#^Variable \\$headers might not be defined\\.$#" count: 2 path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - - message: "#^Variable \\$matchingTableRowAnswer might not be defined\\.$#" - count: 5 - path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php - - message: "#^Variable \\$rawHeaders might not be defined\\.$#" count: 1 @@ -1095,11 +1015,6 @@ parameters: count: 2 path: src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHousehold.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$persons might not exist\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHousehold.php - - message: "#^Variable method call on mixed\\.$#" count: 1 @@ -1175,31 +1090,11 @@ parameters: count: 1 path: src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$labels does not exist\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php - - - - message: "#^Variable \\$labels might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 1 path: src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$labels does not exist\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php - - - - message: "#^Variable \\$labels might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php - - message: "#^Anonymous function has an unused use \\$key\\.$#" count: 1 @@ -1365,21 +1260,11 @@ parameters: count: 3 path: src/Bundle/ChillPersonBundle/Search/PersonSearch.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$data might not exist\\.$#" - count: 2 - path: src/Bundle/ChillPersonBundle/Search/PersonSearch.php - - message: "#^Method Chill\\\\PersonBundle\\\\Search\\\\PersonSearch\\:\\:renderResult\\(\\) should return string but return statement is missing\\.$#" count: 1 path: src/Bundle/ChillPersonBundle/Search/PersonSearch.php - - - message: "#^Variable \\$data might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Search/PersonSearch.php - - message: "#^Variable variables are not allowed\\.$#" count: 4 @@ -1420,16 +1305,6 @@ parameters: count: 2 path: src/Bundle/ChillPersonBundle/Templating/Entity/ClosingMotiveRender.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$titles does not exist\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Templating/Entity/SocialActionRender.php - - - - message: "#^Implicit array creation is not allowed \\- variable \\$titles does not exist\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Templating/Entity/SocialIssueRender.php - - message: "#^Call to function in_array\\(\\) requires parameter \\#3 to be set\\.$#" count: 1 @@ -1470,16 +1345,6 @@ parameters: count: 2 path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$scopes might not exist\\.$#" - count: 1 - path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php - - - - message: "#^Implicit array creation is not allowed \\- variable \\$users might not exist\\.$#" - count: 1 - path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php - - message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'person_address_country_name' \\(string\\)\\.$#" count: 1 @@ -1525,16 +1390,6 @@ parameters: count: 1 path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php - - - message: "#^Variable \\$scopes might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php - - - - message: "#^Variable \\$users might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php - - message: "#^Call to function in_array\\(\\) requires parameter \\#3 to be set\\.$#" count: 1 @@ -1620,21 +1475,11 @@ parameters: count: 1 path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$circleIds might not exist\\.$#" - count: 1 - path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php - - message: "#^Method Chill\\\\TaskBundle\\\\Timeline\\\\TaskLifeCycleEventTimelineProvider\\:\\:getTransitionByName\\(\\) should return Symfony\\\\Component\\\\Workflow\\\\Transition but return statement is missing\\.$#" count: 1 path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php - - - message: "#^Variable \\$circleIds might not be defined\\.$#" - count: 1 - path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php - - message: "#^Call to function in_array\\(\\) requires parameter \\#3 to be set\\.$#" count: 1 @@ -1690,11 +1535,6 @@ parameters: count: 1 path: src/Bundle/ChillThirdPartyBundle/Security/Voter/ThirdPartyVoter.php - - - message: "#^Implicit array creation is not allowed \\- variable \\$data does not exist\\.$#" - count: 1 - path: src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 1 diff --git a/src/Bundle/ChillAsideActivityBundle/src/Templating/Entity/CategoryRender.php b/src/Bundle/ChillAsideActivityBundle/src/Templating/Entity/CategoryRender.php index 902ed7a68..668c95f0f 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Templating/Entity/CategoryRender.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Templating/Entity/CategoryRender.php @@ -30,7 +30,9 @@ final class CategoryRender implements ChillEntityRenderInterface { $options = array_merge(self::DEFAULT_ARGS, $options); - $titles[] = $this->translatableStringHelper->localize($asideActivityCategory->getTitle()); + $titles = [ + $this->translatableStringHelper->localize($asideActivityCategory->getTitle()), + ]; while ($asideActivityCategory->hasParent()) { $asideActivityCategory = $asideActivityCategory->getParent(); diff --git a/src/Bundle/ChillCustomFieldsBundle/DependencyInjection/ChillCustomFieldsExtension.php b/src/Bundle/ChillCustomFieldsBundle/DependencyInjection/ChillCustomFieldsExtension.php index f6aabc0f1..44af7a6fe 100644 --- a/src/Bundle/ChillCustomFieldsBundle/DependencyInjection/ChillCustomFieldsExtension.php +++ b/src/Bundle/ChillCustomFieldsBundle/DependencyInjection/ChillCustomFieldsExtension.php @@ -28,27 +28,31 @@ class ChillCustomFieldsExtension extends Extension implements PrependExtensionIn $loader->load('services/fixtures.yaml'); $loader->load('services/controller.yaml'); $loader->load('services/command.yaml'); - + //add at least a blank array at 'customizable_entities' options - //$customizable_entities = (isset($config['customizables_entities']) - // && $config['customizables_entities'] !== FALSE) + //$customizable_entities = (isset($config['customizables_entities']) + // && $config['customizables_entities'] !== FALSE) // ? $config['customizables_entities'] : array(); - - $container->setParameter('chill_custom_fields.customizables_entities', + + $container->setParameter('chill_custom_fields.customizables_entities', $config['customizables_entities']); - $container->setParameter('chill_custom_fields.show_empty_values', + $container->setParameter('chill_custom_fields.show_empty_values', $config['show_empty_values_in_views']); } - + /* (non-PHPdoc) * @see \Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface::prepend() */ - public function prepend(ContainerBuilder $container) + public function prepend(ContainerBuilder $container) { // add form layout to twig resources - $twigConfig['form_themes'][] = 'ChillCustomFieldsBundle:Form:fields.html.twig'; + $twigConfig = [ + 'form_themes' => [ + 'ChillCustomFieldsBundle:Form:fields.html.twig', + ], + ]; $container->prependExtensionConfig('twig', $twigConfig); - + //add routes for custom bundle $container->prependExtensionConfig('chill_main', array( 'routing' => array( diff --git a/src/Bundle/ChillEventBundle/Controller/ParticipationController.php b/src/Bundle/ChillEventBundle/Controller/ParticipationController.php index 4242eb784..848c63468 100644 --- a/src/Bundle/ChillEventBundle/Controller/ParticipationController.php +++ b/src/Bundle/ChillEventBundle/Controller/ParticipationController.php @@ -39,12 +39,12 @@ use Symfony\Component\Form\Extension\Core\Type\CollectionType; */ class ParticipationController extends AbstractController { - + /** * @var \Psr\Log\LoggerInterface */ private $logger; - + /** * ParticipationController constructor. * @@ -54,10 +54,10 @@ class ParticipationController extends AbstractController { $this->logger = $logger; } - + /** * Show a form to add a participation - * + * * This function parse the person_id / persons_ids query argument * and decide if it should process a single or multiple participation. Depending * on this, the appropriate layout and form. @@ -67,46 +67,46 @@ class ParticipationController extends AbstractController */ public function newAction(Request $request) { - + // test the request is correct try { $this->testRequest($request); } catch (\RuntimeException $ex) { $this->logger->warning($ex->getMessage()); - + return (new Response()) ->setStatusCode(Response::HTTP_BAD_REQUEST) ->setContent($ex->getMessage()); } - + // forward to other action $single = $request->query->has('person_id'); $multiple = $request->query->has('persons_ids'); - + if ($single === true) { return $this->newSingle($request); } - + if ($multiple === true) { - + return $this->newMultiple($request); } - + // at this point, we miss the required fields. Throw an error return (new Response()) ->setStatusCode(Response::HTTP_BAD_REQUEST) ->setContent("You must provide either 'person_id' or " . "'persons_ids' argument in query"); } - + /** - * + * * Test that the query parameters are valid : - * + * * - an `event_id` is existing ; * - `person_id` and `persons_ids` are **not** both present ; * - `persons_id` is correct (contains only numbers and a ','. - * + * * @param Request $request * @throws \RuntimeException if an error is detected */ @@ -114,64 +114,64 @@ class ParticipationController extends AbstractController { $single = $request->query->has('person_id'); $multiple = $request->query->has('persons_ids'); - + if ($single === true AND $multiple === true) { // we are not allowed to have both person_id and persons_ids throw new \RuntimeException("You are not allow to provide both 'person_id' and " . "'persons_ids' simulaneously"); } - + if ($multiple === true) { $persons_ids = $request->query->get('persons_ids'); - + if (!preg_match('/^([0-9]{1,},{0,1}){1,}[0-9]{0,}$/', $persons_ids)) { throw new \RuntimeException("The persons_ids value should " . "contains int separated by ','"); } } - + // check for event_id - this could be removed later if ($request->query->has('event_id') === FALSE) { throw new \RuntimeException("You must provide an event_id"); } - + } - + /** * Show a form with single participation. - * + * * @param Request $request * @return Response */ protected function newSingle(Request $request) { - + $returnPath = $request->query->get('return_path') ? $request->query->get('return_path') : null; - + $participation = $this->handleRequest($request, new Participation(), false); - - $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, + + $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, $participation, 'The user is not allowed to create this participation'); - + $form = $this->createCreateForm($participation, $returnPath); - + return $this->render('ChillEventBundle:Participation:new.html.twig', array( 'form' => $form->createView(), 'participation' => $participation, 'ignored_participations' => array() // this is required, see self::newMultiple )); } - + /** * Show a form with multiple participation. - * + * * If a person is already participating on the event (if a participation with * the same person is associated with the event), the participation is ignored. - * + * * If all but one participation is ignored, the page show the same response - * than the newSingle function. - * + * than the newSingle function. + * * If all participations must be ignored, an error is shown and the method redirects * to the event 'show' view with an appropriate flash message. * @@ -181,24 +181,24 @@ class ParticipationController extends AbstractController protected function newMultiple(Request $request) { $participations = $this->handleRequest($request, new Participation(), true); - - + $ignoredParticipations = $newParticipations = []; + foreach ($participations as $i => $participation) { // check for authorization - $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, + $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, $participation, 'The user is not allowed to create this participation'); - + // create a collection of person's id participating to the event /* @var $peopleParticipating \Doctrine\Common\Collections\ArrayCollection */ $peopleParticipating = isset($peopleParticipating) ? $peopleParticipating : $participation->getEvent()->getParticipations()->map( function(Participation $p) { return $p->getPerson()->getId(); } ); - // check that the user is not already in the event + // check that the user is not already in the event if ($peopleParticipating->contains($participation->getPerson()->getId())) { $ignoredParticipations[] = $participation ->getEvent()->getParticipations()->filter( - function (Participation $p) use ($participation) { + function (Participation $p) use ($participation) { return $p->getPerson()->getId() === $participation->getPerson()->getId(); } )->first(); @@ -206,15 +206,15 @@ class ParticipationController extends AbstractController $newParticipations[] = $participation; } } - + // this is where the function redirect depending on valid participation - - if (!isset($newParticipations)) { + + if ([] === $newParticipations) { // if we do not have nay participants, redirect to event view $this->addFlash('error', $this->get('translator')->trans( 'None of the requested people may participate ' . 'the event: they are maybe already participating.')); - + return $this->redirectToRoute('chill_event__event_show', array( 'event_id' => $request->query->getInt('event_id', 0) )); @@ -222,24 +222,29 @@ class ParticipationController extends AbstractController // if we have multiple participations, show a form with multiple participations $form = $this->createCreateFormMultiple($newParticipations); - return $this->render('ChillEventBundle:Participation:new-multiple.html.twig', array( + return $this->render( + 'ChillEventBundle:Participation:new-multiple.html.twig', + [ 'form' => $form->createView(), 'participations' => $newParticipations, - 'ignored_participations' => isset($ignoredParticipations) ? $ignoredParticipations : array() - )); - } else { - // if we have only one participation, show the same form than for single participation - $form = $this->createCreateForm($participation); - - return $this->render('ChillEventBundle:Participation:new.html.twig', array( + 'ignored_participations' => $ignoredParticipations + ] + ); + } + + // if we have only one participation, show the same form than for single participation + $form = $this->createCreateForm($participation); + + return $this->render( + 'ChillEventBundle:Participation:new.html.twig', + [ 'form' => $form->createView(), 'participation' => $participation, - 'ignored_participations' => isset($ignoredParticipations) ? $ignoredParticipations : array() - )); - - } + 'ignored_participations' => $ignoredParticipations, + ] + ); } - + /** * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response @@ -251,32 +256,32 @@ class ParticipationController extends AbstractController $this->testRequest($request); } catch (\RuntimeException $ex) { $this->logger->warning($ex->getMessage()); - + return (new Response()) ->setStatusCode(Response::HTTP_BAD_REQUEST) ->setContent($ex->getMessage()); } - + // forward to other action $single = $request->query->has('person_id'); $multiple = $request->query->has('persons_ids'); - + if ($single === true) { return $this->createSingle($request); } - + if ($multiple === true) { - + return $this->createMultiple($request); } - + // at this point, we miss the required fields. Throw an error return (new Response()) ->setStatusCode(Response::HTTP_BAD_REQUEST) ->setContent("You must provide either 'person_id' or " . "'persons_ids' argument in query"); } - + /** * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response @@ -284,41 +289,41 @@ class ParticipationController extends AbstractController public function createSingle(Request $request) { $participation = $this->handleRequest($request, new Participation(), false); - - $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, + + $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, $participation, 'The user is not allowed to create this participation'); - + $form = $this->createCreateForm($participation); $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); - + $em->persist($participation); $em->flush(); - + $this->addFlash('success', $this->get('translator')->trans( 'The participation was created' )); - + if ($request->query->get('return_path')) { return $this->redirect($request->query->get('return_path')); - + } else { return $this->redirectToRoute('chill_event__event_show', array( 'event_id' => $participation->getEvent()->getId() )); } - + } - + return $this->render('ChillEventBundle:Participation:new.html.twig', array( 'form' => $form->createView(), 'participation' => $participation )); } - + /** * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response @@ -326,56 +331,56 @@ class ParticipationController extends AbstractController public function createMultiple(Request $request) { $participations = $this->handleRequest($request, new Participation(), true); - + foreach($participations as $participation) { - $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, + $this->denyAccessUnlessGranted(ParticipationVoter::CREATE, $participation, 'The user is not allowed to create this participation'); } - + $form = $this->createCreateFormMultiple($participations); $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $data = $form->getData(); - + foreach($data['participations'] as $participation) { $em->persist($participation); } - + $em->flush(); - + $this->addFlash('success', $this->get('translator')->trans( 'The participations were created' )); - + return $this->redirectToRoute('chill_event__event_show', array( 'event_id' => $participations[0]->getEvent()->getId() )); } - + return $this->render('ChillEventBundle:Participation:new.html.twig', array( 'form' => $form->createView(), 'participation' => $participation )); } - + /** - * + * * Handle the request to adapt $participation. - * - * If the request is multiple, the $participation object is cloned. + * + * If the request is multiple, the $participation object is cloned. * Limitations: the $participation should not be persisted. - * + * * @param Request $request * @param Participation $participation - * @param boolean $multiple (default false) + * @param boolean $multiple (default false) * @return Participation|Participations[] return one single participation if $multiple == false * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException if the event/person is not found * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedException if the user does not have access to event/person */ protected function handleRequest( - Request $request, + Request $request, Participation $participation, $multiple = false) { @@ -384,37 +389,37 @@ class ParticipationController extends AbstractController throw new \LogicException("The participation object should not be managed by " . "the object manager using the method ".__METHOD__); } - + $event_id = $request->query->getInt('event_id', 0); // sf4 check: // prevent error: `Argument 2 passed to ::getInt() must be of the type int, null given` - + if ($event_id !== NULL) { $event = $em->getRepository('ChillEventBundle:Event') ->find($event_id); - + if ($event === NULL) { throw $this->createNotFoundException('The event with id '.$event_id.' is not found'); } - - $this->denyAccessUnlessGranted('CHILL_EVENT_SEE', $event, + + $this->denyAccessUnlessGranted('CHILL_EVENT_SEE', $event, 'The user is not allowed to see the event'); - + $participation->setEvent($event); } - - // this script should be able to handle multiple, so we translate + + // this script should be able to handle multiple, so we translate // single person_id in an array $persons_ids = $request->query->has('person_id') ? [$request->query->getInt('person_id', 0)] // sf4 check: // prevent error: `Argument 2 passed to ::getInt() must be of the type int, null given` : explode(',', $request->query->get('persons_ids')); $participations = array(); - + foreach($persons_ids as $person_id) { - + // clone if we have to reuse the $participation $participation = count($persons_ids) > 1 ? clone $participation : $participation; - + if ($person_id !== NULL) { $person = $em->getRepository('ChillPersonBundle:Person') ->find($person_id); @@ -428,13 +433,13 @@ class ParticipationController extends AbstractController $participation->setPerson($person); } - + $participations[] = $participation; } - + return $multiple ? $participations : $participations[0]; } - + /** * @param Participation $participation * @param null $return_path @@ -442,7 +447,7 @@ class ParticipationController extends AbstractController */ public function createCreateForm(Participation $participation, $return_path = null) { - + $form = $this->createForm(ParticipationType::class, $participation, array( 'event_type' => $participation->getEvent()->getType(), 'action' => $this->generateUrl('chill_event_participation_create', array( @@ -451,14 +456,14 @@ class ParticipationController extends AbstractController 'person_id' => $participation->getPerson()->getId() )) )); - + $form->add('submit', SubmitType::class, array( 'label' => 'Create' )); - + return $form; } - + /** * @param array $participations * @return \Symfony\Component\Form\FormInterface @@ -470,7 +475,7 @@ class ParticipationController extends AbstractController 'action' => $this->generateUrl('chill_event_participation_create', array( 'event_id' => current($participations)->getEvent()->getId(), 'persons_ids' => implode(',', array_map( - function(Participation $p) { return $p->getPerson()->getId(); }, + function(Participation $p) { return $p->getPerson()->getId(); }, $participations)) ) ))); @@ -481,90 +486,90 @@ class ParticipationController extends AbstractController ), ) ); - + $form->add('submit', SubmitType::class, array( 'label' => 'Create' )); - + return $form; } - + /** * show an edit form for the participation with the given id. - * + * * @param int $participation_id * @return \Symfony\Component\HttpFoundation\Response * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException if the participation is not found * @throws \Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException if the user is not allowed to edit the participation */ - public function editAction($participation_id) + public function editAction($participation_id) { /* @var $participation Participation */ $participation = $this->getDoctrine()->getManager() ->getRepository('ChillEventBundle:Participation') ->find($participation_id); - + if ($participation === NULL) { throw $this->createNotFoundException('The participation is not found'); } - - $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, + + $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, 'You are not allowed to edit this participation'); - + $form = $this->createEditForm($participation); - + return $this->render('ChillEventBundle:Participation:edit.html.twig', array( 'form' => $form->createView(), 'participation' => $participation )); } - + /** * @param $participation_id * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response */ - public function updateAction($participation_id, Request $request) + public function updateAction($participation_id, Request $request) { /* @var $participation Participation */ $participation = $this->getDoctrine()->getManager() ->getRepository('ChillEventBundle:Participation') ->find($participation_id); - + if ($participation === NULL) { throw $this->createNotFoundException('The participation is not found'); } - - $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, + + $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, 'You are not allowed to edit this participation'); - + $form = $this->createEditForm($participation); - + $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); - + $em->flush(); - + $this->addFlash('success', $this->get('translator')->trans( 'The participation was updated' )); - + return $this->redirectToRoute('chill_event__event_show', array( 'event_id' => $participation->getEvent()->getId() )); - + } - + return $this->render('ChillEventBundle:Participation:edit.html.twig', array( 'form' => $form->createView(), 'participation' => $participation )); } - + /** - * + * * @param Participation $participation * @return \Symfony\Component\Form\FormInterface */ @@ -576,14 +581,14 @@ class ParticipationController extends AbstractController 'participation_id' => $participation->getId() )) )); - + $form->add('submit', SubmitType::class, array( 'label' => 'Edit' )); - + return $form; } - + /** * show a form to edit multiple participation for the same event. * @@ -594,84 +599,84 @@ class ParticipationController extends AbstractController { $event = $this->getDoctrine()->getRepository('ChillEventBundle:Event') ->find($event_id); - + if ($event === null) { throw $this->createNotFoundException("The event with id $event_id is not found"); } - + // check for ACL, on Event level and on Participation Level $this->denyAccessUnlessGranted('CHILL_EVENT_SEE', $event, "You are not allowed " . "to see this event"); foreach ($event->getParticipations() as $participation) { - $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, + $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, "You are not allowed to update participation with id ".$participation->getId()); } - - + + switch ($event->getParticipations()->count()) { - + case 0: // if there aren't any participation, redirect to the 'show' view with an add flash $this->addFlash('warning', $this->get('translator') ->trans( "There are no participation to edit for this event")); - return $this->redirectToRoute('chill_event__event_show', + return $this->redirectToRoute('chill_event__event_show', array('event_id' => $event->getId())); - + case 1: // redirect to the form for a single participation return $this->redirectToRoute('chill_event_participation_edit', array( 'participation_id' => $event->getParticipations()->current()->getId() )); - } - + } + $form = $this->createEditFormMultiple($event->getParticipations(), $event); - + return $this->render('ChillEventBundle:Participation:edit-multiple.html.twig', array( 'event' => $event, 'participations' => $event->getParticipations(), 'form' => $form->createView() )); } - + public function updateMultipleAction($event_id, Request $request) { /* @var $event \Chill\EventBundle\Entity\Event */ $event = $this->getDoctrine()->getRepository('ChillEventBundle:Event') ->find($event_id); - + if ($event === null) { throw $this->createNotFoundException("The event with id $event_id is not found"); } - + $this->denyAccessUnlessGranted('CHILL_EVENT_SEE', $event, "You are not allowed " . "to see this event"); foreach ($event->getParticipations() as $participation) { - $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, + $this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation, "You are not allowed to update participation with id ".$participation->getId()); } - + $form = $this->createEditFormMultiple($event->getParticipations(), $event); - + $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $this->getDoctrine()->getManager()->flush(); - + $this->addFlash('success', $this->get('translator')->trans("The participations " . "have been successfully updated.")); - - return $this->redirectToRoute('chill_event__event_show', + + return $this->redirectToRoute('chill_event__event_show', array('event_id' => $event->getId())); } - + return $this->render('ChillEventBundle:Participation:edit-multiple.html.twig', array( 'event' => $event, 'participations' => $event->getParticipations(), 'form' => $form->createView() )); } - + /** * @param ArrayIterator $participations * @param Event $event @@ -679,14 +684,14 @@ class ParticipationController extends AbstractController */ protected function createEditFormMultiple(ArrayIterator $participations, Event $event) { - $form = $this->createForm(\Symfony\Component\Form\Extension\Core\Type\FormType::class, + $form = $this->createForm(\Symfony\Component\Form\Extension\Core\Type\FormType::class, array('participations' => $participations), array( 'method' => 'POST', 'action' => $this->generateUrl('chill_event_participation_update_multiple', array( 'event_id' => $event->getId() )) )); - + $form->add('participations', CollectionType::class, array( 'entry_type' => ParticipationType::class, 'entry_options' => array( @@ -694,14 +699,14 @@ class ParticipationController extends AbstractController ), ) ); - + $form->add('submit', SubmitType::class, array( 'label' => 'Update' )); - + return $form; } - + /** * @param integer $participation_id * @param Request $request @@ -713,28 +718,28 @@ class ParticipationController extends AbstractController $participation = $em->getRepository('ChillEventBundle:Participation')->findOneBy([ 'id' => $participation_id ]); - + if (! $participation) { throw $this->createNotFoundException('Unable to find participation.'); } - + /** @var Event $event */ $event = $participation->getEvent(); - + $form = $this->createDeleteForm($participation_id); - + if ($request->getMethod() === Request::METHOD_DELETE) { $form->handleRequest($request); - + if ($form->isValid()) { - + $em->remove($participation); $em->flush(); - + $this->addFlash('success', $this->get('translator') ->trans("The participation has been sucessfully removed") ); - + return $this->redirectToRoute('chill_event__event_show', [ 'event_id' => $event->getId() ]); @@ -744,9 +749,9 @@ class ParticipationController extends AbstractController 'event_id' => $event->getId(), 'delete_form' => $form->createView() ]); - + } - + /** * @param $participation_id * @return \Symfony\Component\Form\FormInterface @@ -762,5 +767,5 @@ class ParticipationController extends AbstractController ->getForm() ; } - + } diff --git a/src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php b/src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php index 036ad1de7..443f4b52f 100644 --- a/src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php +++ b/src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php @@ -10,18 +10,18 @@ use Symfony\Component\Console\Output\OutputInterface; /** * * @author Julien Fastré availableLanguages=$availableLanguages; parent::__construct(); } - + /* * (non-PHPdoc) * @see \Symfony\Component\Console\Command\Command::configure() @@ -45,7 +45,7 @@ class LoadCountriesCommand extends Command ->setDescription('Load or update countries in db. This command does not delete existing countries, '. 'but will update names according to available languages'); } - + /* * (non-PHPdoc) * @see \Symfony\Component\Console\Command\Command::execute() @@ -54,43 +54,44 @@ class LoadCountriesCommand extends Command { $countries = static::prepareCountryList($this->availableLanguages); $em = $this->entityManager; - + foreach($countries as $country) { $countryStored = $em->getRepository('ChillMainBundle:Country') ->findOneBy(array('countryCode' => $country->getCountryCode())); - + if (NULL === $countryStored) { $em->persist($country); } else { $countryStored->setName($country->getName()); } } - + $em->flush(); } public static function prepareCountryList($languages) { $regionBundle = Intl::getRegionBundle(); - + $countries = []; + foreach ($languages as $language) { $countries[$language] = $regionBundle->getCountryNames($language); } - + $countryEntities = array(); - + foreach ($countries[$languages[0]] as $countryCode => $name) { $names = array(); - + foreach ($languages as $language) { $names[$language] = $countries[$language][$countryCode]; } - + $country = new \Chill\MainBundle\Entity\Country(); $country->setName($names)->setCountryCode($countryCode); $countryEntities[] = $country; } - + return $countryEntities; } } diff --git a/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php b/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php index a048b6b9f..e9e679392 100644 --- a/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php +++ b/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadLanguages.php @@ -24,26 +24,26 @@ class LoadLanguages extends AbstractFixture implements ContainerAwareInterface, // Array of ancien languages (to exclude) private $ancientToExclude = ["ang", "egy", "fro", "goh", "grc", "la", "non", "peo", "pro", "sga", "dum", "enm", "frm", "gmh", "mga", "akk", "phn", "zxx", "got", "und"]; - + /** - * + * * @var ContainerInterface */ private $container; - + public function setContainer(ContainerInterface $container = null) { $this->container = $container; } - + public function getOrder() { return 10; } - + public function load(ObjectManager $manager) { - + echo "loading languages... \n"; - + foreach (Intl::getLanguageBundle()->getLanguageNames() as $code => $language) { if ( !in_array($code, $this->regionalVersionToInclude) @@ -58,23 +58,24 @@ class LoadLanguages extends AbstractFixture implements ContainerAwareInterface, $manager->persist($lang); } } - + $manager->flush(); } - + /** - * prepare names for languages - * - * @param string $languageCode + * Prepare names for languages. + * * @return string[] languages name indexed by available language code */ - private function prepareName($languageCode) { + private function prepareName(string $languageCode): array { + $names = []; + foreach ($this->container->getParameter('chill_main.available_languages') as $lang) { $names[$lang] = Intl::getLanguageBundle()->getLanguageName($languageCode); } - + return $names; } - + } diff --git a/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/CenterTransformer.php b/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/CenterTransformer.php index c088edeba..581a40bcc 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/CenterTransformer.php +++ b/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/CenterTransformer.php @@ -51,8 +51,10 @@ class CenterTransformer implements DataTransformerInterface } } + $ids = []; + if ($this->multiple) { - $ids = \explode(',', $id); + $ids = explode(',', $id); } else { $ids[] = (int) $id; } @@ -68,9 +70,9 @@ class CenterTransformer implements DataTransformerInterface if ($this->multiple) { return new ArrayCollection($centers); - } else { - return $centers[0]; } + + return $centers[0]; } public function transform($center) diff --git a/src/Bundle/ChillMainBundle/Search/SearchApi.php b/src/Bundle/ChillMainBundle/Search/SearchApi.php index d59193114..0a7aa1737 100644 --- a/src/Bundle/ChillMainBundle/Search/SearchApi.php +++ b/src/Bundle/ChillMainBundle/Search/SearchApi.php @@ -139,7 +139,7 @@ class SearchApi return $nq->getResult(); } - private function prepareProviders($rawResults) + private function prepareProviders(array $rawResults) { $metadatas = []; foreach ($rawResults as $r) { @@ -156,8 +156,10 @@ class SearchApi } } - private function buildResults($rawResults) + private function buildResults(array $rawResults): array { + $items = []; + foreach ($rawResults as $r) { foreach ($this->providers as $k => $p) { if ($p->supportsResult($r['key'], $r['metadata'])) { @@ -170,6 +172,6 @@ class SearchApi } } - return $items ?? []; + return $items; } } diff --git a/src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php b/src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php index ee628e014..cd37ea989 100644 --- a/src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php +++ b/src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php @@ -1,5 +1,7 @@ getId(); - $data['text'] = $address->isNoAddress() ? '' : $address->getStreetNumber().', '.$address->getStreet(); - $data['street'] = $address->getStreet(); - $data['streetNumber'] = $address->getStreetNumber(); - $data['postcode']['id'] = $address->getPostCode()->getId(); - $data['postcode']['name'] = $address->getPostCode()->getName(); - $data['postcode']['code'] = $address->getPostCode()->getCode(); - $data['country']['id'] = $address->getPostCode()->getCountry()->getId(); - $data['country']['name'] = $address->getPostCode()->getCountry()->getName(); - $data['country']['code'] = $address->getPostCode()->getCountry()->getCountryCode(); - $data['floor'] = $address->getFloor(); - $data['corridor'] = $address->getCorridor(); - $data['steps'] = $address->getSteps(); - $data['flat'] = $address->getFlat(); - $data['buildingName'] = $address->getBuildingName(); - $data['distribution'] = $address->getDistribution(); - $data['extra'] = $address->getExtra(); - $data['validFrom'] = $address->getValidFrom(); - $data['validTo'] = $address->getValidTo(); - $data['addressReference'] = $this->normalizer->normalize($address->getAddressReference(), $format, [ - AbstractNormalizer::GROUPS => ['read'] - ]); + $data = [ + 'address_id' => $address->getId(), + 'text' => $address->isNoAddress() ? '' : $address->getStreetNumber().', '.$address->getStreet(), + 'street' => $address->getStreet(), + 'streetNumber' => $address->getStreetNumber(), + 'postcode' => [ + 'id' => $address->getPostCode()->getId(), + 'name' => $address->getPostCode()->getName(), + 'code' => $address->getPostCode()->getCode(), + ], + 'country' => [ + 'id' => $address->getPostCode()->getCountry()->getId(), + 'name' => $address->getPostCode()->getCountry()->getName(), + 'code' => $address->getPostCode()->getCountry()->getCountryCode(), + ], + 'floor' => $address->getFloor(), + 'corridor' => $address->getCorridor(), + 'steps' => $address->getSteps(), + 'flat' => $address->getFlat(), + 'buildingName' => $address->getBuildingName(), + 'distribution' => $address->getDistribution(), + 'extra' => $address->getExtra(), + 'validFrom' => $address->getValidFrom(), + 'validTo' => $address->getValidTo(), + 'addressReference' => $this->normalizer->normalize( + $address->getAddressReference(), + $format, + [AbstractNormalizer::GROUPS => ['read']] + ), + ]; return $data; } diff --git a/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php b/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php index d3f513c54..a763a5675 100644 --- a/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php +++ b/src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php @@ -9,32 +9,30 @@ use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait; class CollectionNormalizer implements NormalizerInterface, NormalizerAwareInterface { - use NormalizerAwareTrait; + use NormalizerAwareTrait; + + /** + * @param Collection $collection + */ + public function normalize($collection, string $format = null, array $context = []) + { + $paginator = $collection->getPaginator(); + + return [ + 'count' => $paginator->getTotalItems(), + 'pagination' => [ + 'first' => $paginator->getCurrentPageFirstItemNumber(), + 'items_per_page' => $paginator->getItemsPerPage(), + 'next' => $paginator->hasNextPage() ? $paginator->getNextPage()->generateUrl() : null, + 'previous' => $paginator->hasPreviousPage() ? $paginator->getPreviousPage()->generateUrl() : null, + 'more' => $paginator->hasNextPage(), + ], + 'results' => $this->normalizer->normalize($collection->getItems(), $format, $context), + ]; + } public function supportsNormalization($data, string $format = null): bool { return $data instanceof Collection; } - - public function normalize($collection, string $format = null, array $context = []) - { - /** @var $collection Collection */ - $paginator = $collection->getPaginator(); - - $data['count'] = $paginator->getTotalItems(); - $pagination['first'] = $paginator->getCurrentPageFirstItemNumber(); - $pagination['items_per_page'] = $paginator->getItemsPerPage(); - $pagination['next'] = $paginator->hasNextPage() ? - $paginator->getNextPage()->generateUrl() : null; - $pagination['previous'] = $paginator->hasPreviousPage() ? - $paginator->getPreviousPage()->generateUrl() : null; - $pagination['more'] = $paginator->hasNextPage(); - $data['pagination'] = $pagination; - - // normalize results - $data['results'] = $this->normalizer->normalize($collection->getItems(), - $format, $context); - - return $data; - } } diff --git a/src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php b/src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php index e2e266a70..48afde21b 100644 --- a/src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php +++ b/src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php @@ -291,11 +291,12 @@ class TimelineBuilder implements ContainerAwareInterface $entitiesByType[$result['type']][$result['id']], //the entity $context, $args); - $timelineEntry['date'] = new \DateTime($result['date']); - $timelineEntry['template'] = $data['template']; - $timelineEntry['template_data'] = $data['template_data']; - $timelineEntries[] = $timelineEntry; + $timelineEntries[] = [ + 'date' => new \DateTime($result['date']), + 'template' => $data['template'], + 'template_data' => $data['template_data'] + ]; } return $this->container->get('templating') diff --git a/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php b/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php index 35f596295..8922a9bb8 100644 --- a/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php +++ b/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php @@ -959,6 +959,8 @@ EOF $table->setHeaders(array('#', 'label', 'value')); $i = 0; + $matchingTableRowAnswer = []; + foreach($answers as $key => $answer) { $table->addRow(array( $i, $answer, $key diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHousehold.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHousehold.php index 24a5bbb7f..14420ed88 100644 --- a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHousehold.php +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHousehold.php @@ -161,8 +161,10 @@ class LoadHousehold extends Fixture implements DependentFixtureInterface \shuffle($this->personIds); } - private function getRandomPersons(int $min, int $max) + private function getRandomPersons(int $min, int $max): array { + $persons = []; + $nb = \random_int($min, $max); for ($i=0; $i < $nb; $i++) { @@ -172,7 +174,7 @@ class LoadHousehold extends Fixture implements DependentFixtureInterface ; } - return $persons ?? []; + return $persons; } public function getDependencies() diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php index 1deefe993..aa2e56121 100644 --- a/src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php @@ -143,6 +143,8 @@ final class CountryOfBirthAggregator implements AggregatorInterface, ExportEleme public function getLabels($key, array $values, $data) { + $labels = []; + if ($data['group_by_level'] === 'country') { $qb = $this->countriesRepository->createQueryBuilder('c'); @@ -153,15 +155,17 @@ final class CountryOfBirthAggregator implements AggregatorInterface, ExportEleme ->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR); // initialize array and add blank key for null values - $labels[''] = $this->translator->trans('without data'); - $labels['_header'] = $this->translator->trans('Country of birth'); + $labels = [ + '' => $this->translator->trans('without data'), + '_header' => $this->translator->trans('Country of birth'), + ]; + foreach($countries as $row) { $labels[$row['c_countryCode']] = $this->translatableStringHelper->localize($row['c_name']); } + } - - } elseif ($data['group_by_level'] === 'continent') { - + if ($data['group_by_level'] === 'continent') { $labels = array( 'EU' => $this->translator->trans('Europe'), 'AS' => $this->translator->trans('Asia'), @@ -170,13 +174,12 @@ final class CountryOfBirthAggregator implements AggregatorInterface, ExportEleme 'SA' => $this->translator->trans('South America'), 'NA' => $this->translator->trans('North America'), 'OC' => $this->translator->trans('Oceania'), - '' => $this->translator->trans('without data'), + '' => $this->translator->trans('without data'), '_header' => $this->translator->trans('Continent of birth') ); } - - return function($value) use ($labels) { + return function(string $value) use ($labels): string { return $labels[$value]; }; diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php index e856bedc6..97e7d4e4a 100644 --- a/src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php @@ -144,6 +144,8 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV public function getLabels($key, array $values, $data) { + $labels = []; + if ($data['group_by_level'] === 'country') { $qb = $this->countriesRepository->createQueryBuilder('c'); @@ -154,15 +156,17 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV ->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR); // initialize array and add blank key for null values - $labels[''] = $this->translator->trans('without data'); - $labels['_header'] = $this->translator->trans('Nationality'); + $labels = [ + '' => $this->translator->trans('without data'), + '_header' => $this->translator->trans('Nationality'), + ]; + foreach($countries as $row) { $labels[$row['c_countryCode']] = $this->translatableStringHelper->localize($row['c_name']); } + } - - } elseif ($data['group_by_level'] === 'continent') { - + if ($data['group_by_level'] === 'continent') { $labels = array( 'EU' => $this->translator->trans('Europe'), 'AS' => $this->translator->trans('Asia'), @@ -176,8 +180,7 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV ); } - - return function($value) use ($labels) { + return function(string $value) use ($labels): string { return $labels[$value]; }; diff --git a/src/Bundle/ChillPersonBundle/Search/PersonSearch.php b/src/Bundle/ChillPersonBundle/Search/PersonSearch.php index f62b90006..7fff34d7d 100644 --- a/src/Bundle/ChillPersonBundle/Search/PersonSearch.php +++ b/src/Bundle/ChillPersonBundle/Search/PersonSearch.php @@ -263,8 +263,9 @@ class PersonSearch extends AbstractSearch implements HasAdvancedSearchFormInterf public function convertTermsToFormData(array $terms) { - foreach(['firstname', 'lastname', 'gender', '_default'] - as $key) { + $data = []; + + foreach(['firstname', 'lastname', 'gender', '_default'] as $key) { $data[$key] = $terms[$key] ?? null; } diff --git a/src/Bundle/ChillPersonBundle/Templating/Entity/SocialActionRender.php b/src/Bundle/ChillPersonBundle/Templating/Entity/SocialActionRender.php index 7da1a8cad..c68e300cf 100644 --- a/src/Bundle/ChillPersonBundle/Templating/Entity/SocialActionRender.php +++ b/src/Bundle/ChillPersonBundle/Templating/Entity/SocialActionRender.php @@ -38,7 +38,7 @@ class SocialActionRender implements ChillEntityRenderInterface { /** @var $socialAction SocialAction */ $options = \array_merge(self::DEFAULT_ARGS, $options); - $titles[] = $this->translatableStringHelper->localize($socialAction->getTitle()); + $titles = [$this->translatableStringHelper->localize($socialAction->getTitle())]; while ($socialAction->hasParent()) { $socialAction = $socialAction->getParent(); diff --git a/src/Bundle/ChillPersonBundle/Templating/Entity/SocialIssueRender.php b/src/Bundle/ChillPersonBundle/Templating/Entity/SocialIssueRender.php index 5ed80182c..80254d989 100644 --- a/src/Bundle/ChillPersonBundle/Templating/Entity/SocialIssueRender.php +++ b/src/Bundle/ChillPersonBundle/Templating/Entity/SocialIssueRender.php @@ -38,8 +38,7 @@ final class SocialIssueRender implements ChillEntityRenderInterface /** @var $socialIssue SocialIssue */ $options = array_merge(self::DEFAULT_ARGS, $options); - $titles[] = $this->translatableStringHelper - ->localize($socialIssue->getTitle()); + $titles = [$this->translatableStringHelper->localize($socialIssue->getTitle())]; // loop to parent, until root while ($socialIssue->hasParent()) { diff --git a/src/Bundle/ChillReportBundle/Export/Export/ReportList.php b/src/Bundle/ChillReportBundle/Export/Export/ReportList.php index 583db8f4b..9524f860a 100644 --- a/src/Bundle/ChillReportBundle/Export/Export/ReportList.php +++ b/src/Bundle/ChillReportBundle/Export/Export/ReportList.php @@ -1,6 +1,6 @@ */ @@ -38,27 +38,27 @@ class ReportList implements ListInterface, ExportElementValidatedInterface * @var CustomFieldsGroup */ protected $customfieldsGroup; - + /** * * @var TranslatableStringHelper */ protected $translatableStringHelper; - + /** * * @var TranslatorInterface */ protected $translator; - + /** * * @var CustomFieldProvider */ protected $customFieldProvider; - + protected $em; - + protected $fields = array( 'person_id', 'person_firstName', 'person_lastName', 'person_birthdate', 'person_placeOfBirth', 'person_gender', 'person_memo', 'person_email', 'person_phonenumber', @@ -67,11 +67,11 @@ class ReportList implements ListInterface, ExportElementValidatedInterface 'person_address_postcode_code', 'person_address_country_name', 'person_address_country_code', 'report_id', 'report_user', 'report_date', 'report_scope' ); - + protected $slugs = []; - + function __construct( - CustomFieldsGroup $customfieldsGroup, + CustomFieldsGroup $customfieldsGroup, TranslatableStringHelper $translatableStringHelper, TranslatorInterface $translator, CustomFieldProvider $customFieldProvider, @@ -84,18 +84,18 @@ class ReportList implements ListInterface, ExportElementValidatedInterface $this->em = $em; } - + public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder) { $choices = array_combine($this->fields, $this->fields); - + foreach ($this->getCustomFields() as $cf) { $choices - [$this->translatableStringHelper->localize($cf->getName())] - = + [$this->translatableStringHelper->localize($cf->getName())] + = $cf->getSlug(); } - + // Add a checkbox to select fields $builder->add('fields', ChoiceType::class, array( 'multiple' => true, @@ -133,7 +133,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface } ))] )); - + // add a date field for addresses $builder->add('address_date', ChillDateType::class, array( 'label' => "Address valid at this date", @@ -142,14 +142,14 @@ class ReportList implements ListInterface, ExportElementValidatedInterface 'block_name' => 'list_export_form_address_date' )); } - + public function validateForm($data, ExecutionContextInterface $context) { // get the field starting with address_ $addressFields = array_filter(function($el) { return substr($el, 0, 8) === 'address_'; }, $this->fields); - + // check if there is one field starting with address in data if (count(array_intersect($data['fields'], $addressFields)) > 0) { // if a field address is checked, the date must not be empty @@ -161,10 +161,10 @@ class ReportList implements ListInterface, ExportElementValidatedInterface } } } - + /** * Get custom fields associated with person - * + * * @return CustomField[] */ private function getCustomFields() @@ -184,7 +184,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface { return $this->translator->trans( "Generate list of report '%type%'", - [ + [ '%type%' => $this->translatableStringHelper->localize($this->customfieldsGroup->getName()) ] ); @@ -192,13 +192,12 @@ class ReportList implements ListInterface, ExportElementValidatedInterface /** * {@inheritDoc} - * + * * @param type $key * @param array $values * @param type $data - * @return type */ - public function getLabels($key, array $values, $data) + public function getLabels($key, array $values, $data): \Closure { switch ($key) { case 'person_birthdate': @@ -206,27 +205,27 @@ class ReportList implements ListInterface, ExportElementValidatedInterface // for birthdate or report date, we have to transform the string into a date // to format the date correctly. return function($value) use ($key) { - if ($value === '_header') { - return $key === 'person_birthdate' ? 'birthdate' : 'report_date'; + if ($value === '_header') { + return $key === 'person_birthdate' ? 'birthdate' : 'report_date'; } - + if (empty($value)) { return ""; } - + if ($key === 'person_birthdate') { $date = \DateTime::createFromFormat('Y-m-d', $value); } else { $date = \DateTime::createFromFormat('Y-m-d H:i:s', $value); } // check that the creation could occurs. - if ($date === false) { + if ($date === false) { throw new \Exception(sprintf("The value %s could " . "not be converted to %s", $value, \DateTime::class)); } - - return $date->format('d-m-Y'); + + return $date->format('d-m-Y'); }; case 'report_scope': $qb = $this->em->getRepository(Scope::class) @@ -236,17 +235,18 @@ class ReportList implements ListInterface, ExportElementValidatedInterface ->where($qb->expr()->in('s.id', $values)) ; $rows = $qb->getQuery()->getResult(Query::HYDRATE_ARRAY); - + + $scopes = []; + foreach($rows as $row) { - $scopes[$row['id']] = $this->translatableStringHelper - ->localize($row['name']); + $scopes[$row['id']] = $this->translatableStringHelper->localize($row['name']); } - - return function($value) use ($scopes) { + + return function($value) use ($scopes): string { if ($value === '_header') { return 'circle'; } - + return $scopes[$value]; }; case 'report_user': @@ -257,71 +257,73 @@ class ReportList implements ListInterface, ExportElementValidatedInterface ->where($qb->expr()->in('u.id', $values)) ; $rows = $qb->getQuery()->getResult(Query::HYDRATE_ARRAY); - + + $users = []; + foreach($rows as $row) { $users[$row['id']] = $row['username']; } - - return function($value) use ($users) { + + return function($value) use ($users): string { if ($value === '_header') { return 'user'; } - + return $users[$value]; }; case 'person_gender' : // for gender, we have to translate men/women statement return function($value) { if ($value === '_header') { return 'gender'; } - + return $this->translator->trans($value); }; case 'person_countryOfBirth': case 'person_nationality': $countryRepository = $this->em ->getRepository('ChillMainBundle:Country'); - + // load all countries in a single query $countryRepository->findBy(array('countryCode' => $values)); - + return function($value) use ($key, $countryRepository) { if ($value === '_header') { return \strtolower($key); } - - if ($value === NULL) { + + if ($value === NULL) { return $this->translator->trans('no data'); } - + $country = $countryRepository->find($value); - + return $this->translatableStringHelper->localize( $country->getName()); }; case 'person_address_country_name': return function($value) use ($key) { if ($value === '_header') { return \strtolower($key); } - + if ($value === NULL) { return ''; } - + return $this->translatableStringHelper->localize(json_decode($value, true)); }; default: // for fields which are associated with person if (in_array($key, $this->fields)) { return function($value) use ($key) { - if ($value === '_header') { return \strtolower($key); } + if ($value === '_header') { return \strtolower($key); } - return $value; + return $value; }; } else { return $this->getLabelForCustomField($key, $values, $data); } } - + } - + private function getLabelForCustomField($key, array $values, $data) { // for fields which are custom fields @@ -329,38 +331,38 @@ class ReportList implements ListInterface, ExportElementValidatedInterface $cf = $this->em ->getRepository(CustomField::class) ->findOneBy(array('slug' => $this->DQLToSlug($key))); - + $cfType = $this->customFieldProvider->getCustomFieldByType($cf->getType()); $defaultFunction = function($value) use ($cf) { if ($value === '_header') { - return $this->translatableStringHelper->localize($cf->getName()); + return $this->translatableStringHelper->localize($cf->getName()); } return $this->customFieldProvider ->getCustomFieldByType($cf->getType()) ->render(json_decode($value, true), $cf, 'csv'); }; - + if ($cfType instanceof CustomFieldChoice and $cfType->isMultiple($cf)) { return function($value) use ($cf, $cfType, $key) { $slugChoice = $this->extractInfosFromSlug($key)['additionnalInfos']['choiceSlug']; $decoded = \json_decode($value, true); - + if ($value === '_header') { - + $label = $cfType->getChoices($cf)[$slugChoice]; - + return $this->translatableStringHelper->localize($cf->getName()) .' | '.$label; } - + if ($slugChoice === '_other' and $cfType->isChecked($cf, $choiceSlug, $decoded)) { return $cfType->extractOtherValue($cf, $decoded); } else { return $cfType->isChecked($cf, $slugChoice, $decoded); } }; - + } else { return $defaultFunction; } @@ -369,44 +371,44 @@ class ReportList implements ListInterface, ExportElementValidatedInterface public function getQueryKeys($data) { $fields = array(); - + foreach ($data['fields'] as $key) { if (in_array($key, $this->fields)) { $fields[] = $key; } } - + // add the key from slugs and return return \array_merge($fields, \array_keys($this->slugs)); } - + /** * clean a slug to be usable by DQL - * - * @param string $slugsanitize + * + * @param string $slugsanitize * @param string $type the type of the customfield, if required (currently only for choices) * @return string */ private function slugToDQL($slug, $type = "default", array $additionalInfos = []) { $uid = 'slug_'.\uniqid(); - + $this->slugs[$uid] = [ 'slug' => $slug, 'type' => $type, 'additionnalInfos' => $additionalInfos ]; - + return $uid; } - + private function DQLToSlug($cleanedSlug) - { + { return $this->slugs[$cleanedSlug]['slug']; } - + /** - * + * * @param type $cleanedSlug * @return an array with keys = 'slug', 'type', 'additionnalInfo' */ @@ -424,7 +426,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface { return $this->translator->trans( "List for report '%type%'", - [ + [ '%type%' => $this->translatableStringHelper->localize($this->customfieldsGroup->getName()) ] ); @@ -438,22 +440,22 @@ class ReportList implements ListInterface, ExportElementValidatedInterface public function initiateQuery(array $requiredModifiers, array $acl, array $data = array()) { $centers = array_map(function($el) { return $el['center']; }, $acl); - + // throw an error if any fields are present if (!\array_key_exists('fields', $data)) { throw new \Doctrine\DBAL\Exception\InvalidArgumentException("any fields " . "have been checked"); } - + $qb = $this->em->createQueryBuilder(); - + // process fields which are not custom fields foreach ($this->fields as $f) { // do not add fields which are not selected if (!\in_array($f, $data['fields'])) { continue; } - + // add a column to the query for each field switch ($f) { case 'person_countryOfBirth': @@ -470,11 +472,11 @@ class ReportList implements ListInterface, ExportElementValidatedInterface case 'person_address_country_code': // remove 'person_' $suffix = \substr($f, 7); - + $qb->addSelect(sprintf( 'GET_PERSON_ADDRESS_%s(person.id, :address_date) AS %s', // get the part after address_ - strtoupper(substr($suffix, 8)), + strtoupper(substr($suffix, 8)), $f)); $qb->setParameter('address_date', $data['address_date']); break; @@ -487,7 +489,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface default: $prefix = \substr($f, 0, 7); $suffix = \substr($f, 7); - + switch($prefix) { case 'person_': $qb->addSelect(sprintf('person.%s as %s', $suffix, $f)); @@ -502,22 +504,22 @@ class ReportList implements ListInterface, ExportElementValidatedInterface } } - + // process fields which are custom fields foreach ($this->getCustomFields() as $cf) { // do not add custom fields which are not selected if (!\in_array($cf->getSlug(), $data['fields'])) { continue; } - + $cfType = $this->customFieldProvider->getCustomFieldByType($cf->getType()); - + // if is multiple, split into multiple columns if ($cfType instanceof CustomFieldChoice and $cfType->isMultiple($cf)) { foreach($cfType->getChoices($cf) as $choiceSlug => $label) { $slug = $this->slugToDQL($cf->getSlug(), 'choice', [ 'choiceSlug' => $choiceSlug ]); $qb->addSelect( - sprintf('GET_JSON_FIELD_BY_KEY(report.cFData, :slug%s) AS %s', + sprintf('GET_JSON_FIELD_BY_KEY(report.cFData, :slug%s) AS %s', $slug, $slug)); $qb->setParameter(sprintf('slug%s', $slug), $cf->getSlug()); } @@ -525,12 +527,12 @@ class ReportList implements ListInterface, ExportElementValidatedInterface // not multiple, add a single column $slug = $this->slugToDQL($cf->getSlug()); $qb->addSelect( - sprintf('GET_JSON_FIELD_BY_KEY(report.cFData, :slug%s) AS %s', + sprintf('GET_JSON_FIELD_BY_KEY(report.cFData, :slug%s) AS %s', $slug, $slug)); $qb->setParameter(sprintf('slug%s', $slug), $cf->getSlug()); } } - + $qb ->from(Report::class, 'report') ->leftJoin('report.person', 'person') @@ -540,7 +542,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface ->andWhere('center IN (:authorized_centers)') ->setParameter('authorized_centers', $centers); ; - + return $qb; } diff --git a/src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php b/src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php index fe5a8f78d..20e6a5480 100644 --- a/src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php +++ b/src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php @@ -38,18 +38,18 @@ use Chill\MainBundle\Timeline\TimelineSingleQuery; class TaskLifeCycleEventTimelineProvider implements TimelineProviderInterface { protected EntityManagerInterface $em; - + protected Registry $registry; - + protected AuthorizationHelper $authorizationHelper; protected Security $security; - - + + const TYPE = 'chill_task.transition'; - + public function __construct( - EntityManagerInterface $em, + EntityManagerInterface $em, Registry $registry, AuthorizationHelper $authorizationHelper, Security $security @@ -64,7 +64,7 @@ class TaskLifeCycleEventTimelineProvider implements TimelineProviderInterface { $metadata = $this->em ->getClassMetadata(SingleTaskPlaceEvent::class); - + switch ($context) { case 'person': [ $where, $parameters ] = $this->getWhereClauseForPerson($args['person']); @@ -157,7 +157,7 @@ class TaskLifeCycleEventTimelineProvider implements TimelineProviderInterface // the parameters - $parameters = []; + $parameters = $circleIds = []; // the clause that we will fill $clause = "{person}.{person_id} = ? AND {task}.{circle} IN ({circle_ids})"; @@ -212,27 +212,27 @@ class TaskLifeCycleEventTimelineProvider implements TimelineProviderInterface '{single_task}' => sprintf('%s.%s', $singleTask->getSchemaName(), $singleTask->getTableName()), '{single_task_event}' => sprintf('%s.%s', $taskEvent->getSchemaName(), $taskEvent->getTableName()), '{task_pk}' => $singleTask->getColumnName('id'), - '{event_fk_task}' => $eventFkTask, + '{event_fk_task}' => $eventFkTask, '{person}' => $person->getTableName(), '{task_person_fk}' => $taskFkPerson, - '{person_pk}' => $personPk + '{person_pk}' => $personPk ] ); - } - - public function getEntities(array $ids) + } + + public function getEntities(array $ids) { $events = $this->em ->getRepository(SingleTaskPlaceEvent::class) ->findBy([ 'id' => $ids ]) ; - + return \array_combine( \array_map(function($e) { return $e->getId(); }, $events ), $events ); - } - + } + public function getEntityTemplate($entity, $context, array $args) { $workflow = $this->registry->get($entity->getTask(), @@ -242,22 +242,22 @@ class TaskLifeCycleEventTimelineProvider implements TimelineProviderInterface // `Notice: Undefined property: Chill\TaskBundle\Entity\Task\SingleTaskPlaceEvent::$getData` // * fix syntax error on $entity->getData['workflow'] // * return null if not set - + $transition = $this->getTransitionByName($entity->getTransition(), $workflow); - + return [ 'template' => 'ChillTaskBundle:Timeline:single_task_transition.html.twig', - 'template_data' => [ + 'template_data' => [ 'context' => $context, 'event' => $entity, 'task' => $entity->getTask(), 'transition' => $transition ] ]; - } - + } + /** - * + * * @param string $name * @param Workflow $workflow * @return \Symfony\Component\Workflow\Transition @@ -270,7 +270,7 @@ class TaskLifeCycleEventTimelineProvider implements TimelineProviderInterface } } } - + public function supportsType($type): bool { return $type === self::TYPE; diff --git a/src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php b/src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php index c62fdb31b..fb4456756 100644 --- a/src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php +++ b/src/Bundle/ChillThirdPartyBundle/Serializer/Normalizer/ThirdPartyNormalizer.php @@ -1,5 +1,7 @@ thirdPartyRender = $thirdPartyRender; } + /** + * @param ThirdParty $thirdParty + */ public function normalize($thirdParty, string $format = null, array $context = []) { - /** @var $thirdParty ThirdParty */ - $data['type'] = 'thirdparty'; - $data['text'] = $this->thirdPartyRender->renderString($thirdParty, []); - $data['id'] = $thirdParty->getId(); - $data['kind'] = $thirdParty->getKind(); - $data['address'] = $this->normalizer->normalize($thirdParty->getAddress(), $format, - [ 'address_rendering' => 'short' ]); - $data['phonenumber'] = $thirdParty->getTelephone(); - $data['email'] = $thirdParty->getEmail(); - $data['isChild'] = $thirdParty->isChild(); - $data['parent'] = $this->normalizer->normalize($thirdParty->getParent(), $format, $context); - $data['civility'] = $this->normalizer->normalize($thirdParty->getCivility(), $format, $context); - $data['contactDataAnonymous'] = $thirdParty->isContactDataAnonymous(); - - return $data; + return [ + 'type' => 'thirdparty', + 'text' => $this->thirdPartyRender->renderString($thirdParty, []), + 'id' => $thirdParty->getId(), + 'kind' => $thirdParty->getKind(), + 'address' => $this->normalizer->normalize($thirdParty->getAddress(), $format, [ 'address_rendering' => 'short' ]), + 'phonenumber' => $thirdParty->getTelephone(), + 'email' => $thirdParty->getEmail(), + 'isChild' => $thirdParty->isChild(), + 'parent' => $this->normalizer->normalize($thirdParty->getParent(), $format, $context), + 'civility' => $this->normalizer->normalize($thirdParty->getCivility(), $format, $context), + 'contactDataAnonymous' => $thirdParty->isContactDataAnonymous(), + ]; } public function supportsNormalization($data, string $format = null)