mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-20 14:43:49 +00:00
Squashed commit of the following:
commit 977863c2dd56d5c835f2a710cad7f7d3ba42da68 Merge: 5c37b419d3eb7ffed1
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 14:45:21 2021 +0100 Merge remote-tracking branch 'origin/master' into docgen/improve-normalizer commit 5c37b419ddf0b32b9950c33042396bba1860da84 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 14:37:05 2021 +0100 fix normalization for user and type in null value commit 4469d46cdb19051fedec86bbb84e2351e6fcb72e Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 13:24:23 2021 +0100 add civility to person commit 6cf92fbbde8f4d9f2f4763ec4ee88216257040f7 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 13:19:36 2021 +0100 fix person normalization: add a isNull on not null person commit ed6087ff8fd47b80ea5e9526756fe5d032d478e3 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 13:08:46 2021 +0100 fix stan and cs issues commit 8429c334c33b3545835cbde034fccaa529c134a7 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 13:08:36 2021 +0100 fix id type commit 39ae00d172a9f29320a97abb8518b2ea48d89d9b Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sun Dec 12 12:52:41 2021 +0100 fix test and fix null or not-null value have same keys commit 312fcc44c07affa7aa60f6c5fce58f9d1c564cc3 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sat Dec 11 03:27:30 2021 +0100 improve normalization wip commit f91a29635827005fc58617dc1c9d210091372be5 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sat Dec 11 01:15:32 2021 +0100 improve normalization commit 56060e5e6a2191ef441039fdc91a01fb4653a553 Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Sat Dec 11 00:41:09 2021 +0100 handle changelog with translatable string commit9004686a13
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Fri Dec 10 01:10:55 2021 +0100 improve docgen wip commite266fa0e5d
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Dec 9 21:50:56 2021 +0100 show errors from relatorio driver commit75ba56fa09
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Dec 9 21:14:12 2021 +0100 add verification tool for admin commit12d6829b98
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Dec 9 14:17:42 2021 +0100 fix type with phonenumber helper commit7b5e96771f
Merge:8a9024de1
8a4748dc2
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Dec 9 14:11:14 2021 +0100 Merge remote-tracking branch 'origin/master' into docgen/improve-normalizer commit8a9024de13
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Dec 9 13:51:36 2021 +0100 add docgen:normalization for relation commit24a404964b
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Thu Dec 9 12:44:41 2021 +0100 docgen normalization for relation commit5d24bd4d11
Merge:70ab23214
455b225f4
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 21:08:30 2021 +0100 Merge branch 'master' into docgen/improve-normalizer commit70ab232149
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 13:58:49 2021 +0100 improve docgen, trnslations, admin commit027c01fc58
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 12:23:24 2021 +0100 fix css block commitfdc5127c74
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:57:16 2021 +0100 fix some error in test (wip) commitb8d48f04ae
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:47:50 2021 +0100 fix tests (wip) commitf1b1771d6b
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:35:00 2021 +0100 fix tests (wip) commit62dabbe1e7
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:14:46 2021 +0100 fix code style commit4101392190
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:13:49 2021 +0100 fix tests and type hinting commit3f1bed0b1c
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:05:41 2021 +0100 fix tests (wip) commit79fbdcdee4
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 11:05:29 2021 +0100 type hint User class commit3d8d79323e
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 10:56:30 2021 +0100 remove error messages commit32178e22fe
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 10:51:30 2021 +0100 fix tests (wip) commit60a8c20896
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 10:29:54 2021 +0100 update app commit9d8011da61
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 10:06:35 2021 +0100 fix loading origin commit789eeadb40
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 09:52:51 2021 +0100 fix loading fixtures for doc generator template commitf206fdb08c
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 09:52:35 2021 +0100 fix code style commit9d5409d8d9
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 09:52:06 2021 +0100 fix casting commite297d82533
Author: Julien Fastré <julien.fastre@champs-libres.coop> Date: Wed Dec 8 09:26:13 2021 +0100 fixes on tests [WIP]
This commit is contained in:
@@ -11,23 +11,25 @@ declare(strict_types=1);
|
||||
|
||||
namespace Chill\PersonBundle\Serializer\Normalizer;
|
||||
|
||||
use Chill\DocGeneratorBundle\Serializer\Helper\NormalizeNullValueHelper;
|
||||
use Chill\MainBundle\Entity\Scope;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Security\Resolver\ScopeResolverDispatcher;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelper;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
|
||||
use Chill\PersonBundle\Templating\Entity\ClosingMotiveRender;
|
||||
use Chill\PersonBundle\Templating\Entity\SocialIssueRender;
|
||||
use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
||||
use DateTime;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
|
||||
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
||||
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
use function array_key_exists;
|
||||
use function in_array;
|
||||
use function is_array;
|
||||
|
||||
class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterface, NormalizerAwareInterface
|
||||
@@ -37,26 +39,31 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
|
||||
private const IGNORE_FIRST_PASS_KEY = 'acc_period_ignore_first_pass';
|
||||
|
||||
private const PERIOD_NULL = [
|
||||
'id' => '',
|
||||
'id',
|
||||
'closingDate' => DateTime::class,
|
||||
'confidential' => '',
|
||||
'confidentialText' => '',
|
||||
'confidential',
|
||||
'confidentialText',
|
||||
'createdAt' => DateTime::class,
|
||||
'createdBy' => User::class,
|
||||
'emergency' => '',
|
||||
'emergencyText' => '',
|
||||
'emergency',
|
||||
'emergencyText',
|
||||
'openingDate' => DateTime::class,
|
||||
'originText' => '',
|
||||
'requestorAnonymous' => false,
|
||||
'socialIssues' => [],
|
||||
'intensity' => '',
|
||||
'step' => '',
|
||||
'closingMotiveText' => '',
|
||||
'socialIssuesText' => '',
|
||||
'scopes' => [],
|
||||
'scopesText' => '',
|
||||
'origin' => AccompanyingPeriod\Origin::class,
|
||||
'originText',
|
||||
'requestorAnonymous',
|
||||
'socialIssues',
|
||||
'intensity',
|
||||
'step',
|
||||
'closingMotiveText',
|
||||
'socialIssuesText',
|
||||
'scopes' => Collection::class,
|
||||
'scopesText',
|
||||
'ref' => User::class,
|
||||
'participations' => [],
|
||||
'participations' => Collection::class,
|
||||
'currentParticipations' => Collection::class,
|
||||
'requestorPerson' => Person::class,
|
||||
'requestorThirdParty' => ThirdParty::class,
|
||||
'resources' => Collection::class,
|
||||
];
|
||||
|
||||
private ClosingMotiveRender $closingMotiveRender;
|
||||
@@ -89,48 +96,70 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
|
||||
public function normalize($period, ?string $format = null, array $context = [])
|
||||
{
|
||||
if ($period instanceof AccompanyingPeriod) {
|
||||
$ignored = $context[self::IGNORE_FIRST_PASS_KEY] ?? [];
|
||||
$ignored[] = spl_object_hash($period);
|
||||
$initial =
|
||||
$this->normalizer->normalize($period, $format, array_merge(
|
||||
$context,
|
||||
[self::IGNORE_FIRST_PASS_KEY => $ignored, AbstractNormalizer::GROUPS => 'docgen:read']
|
||||
));
|
||||
|
||||
// some transformation
|
||||
$user = $initial['user'];
|
||||
unset($initial['user']);
|
||||
|
||||
$scopes = $this->scopeResolverDispatcher->isConcerned($period) ? $this->scopeResolverDispatcher->resolveScope($period) : [];
|
||||
|
||||
if (!is_array($scopes)) {
|
||||
$scopes = [$scopes];
|
||||
}
|
||||
|
||||
$dateContext = array_merge($context, ['docgen:expects' => DateTime::class, 'groups' => 'docgen:read']);
|
||||
$userContext = array_merge($context, ['docgen:expects' => User::class, 'groups' => 'docgen:read']);
|
||||
$participationContext = array_merge($context, ['docgen:expects' => AccompanyingPeriodParticipation::class, 'groups' => 'docgen:read']);
|
||||
|
||||
return [
|
||||
'id' => $period->getId(),
|
||||
'type' => 'accompanying_period',
|
||||
'isNull' => false,
|
||||
'closingDate' => $this->normalizer->normalize($period->getClosingDate(), $format, $dateContext),
|
||||
'confidential' => $period->isConfidential(),
|
||||
'createdAt' => $this->normalizer->normalize($period->getCreatedAt(), $format, $dateContext),
|
||||
'createdBy' => $this->normalizer->normalize($period->getCreatedBy(), $format, $userContext),
|
||||
'emergency' => $period->isEmergency(),
|
||||
'openingDate' => $this->normalizer->normalize($period->getOpeningDate(), $format, $dateContext),
|
||||
'origin' => $this->normalizer->normalize($period->getOrigin(), $format, array_merge($context, ['docgen:expects' => AccompanyingPeriod\Origin::class])),
|
||||
'participations' => $this->normalizer->normalize($period->getParticipations(), $format, $participationContext),
|
||||
'currentParticipations' => $this->normalizer->normalize($period->getCurrentParticipations(), $format, $participationContext),
|
||||
'requestorAnonymous' => $period->isRequestorAnonymous(),
|
||||
'requestorPerson' => $this->normalizer->normalize($period->getRequestorPerson(), $format, array_merge($context, ['docgen:expects' => Person::class])),
|
||||
'hasRequestorPerson' => $period->getRequestorPerson() !== null,
|
||||
'requestorThirdParty' => $this->normalizer->normalize($period->getRequestorThirdParty(), $format, array_merge($context, ['docgen:expects' => ThirdParty::class])),
|
||||
'hasRequestorThirdParty' => $period->getRequestorThirdParty() !== null,
|
||||
'resources' => $this->normalizer->normalize($period->getResources(), $format, $context),
|
||||
'scopes' => $this->normalizer->normalize($scopes, $format, array_merge($context, ['docgen:expects' => Scope::class, 'groups' => 'docgen:read'])),
|
||||
'socialIssues' => $this->normalizer->normalize($period->getSocialIssues(), $format, $context),
|
||||
'intensity' => $this->translator->trans($period->getIntensity()),
|
||||
'step' => $this->translator->trans('accompanying_period.' . $period->getStep()),
|
||||
'emergencyText' => $period->isEmergency() ? $this->translator->trans('accompanying_period.emergency') : '',
|
||||
'confidentialText' => $period->isConfidential() ? $this->translator->trans('confidential') : '',
|
||||
'originText' => null !== $period->getOrigin() ? $this->translatableStringHelper->localize($period->getOrigin()->getLabel()) : '',
|
||||
'isClosed' => $period->getClosingDate() !== null,
|
||||
'closingMotiveText' => null !== $period->getClosingMotive() ?
|
||||
$this->closingMotiveRender->renderString($period->getClosingMotive(), []) : '',
|
||||
'ref' => $this->normalizer->normalize($period->getUser(), $format, $userContext),
|
||||
'hasRef' => $period->getUser() !== null,
|
||||
'socialIssuesText' => implode(', ', array_map(function (SocialIssue $s) {
|
||||
return $this->socialIssueRender->renderString($s, []);
|
||||
}, $period->getSocialIssues()->toArray())),
|
||||
'scopesText' => implode(', ', array_map(function (Scope $s) {
|
||||
return $this->translatableStringHelper->localize($s->getName());
|
||||
}, $scopes)),
|
||||
'hasRequestor' => $period->getRequestor() !== null,
|
||||
'requestorKind' => $period->getRequestorKind(),
|
||||
];
|
||||
} elseif (null === $period) {
|
||||
return array_merge(
|
||||
// get a first default data
|
||||
$initial,
|
||||
// and add data custom
|
||||
(new NormalizeNullValueHelper($this->normalizer, 'type', 'accompanying_period'))
|
||||
->normalize(self::PERIOD_NULL, $format, $context),
|
||||
[
|
||||
'intensity' => $this->translator->trans($period->getIntensity()),
|
||||
'step' => $this->translator->trans('accompanying_period.' . $period->getStep()),
|
||||
'emergencyText' => $period->isEmergency() ? $this->translator->trans('accompanying_period.emergency') : '',
|
||||
'confidentialText' => $period->isConfidential() ? $this->translator->trans('confidential') : '',
|
||||
//'originText' => null !== $period->getOrigin() ? $this->translatableStringHelper->localize($period->getOrigin()->getLabel()) : '',
|
||||
'closingMotiveText' => null !== $period->getClosingMotive() ?
|
||||
$this->closingMotiveRender->renderString($period->getClosingMotive(), []) : '',
|
||||
'ref' => $user,
|
||||
'socialIssuesText' => implode(', ', array_map(function (SocialIssue $s) {
|
||||
return $this->socialIssueRender->renderString($s, []);
|
||||
}, $period->getSocialIssues()->toArray())),
|
||||
'scopesText' => implode(', ', array_map(function (Scope $s) {
|
||||
return $this->translatableStringHelper->localize($s->getName());
|
||||
}, $scopes)),
|
||||
'scopes' => $scopes,
|
||||
'hasRef' => false,
|
||||
'requestorKind' => 'none',
|
||||
'hasRequestor' => false,
|
||||
'hasRequestorPerson' => false,
|
||||
'hasRequestorThirdParty' => false,
|
||||
'isClosed' => false,
|
||||
'confidential' => false,
|
||||
]
|
||||
);
|
||||
} elseif (null === $period) {
|
||||
return self::PERIOD_NULL;
|
||||
}
|
||||
|
||||
throw new InvalidArgumentException('this neither an accompanying period or null');
|
||||
@@ -143,11 +172,6 @@ class AccompanyingPeriodDocGenNormalizer implements ContextAwareNormalizerInterf
|
||||
}
|
||||
|
||||
if ($data instanceof AccompanyingPeriod) {
|
||||
if (array_key_exists(self::IGNORE_FIRST_PASS_KEY, $context)
|
||||
&& in_array(spl_object_hash($data), $context[self::IGNORE_FIRST_PASS_KEY], true)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -12,16 +12,21 @@ declare(strict_types=1);
|
||||
namespace Chill\PersonBundle\Serializer\Normalizer;
|
||||
|
||||
use Chill\DocGeneratorBundle\Serializer\Helper\NormalizeNullValueHelper;
|
||||
use Chill\MainBundle\Entity\Address;
|
||||
use Chill\MainBundle\Entity\Civility;
|
||||
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\Relationships\RelationshipRepository;
|
||||
use Chill\PersonBundle\Templating\Entity\PersonRender;
|
||||
use DateTimeInterface;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Symfony\Component\Serializer\Exception\UnexpectedValueException;
|
||||
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
use function array_key_exists;
|
||||
use function array_map;
|
||||
use function implode;
|
||||
|
||||
@@ -33,16 +38,20 @@ class PersonDocGenNormalizer implements
|
||||
|
||||
private PersonRender $personRender;
|
||||
|
||||
private RelationshipRepository $relationshipRepository;
|
||||
|
||||
private TranslatableStringHelper $translatableStringHelper;
|
||||
|
||||
private TranslatorInterface $translator;
|
||||
|
||||
public function __construct(
|
||||
PersonRender $personRender,
|
||||
RelationshipRepository $relationshipRepository,
|
||||
TranslatorInterface $translator,
|
||||
TranslatableStringHelper $translatableStringHelper
|
||||
) {
|
||||
$this->personRender = $personRender;
|
||||
$this->relationshipRepository = $relationshipRepository;
|
||||
$this->translator = $translator;
|
||||
$this->translatableStringHelper = $translatableStringHelper;
|
||||
}
|
||||
@@ -52,12 +61,20 @@ class PersonDocGenNormalizer implements
|
||||
/** @var Person $person */
|
||||
$dateContext = $context;
|
||||
$dateContext['docgen:expects'] = DateTimeInterface::class;
|
||||
$addressContext = array_merge($context, ['docgen:expects' => Address::class]);
|
||||
|
||||
if (null === $person) {
|
||||
return $this->normalizeNullValue($format, $context);
|
||||
}
|
||||
|
||||
return [
|
||||
if (!$person instanceof Person) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
|
||||
$data = [
|
||||
'type' => 'person',
|
||||
'isNull' => false,
|
||||
'civility' => $this->normalizer->normalize($person->getCivility(), $format, array_merge($context, ['docgen:expect' => Civility::class])),
|
||||
'firstname' => $person->getFirstName(),
|
||||
'lastname' => $person->getLastName(),
|
||||
'altNames' => implode(
|
||||
@@ -83,7 +100,34 @@ class PersonDocGenNormalizer implements
|
||||
'placeOfBirth' => $person->getPlaceOfBirth(),
|
||||
'memo' => $person->getMemo(),
|
||||
'numberOfChildren' => (string) $person->getNumberOfChildren(),
|
||||
'address' => $this->normalizer->normalize($person->getCurrentPersonAddress(), $format, $addressContext),
|
||||
];
|
||||
|
||||
if ($context['docgen:person:with-household'] ?? false) {
|
||||
$data['household'] = $this->normalizer->normalize(
|
||||
$person->getCurrentHousehold(),
|
||||
$format,
|
||||
array_merge($context, [
|
||||
'docgen:expects' => Household::class,
|
||||
'docgen:person:with-household' => false,
|
||||
'docgen:person:with-relations' => false,
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
if ($context['docgen:person:with-relations'] ?? false) {
|
||||
$data['relations'] = $this->normalizer->normalize(
|
||||
new ArrayCollection($this->relationshipRepository->findByPerson($person)),
|
||||
$format,
|
||||
array_merge($context, [
|
||||
'docgen:person:with-household' => false,
|
||||
'docgen:person:with-relation' => false,
|
||||
'docgen:relationship:counterpart' => $person,
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function supportsNormalization($data, ?string $format = null, array $context = [])
|
||||
@@ -95,25 +139,37 @@ class PersonDocGenNormalizer implements
|
||||
return
|
||||
$data instanceof Person
|
||||
|| (
|
||||
array_key_exists('docgen:expects', $context)
|
||||
&& Person::class === $context['docgen:expects']
|
||||
null === $data
|
||||
&& Person::class === ($context['docgen:expects'] ?? null)
|
||||
);
|
||||
}
|
||||
|
||||
private function normalizeNullValue(string $format, array $context)
|
||||
{
|
||||
$normalizer = new NormalizeNullValueHelper($this->normalizer);
|
||||
$normalizer = new NormalizeNullValueHelper($this->normalizer, 'type', 'person');
|
||||
|
||||
$attributes = [
|
||||
'firstname', 'lastname', 'altNames', 'text',
|
||||
'civility' => Civility::class,
|
||||
'birthdate' => DateTimeInterface::class,
|
||||
'deathdate' => DateTimeInterface::class,
|
||||
'gender', 'maritalStatus',
|
||||
'maritalStatusDate' => DateTimeInterface::class,
|
||||
'email', 'firstPhoneNumber', 'fixPhoneNumber', 'mobilePhoneNumber', 'nationality',
|
||||
'placeOfBirth', 'memo', 'numberOfChildren',
|
||||
'address' => Address::class,
|
||||
];
|
||||
|
||||
return $normalizer->normalize($attributes, $format, $context);
|
||||
if ($context['docgen:person:with-household'] ?? false) {
|
||||
$attributes['household'] = Household::class;
|
||||
}
|
||||
|
||||
$data = $normalizer->normalize($attributes, $format, $context);
|
||||
|
||||
if ($context['docgen:person:with-relations'] ?? false) {
|
||||
$data['relations'] = [];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\PersonBundle\Serializer\Normalizer;
|
||||
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Chill\PersonBundle\Entity\Relationships\Relationship;
|
||||
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
|
||||
|
||||
class RelationshipDocGenNormalizer implements ContextAwareNormalizerInterface, NormalizerAwareInterface
|
||||
{
|
||||
use NormalizerAwareTrait;
|
||||
|
||||
private TranslatableStringHelperInterface $translatableStringHelper;
|
||||
|
||||
public function __construct(TranslatableStringHelperInterface $translatableStringHelper)
|
||||
{
|
||||
$this->translatableStringHelper = $translatableStringHelper;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Relationship $relation
|
||||
*/
|
||||
public function normalize($relation, ?string $format = null, array $context = [])
|
||||
{
|
||||
$counterpart = $context['docgen:relationship:counterpart'] ?? null;
|
||||
$contextPerson = array_merge($context, [
|
||||
'docgen:person:with-relations' => false,
|
||||
'docgen:relationship:counterpart' => null,
|
||||
'docgen:expects' => Person::class,
|
||||
]);
|
||||
|
||||
if (null !== $counterpart) {
|
||||
$opposite = $relation->getOpposite($counterpart);
|
||||
} else {
|
||||
$opposite = null;
|
||||
}
|
||||
|
||||
if (null === $relation) {
|
||||
return [
|
||||
'id' => '',
|
||||
'fromPerson' => $nullPerson = $this->normalizer->normalize(null, $format, $contextPerson),
|
||||
'toPerson' => $nullPerson,
|
||||
'opposite' => $nullPerson,
|
||||
'text' => '',
|
||||
'relationId' => '',
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $relation->getId(),
|
||||
'fromPerson' => $this->normalizer->normalize(
|
||||
$relation->getFromPerson(),
|
||||
$format,
|
||||
$contextPerson
|
||||
),
|
||||
'toPerson' => $this->normalizer->normalize(
|
||||
$relation->getToPerson(),
|
||||
$format,
|
||||
$contextPerson
|
||||
),
|
||||
'text' => $relation->getReverse() ?
|
||||
$this->translatableStringHelper->localize($relation->getRelation()->getReverseTitle()) :
|
||||
$this->translatableStringHelper->localize($relation->getRelation()->getTitle()),
|
||||
'opposite' => $this->normalizer->normalize($opposite, $format, $contextPerson),
|
||||
'relationId' => $relation->getRelation()->getId(),
|
||||
];
|
||||
}
|
||||
|
||||
public function supportsNormalization($data, ?string $format = null, array $context = [])
|
||||
{
|
||||
if ('docgen' !== $format) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $data instanceof Relationship || (null === $data
|
||||
&& Relationship::class === ($context['docgen:expects'] ?? null));
|
||||
}
|
||||
}
|
@@ -36,8 +36,8 @@ class SocialActionNormalizer implements NormalizerAwareInterface, NormalizerInte
|
||||
'id' => $socialAction->getId(),
|
||||
'type' => 'social_work_social_action',
|
||||
'text' => $this->render->renderString($socialAction, []),
|
||||
'parent' => $this->normalizer->normalize($socialAction->getParent()),
|
||||
'desactivationDate' => $this->normalizer->normalize($socialAction->getDesactivationDate()),
|
||||
'parent' => $this->normalizer->normalize($socialAction->getParent(), $format, $context),
|
||||
'desactivationDate' => $this->normalizer->normalize($socialAction->getDesactivationDate(), $format, $context),
|
||||
'title' => $socialAction->getTitle(),
|
||||
];
|
||||
|
||||
|
Reference in New Issue
Block a user