mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-07-05 00:16:14 +00:00
116 lines
3.7 KiB
PHP
116 lines
3.7 KiB
PHP
<?php
|
|
/*
|
|
*
|
|
* Copyright (C) 2014-2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
namespace Chill\PersonBundle\Serializer\Normalizer;
|
|
|
|
use Chill\PersonBundle\Entity\Person;
|
|
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
|
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
|
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
|
|
use Chill\PersonBundle\Repository\PersonRepository;
|
|
use Symfony\Component\Serializer\Exception\RuntimeException;
|
|
use Symfony\Component\Serializer\Exception\UnexpectedValueException;
|
|
use Chill\MainBundle\Templating\Entity\ChillEntityRenderExtension;
|
|
|
|
/**
|
|
* Serialize a Person entity
|
|
*
|
|
*/
|
|
class PersonNormalizer implements
|
|
NormalizerInterface,
|
|
NormalizerAwareInterface,
|
|
DenormalizerInterface
|
|
{
|
|
|
|
protected NormalizerInterface $normalizer;
|
|
|
|
protected PersonRepository $repository;
|
|
|
|
private ChillEntityRenderExtension $render;
|
|
|
|
public const GET_PERSON = 'get_person';
|
|
|
|
public function __construct(PersonRepository $repository, ChillEntityRenderExtension $render)
|
|
{
|
|
$this->repository = $repository;
|
|
$this->render = $render;
|
|
}
|
|
|
|
public function normalize($person, string $format = null, array $context = array())
|
|
{
|
|
/** @var Person $person */
|
|
return [
|
|
'type' => 'person',
|
|
'person_id' => $person->getId(),
|
|
'text' => $this->render->renderString($person),
|
|
'firstName' => $person->getFirstName(),
|
|
'lastName' => $person->getLastName(),
|
|
'birthdate' => $this->normalizer->normalize($person->getBirthdate()),
|
|
'center' => $this->normalizer->normalize($person->getCenter()),
|
|
'phonenumber' => $person->getPhonenumber(),
|
|
'mobilenumber' => $person->getMobilenumber(),
|
|
'altNames' => $this->normalizeAltNames($person->getAltNames())
|
|
];
|
|
}
|
|
|
|
protected function normalizeAltNames($altNames): array
|
|
{
|
|
$r = [];
|
|
|
|
foreach ($altNames as $n) {
|
|
$r[] = [ 'key' => $n->getKey(), 'label' => $n->getLabel() ];
|
|
}
|
|
|
|
return $r;
|
|
}
|
|
|
|
|
|
public function denormalize($data, string $type, string $format = null, array $context = []): Person
|
|
{
|
|
if ($context[self::GET_PERSON] ?? true) {
|
|
$id = $data['person_id'] ?? null;
|
|
if (NULL === $id) {
|
|
throw new RuntimeException("missing person_id into person object");
|
|
}
|
|
}
|
|
/** var Person $person */
|
|
$person = $this->repository->findOneById($id);
|
|
|
|
if (NULL === $person) {
|
|
throw new UnexpectedValueException("person id not found");
|
|
}
|
|
|
|
return $person;
|
|
}
|
|
|
|
public function supportsNormalization($data, string $format = null): bool
|
|
{
|
|
return $data instanceof Person;
|
|
}
|
|
|
|
public function supportsDenormalization($data, string $type, ?string $format = NULL): bool
|
|
{
|
|
return Person::class === $type;
|
|
}
|
|
|
|
public function setNormalizer(NormalizerInterface $normalizer)
|
|
{
|
|
$this->normalizer = $normalizer;
|
|
}
|
|
}
|