mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-20 22:53:49 +00:00
117 lines
4.6 KiB
PHP
117 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace Chill\PersonBundle\Serializer\Normalizer;
|
|
|
|
use Chill\DocGeneratorBundle\Serializer\Helper\NormalizeNullValueHelper;
|
|
use Chill\MainBundle\Templating\TranslatableStringHelper;
|
|
use Chill\PersonBundle\Entity\Person;
|
|
use Chill\PersonBundle\Entity\PersonAltName;
|
|
use Chill\PersonBundle\Templating\Entity\PersonRender;
|
|
use Symfony\Component\Serializer\Exception\CircularReferenceException;
|
|
use Symfony\Component\Serializer\Exception\ExceptionInterface;
|
|
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
|
|
use Symfony\Component\Serializer\Exception\LogicException;
|
|
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
|
|
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
|
|
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
|
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
|
|
|
class PersonDocGenNormalizer implements
|
|
ContextAwareNormalizerInterface,
|
|
NormalizerAwareInterface
|
|
{
|
|
|
|
use NormalizerAwareTrait;
|
|
|
|
private PersonRender $personRender;
|
|
private TranslatorInterface $translator;
|
|
private TranslatableStringHelper $translatableStringHelper;
|
|
|
|
/**
|
|
* @param PersonRender $personRender
|
|
* @param TranslatorInterface $translator
|
|
* @param TranslatableStringHelper $translatableStringHelper
|
|
*/
|
|
public function __construct(
|
|
PersonRender $personRender,
|
|
TranslatorInterface $translator,
|
|
TranslatableStringHelper $translatableStringHelper
|
|
) {
|
|
$this->personRender = $personRender;
|
|
$this->translator = $translator;
|
|
$this->translatableStringHelper = $translatableStringHelper;
|
|
}
|
|
|
|
public function normalize($person, string $format = null, array $context = [])
|
|
{
|
|
/** @var Person $person */
|
|
|
|
$dateContext = $context;
|
|
$dateContext['docgen:expects'] = \DateTimeInterface::class;
|
|
|
|
if (null === $person) {
|
|
return $this->normalizeNullValue($format, $context);
|
|
}
|
|
|
|
return [
|
|
'firstname' => $person->getFirstName(),
|
|
'lastname' => $person->getLastName(),
|
|
'altNames' => \implode(
|
|
', ',
|
|
\array_map(
|
|
function (PersonAltName $altName) {
|
|
return $altName->getLabel();
|
|
},
|
|
$person->getAltNames()->toArray()
|
|
)
|
|
),
|
|
'text' => $this->personRender->renderString($person, []),
|
|
'birthdate' => $this->normalizer->normalize($person->getBirthdate(), $format, $dateContext),
|
|
'deathdate' => $this->normalizer->normalize($person->getDeathdate(), $format, $dateContext),
|
|
'gender' => $this->translator->trans($person->getGender()),
|
|
'maritalStatus' => null !== ($ms = $person->getMaritalStatus()) ? $this->translatableStringHelper->localize($ms->getName()) : '',
|
|
'maritalStatusDate' => $this->normalizer->normalize($person->getMaritalStatusDate(), $format, $dateContext),
|
|
'email' => $person->getEmail(),
|
|
'firstPhoneNumber' => $person->getPhonenumber() ?? $person->getMobilenumber(),
|
|
'fixPhoneNumber' => $person->getPhonenumber(),
|
|
'mobilePhoneNumber' => $person->getMobilenumber(),
|
|
'nationality' => null !== ($c = $person->getNationality()) ? $this->translatableStringHelper->localize($c->getName()) : '',
|
|
'placeOfBirth' => $person->getPlaceOfBirth(),
|
|
'memo' => $person->getMemo(),
|
|
'numberOfChildren' => (string) $person->getNumberOfChildren(),
|
|
];
|
|
}
|
|
|
|
private function normalizeNullValue(string $format, array $context)
|
|
{
|
|
$normalizer = new NormalizeNullValueHelper($this->normalizer);
|
|
|
|
$attributes = [
|
|
'firstname', 'lastname', 'altNames', 'text',
|
|
'birthdate' => \DateTimeInterface::class,
|
|
'deathdate' => \DateTimeInterface::class,
|
|
'gender', 'maritalStatus',
|
|
'maritalStatusDate' => \DateTimeInterface::class,
|
|
'email', 'firstPhoneNumber', 'fixPhoneNumber', 'mobilePhoneNumber', 'nationality',
|
|
'placeOfBirth', 'memo', 'numberOfChildren'
|
|
];
|
|
|
|
return $normalizer->normalize($attributes, $format, $context);
|
|
}
|
|
|
|
public function supportsNormalization($data, string $format = null, array $context = [])
|
|
{
|
|
if ($format !== 'docgen') {
|
|
return false;
|
|
}
|
|
|
|
return
|
|
$data instanceof Person
|
|
|| (
|
|
\array_key_exists('docgen:expects', $context)
|
|
&& $context['docgen:expects'] === Person::class
|
|
);
|
|
}
|
|
}
|