ease docgen normlisation for resources

This commit is contained in:
2022-03-22 22:37:19 +01:00
parent 89e7eb85ff
commit c5ffca22ff
3 changed files with 45 additions and 13 deletions

View File

@@ -18,7 +18,6 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Entity\Household\Household;
use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\PersonAltName;
use Chill\PersonBundle\Repository\PersonResourceRepository;
use Chill\PersonBundle\Repository\Relationships\RelationshipRepository;
use Chill\PersonBundle\Templating\Entity\PersonRenderInterface;
use DateTimeInterface;
@@ -32,6 +31,8 @@ use Symfony\Contracts\Translation\TranslatorInterface;
use function array_map;
use function implode;
use function in_array;
use function is_string;
class PersonDocGenNormalizer implements
ContextAwareNormalizerInterface,
@@ -41,8 +42,6 @@ class PersonDocGenNormalizer implements
private PersonRenderInterface $personRender;
private PersonResourceRepository $personResourceRepository;
private RelationshipRepository $relationshipRepository;
private TranslatableStringHelper $translatableStringHelper;
@@ -52,13 +51,11 @@ class PersonDocGenNormalizer implements
public function __construct(
PersonRenderInterface $personRender,
RelationshipRepository $relationshipRepository,
PersonResourceRepository $personResourceRepository,
TranslatorInterface $translator,
TranslatableStringHelper $translatableStringHelper
) {
$this->personRender = $personRender;
$this->relationshipRepository = $relationshipRepository;
$this->personResourceRepository = $personResourceRepository;
$this->translator = $translator;
$this->translatableStringHelper = $translatableStringHelper;
}
@@ -73,9 +70,9 @@ class PersonDocGenNormalizer implements
'docgen:expects' => Person\PersonResource::class,
// we simplify the list of attributes for the embedded persons
AbstractNormalizer::GROUPS => ['docgen:read'],
// when a person reference the same person... take care of circulare references
// when a person reference the same person... take care of circular references
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $this->normalize(null, $format, $context);
return $this->normalizer->normalize(null, $format, $context);
},
]);
@@ -119,7 +116,7 @@ class PersonDocGenNormalizer implements
'memo' => $person->getMemo(),
'numberOfChildren' => (string) $person->getNumberOfChildren(),
'address' => $this->normalizer->normalize($person->getCurrentPersonAddress(), $format, $addressContext),
'resources' => $this->normalizer->normalize($this->personResourceRepository->findBy(['personOwner' => $person]), $format, $personResourceContext),
'resources' => $this->normalizer->normalize($person->getResources(), $format, $personResourceContext),
];
if ($context['docgen:person:with-household'] ?? false) {
@@ -163,6 +160,17 @@ class PersonDocGenNormalizer implements
);
}
private function hasGroup($context, string $group): bool
{
$groups = $context[AbstractNormalizer::GROUPS] ?? [];
if (is_string($groups)) {
$groups = [$groups];
}
return in_array($group, $groups, true);
}
private function normalizeNullValue(string $format, array $context)
{
$normalizer = new NormalizeNullValueHelper($this->normalizer, 'type', 'person');
@@ -185,6 +193,8 @@ class PersonDocGenNormalizer implements
$data = $normalizer->normalize($attributes, $format, $context);
$data['resources'] = [];
if ($context['docgen:person:with-relations'] ?? false) {
$data['relations'] = [];
}