From 7399d0aa9e22b463e676a3bcf865bb3f518d3495 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Julien=20Fastr=C3=A9?=
Date: Mon, 8 Nov 2021 12:22:11 +0000
Subject: [PATCH] Use centerResolverDispatcher to normalize a person's center
---
CHANGELOG.md | 2 ++
.../vuejs/_components/Entity/PersonRenderBox.vue | 11 ++++++++---
.../Serializer/Normalizer/PersonNormalizer.php | 13 ++++++++++---
3 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 518fcabb9..4fad2c948 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,7 @@ and this project adheres to
* refactor `AuthorizationHelper` and `UserACLAwareRepository` to fix constructor, and separate logic for parent role helper into `ParentRoleHelper`
* [main]: filter location and locationType in backend: exclude NULL names, only active and availableToUsers
* [activity]: perform client-side validation & show/hide fields in the "new location" modal
+* [person]: normalize person with CenterResolverDispatcher and handle case where center is null or multiple in PersonRenderBox
* [docstore] voter for PersonDocument and AccompanyingCourseDocument on the 2.0 way (using VoterHelperFactory)
* [docstore] add authorization check inside controller and menu
* [activity]: fix inheritance for role `ACTIVITY FULL` and add missing acl in menu
@@ -38,6 +39,7 @@ and this project adheres to
* [socialWorkAction]: display of social issue and parent issues + banner context added.
* [DBAL dependencies] Upgrade to DBAL 3.1
+
## Test releases
diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue
index 89ff6886f..eb7793839 100644
--- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue
+++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue
@@ -78,7 +78,7 @@
{{ $t('renderbox.no_data') }}
-
+
{{ person.mobilenumber }}
@@ -97,8 +97,13 @@
-
- {{ person.center.name }}
+
+
+ {{ person.center.name }}
+
+
+ {{ c.name }}
+
diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonNormalizer.php
index 2b82780c2..d0bdba9f5 100644
--- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonNormalizer.php
+++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonNormalizer.php
@@ -19,6 +19,7 @@
namespace Chill\PersonBundle\Serializer\Normalizer;
use Chill\MainBundle\Entity\Center;
+use Chill\MainBundle\Security\Resolver\CenterResolverDispatcher;
use Chill\PersonBundle\Entity\Household\Household;
use Chill\PersonBundle\Entity\Person;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
@@ -48,16 +49,22 @@ class PersonNormalizer implements
private PersonRepository $repository;
+ private CenterResolverDispatcher $centerResolverDispatcher;
+
use NormalizerAwareTrait;
use ObjectToPopulateTrait;
use DenormalizerAwareTrait;
- public function __construct(ChillEntityRenderExtension $render, PersonRepository $repository)
- {
+ public function __construct(
+ ChillEntityRenderExtension $render,
+ PersonRepository $repository,
+ CenterResolverDispatcher $centerResolverDispatcher
+ ) {
$this->render = $render;
$this->repository = $repository;
+ $this->centerResolverDispatcher = $centerResolverDispatcher;
}
public function normalize($person, string $format = null, array $context = array())
@@ -74,7 +81,7 @@ class PersonNormalizer implements
'lastName' => $person->getLastName(),
'birthdate' => $this->normalizer->normalize($person->getBirthdate()),
'deathdate' => $this->normalizer->normalize($person->getDeathdate()),
- 'center' => $this->normalizer->normalize($person->getCenter()),
+ 'center' => $this->normalizer->normalize($this->centerResolverDispatcher->resolveCenter($person)),
'phonenumber' => $person->getPhonenumber(),
'mobilenumber' => $person->getMobilenumber(),
'altNames' => $this->normalizeAltNames($person->getAltNames()),