From f4f488dad1d317de034244b79ea9a84527b34915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 2 Mar 2022 14:10:48 +0100 Subject: [PATCH] normalization of phonenumber --- .../Phonenumber/PhonenumberHelper.php | 2 +- .../Normalizer/PhonenumberNormalizer.php | 60 +++++++++++++++++++ .../ChillPersonBundle/Entity/Person.php | 4 ++ .../Normalizer/PersonJsonNormalizer.php | 5 +- 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Serializer/Normalizer/PhonenumberNormalizer.php diff --git a/src/Bundle/ChillMainBundle/Phonenumber/PhonenumberHelper.php b/src/Bundle/ChillMainBundle/Phonenumber/PhonenumberHelper.php index 0473fe195..1f0827bde 100644 --- a/src/Bundle/ChillMainBundle/Phonenumber/PhonenumberHelper.php +++ b/src/Bundle/ChillMainBundle/Phonenumber/PhonenumberHelper.php @@ -251,7 +251,7 @@ final class PhonenumberHelper implements PhoneNumberHelperInterface $item = $this->cachePool->getItem('pnum_' . $filtered); if ($item->isHit()) { - //return $item->get(); + return $item->get(); } try { diff --git a/src/Bundle/ChillMainBundle/Serializer/Normalizer/PhonenumberNormalizer.php b/src/Bundle/ChillMainBundle/Serializer/Normalizer/PhonenumberNormalizer.php new file mode 100644 index 000000000..88422115d --- /dev/null +++ b/src/Bundle/ChillMainBundle/Serializer/Normalizer/PhonenumberNormalizer.php @@ -0,0 +1,60 @@ +defaultCarrierCode = $parameterBag->get('chill_main')['phone_helper']['default_carrier_code']; + $this->phoneNumberUtil = PhoneNumberUtil::getInstance(); + } + + public function normalize($object, string $format = null, array $context = []): string + { + return $this->phoneNumberUtil->formatOutOfCountryCallingNumber($object, $this->defaultCarrierCode); + } + + public function supportsNormalization($data, string $format = null) + { + return $data instanceof PhoneNumber; + } + + /** + * {@inheritdoc} + * + * @throws UnexpectedValueException + */ + public function denormalize($data, $class, $format = null, array $context = array()) + { + try { + return $this->phoneNumberUtil->parse($data, $this->defaultCarrierCode); + } catch (NumberParseException $e) { + throw new UnexpectedValueException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * {@inheritdoc} + */ + public function supportsDenormalization($data, $type, $format = null) + { + return $type === 'libphonenumber\PhoneNumber'; + } +} diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 54fe689e7..3fc0da96c 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -372,6 +372,7 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI /** * The person's mobile phone number. * + * @PhonenumberConstraint(type="mobile") * @ORM\Column(type="phone_number") */ private ?PhoneNumber $mobilenumber; @@ -425,6 +426,9 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI * The person's phonenumber. * * @ORM\Column(type="phone_number") + * @PhonenumberConstraint( + * type="landline", + * ) */ private ?PhoneNumber $phonenumber; diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php index ceecc93a3..b95cc60a8 100644 --- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php +++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php @@ -21,6 +21,7 @@ use Chill\PersonBundle\Repository\PersonRepository; use DateTime; use DateTimeImmutable; use Doctrine\Common\Collections\Collection; +use libphonenumber\PhoneNumber; use Symfony\Component\Serializer\Exception\UnexpectedValueException; use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait; @@ -111,12 +112,12 @@ class PersonJsonNormalizer implements DenormalizerAwareInterface, NormalizerAwar break; case 'phonenumber': - $person->setPhonenumber($this->phoneNumberHelper->denormalize($data[$item])); + $person->setPhonenumber($this->denormalizer->denormalize($data[$item], PhoneNumber::class, $format, $context)); break; case 'mobilenumber': - $person->setMobilenumber($this->phoneNumberHelper->denormalize($data[$item])); + $person->setMobilenumber($this->denormalizer->denormalize($data[$item], PhoneNumber::class, $format, $context)); break;