From 4822acb6fb96508926d82e9e3b667645dc8d17f4 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Tue, 1 Feb 2022 16:20:45 +0100 Subject: [PATCH] fix: Use `odolbeau/phone-number-bundle` for formatting phone number type fields. There is no need to use the bundle, we could have used the library instead. However, this idea is to switch to that bundle at some point. --- composer.json | 1 + .../PhoneNumberHelperInterface.php | 56 +++++++++++++++++ .../Phonenumber/PhonenumberHelper.php | 60 +++++++++++-------- .../Phonenumber/Templating.php | 11 ++-- .../Validation/Validator/ValidPhonenumber.php | 13 ++-- .../config/services/phonenumber.yaml | 9 +-- .../Normalizer/PersonJsonNormalizer.php | 15 +++-- 7 files changed, 112 insertions(+), 53 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Phonenumber/PhoneNumberHelperInterface.php diff --git a/composer.json b/composer.json index 2223f65c0..c96738df8 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "league/csv": "^9.7.1", "nyholm/psr7": "^1.4", "ocramius/package-versions": "^1.10", + "odolbeau/phone-number-bundle": "^3.6", "phpoffice/phpspreadsheet": "^1.16", "ramsey/uuid-doctrine": "^1.7", "sensio/framework-extra-bundle": "^5.5", diff --git a/src/Bundle/ChillMainBundle/Phonenumber/PhoneNumberHelperInterface.php b/src/Bundle/ChillMainBundle/Phonenumber/PhoneNumberHelperInterface.php new file mode 100644 index 000000000..38aef39ac --- /dev/null +++ b/src/Bundle/ChillMainBundle/Phonenumber/PhoneNumberHelperInterface.php @@ -0,0 +1,56 @@ +logger = $logger; - $this->cachePool = $cachePool; + $this->cachePool = $cacheUserData; + $this->config = $config = $parameterBag->get('chill_main.phone_helper'); if ( array_key_exists('twilio_sid', $config) @@ -74,9 +68,17 @@ class PhonenumberHelper } } - public function format($phonenumber) + public function denormalize(string $phoneNumber): string { - return $this->performTwilioFormat($phonenumber); + $phoneUtil = PhoneNumberUtil::getInstance(); + $phoneNumber = $phoneUtil->parse($phoneNumber); + + return $phoneUtil->format($phoneNumber, PhoneNumberFormat::NATIONAL); + } + + public function format(string $phonenumber): string + { + return $this->normalize($phonenumber); } /** @@ -157,7 +159,15 @@ class PhonenumberHelper return 'mobile' === $validation; } - protected function performTwilioFormat($phonenumber) + public function normalize(string $phoneNumber): string + { + $phoneUtil = PhoneNumberUtil::getInstance(); + $phoneNumber = $phoneUtil->parse($phoneNumber, $this->config['default_carrier_code']); + + return $phoneUtil->formatNationalNumberWithPreferredCarrierCode($phoneNumber, $this->config['default_carrier_code']); + } + + private function performTwilioFormat($phonenumber) { if (false === $this->isPhonenumberValidationConfigured()) { return $phonenumber; @@ -218,7 +228,7 @@ class PhonenumberHelper return $format; } - protected function performTwilioLookup($phonenumber) + private function performTwilioLookup($phonenumber) { if (false === $this->isPhonenumberValidationConfigured()) { return null; diff --git a/src/Bundle/ChillMainBundle/Phonenumber/Templating.php b/src/Bundle/ChillMainBundle/Phonenumber/Templating.php index 414732263..6aa0ad88e 100644 --- a/src/Bundle/ChillMainBundle/Phonenumber/Templating.php +++ b/src/Bundle/ChillMainBundle/Phonenumber/Templating.php @@ -14,19 +14,16 @@ namespace Chill\MainBundle\Phonenumber; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; -class Templating extends AbstractExtension +final class Templating extends AbstractExtension { - /** - * @var PhonenumberHelper - */ - protected $phonenumberHelper; + protected PhoneNumberHelperInterface $phonenumberHelper; - public function __construct(PhonenumberHelper $phonenumberHelper) + public function __construct(PhoneNumberHelperInterface $phonenumberHelper) { $this->phonenumberHelper = $phonenumberHelper; } - public function formatPhonenumber($phonenumber) + public function formatPhonenumber(string $phonenumber): string { return $this->phonenumberHelper->format($phonenumber) ?? $phonenumber; } diff --git a/src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php b/src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php index 5f2a5bf14..6bccff1f2 100644 --- a/src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php +++ b/src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php @@ -11,24 +11,21 @@ declare(strict_types=1); namespace Chill\MainBundle\Validation\Validator; -use Chill\MainBundle\Phonenumber\PhonenumberHelper; +use Chill\MainBundle\Phonenumber\PhoneNumberHelperInterface; use LogicException; use Psr\Log\LoggerInterface; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; -class ValidPhonenumber extends ConstraintValidator +final class ValidPhonenumber extends ConstraintValidator { - protected $logger; + private LoggerInterface $logger; - /** - * @var PhonenumberHelper - */ - protected $phonenumberHelper; + private PhoneNumberHelperInterface $phonenumberHelper; public function __construct( LoggerInterface $logger, - PhonenumberHelper $phonenumberHelper + PhoneNumberHelperInterface $phonenumberHelper ) { $this->phonenumberHelper = $phonenumberHelper; $this->logger = $logger; diff --git a/src/Bundle/ChillMainBundle/config/services/phonenumber.yaml b/src/Bundle/ChillMainBundle/config/services/phonenumber.yaml index 46fa853ee..905c08a81 100644 --- a/src/Bundle/ChillMainBundle/config/services/phonenumber.yaml +++ b/src/Bundle/ChillMainBundle/config/services/phonenumber.yaml @@ -3,19 +3,12 @@ services: autowire: true autoconfigure: true - Chill\MainBundle\Phonenumber\PhonenumberHelper: - arguments: - $config: '%chill_main.phone_helper%' - $cachePool: '@cache.user_data' + Chill\MainBundle\Phonenumber\PhonenumberHelper: ~ Chill\MainBundle\Phonenumber\Templating: - arguments: - $phonenumberHelper: '@Chill\MainBundle\Phonenumber\PhonenumberHelper' tags: - { name: twig.extension } Chill\MainBundle\Validation\Validator\ValidPhonenumber: - arguments: - $phonenumberHelper: '@Chill\MainBundle\Phonenumber\PhonenumberHelper' tags: - { name: validator.constraint_validator } diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php index 451171cb6..5f2ab0563 100644 --- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php +++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Serializer\Normalizer; use Chill\MainBundle\Entity\Center; +use Chill\MainBundle\Phonenumber\PhoneNumberHelperInterface; use Chill\MainBundle\Security\Resolver\CenterResolverManagerInterface; use Chill\MainBundle\Templating\Entity\ChillEntityRenderExtension; use Chill\PersonBundle\Entity\Person; @@ -41,6 +42,8 @@ class PersonJsonNormalizer implements DenormalizerAwareInterface, NormalizerAwar private CenterResolverManagerInterface $centerResolverManager; + private PhoneNumberHelperInterface $phoneNumberHelper; + private ChillEntityRenderExtension $render; private PersonRepository $repository; @@ -48,11 +51,13 @@ class PersonJsonNormalizer implements DenormalizerAwareInterface, NormalizerAwar public function __construct( ChillEntityRenderExtension $render, PersonRepository $repository, - CenterResolverManagerInterface $centerResolverManager + CenterResolverManagerInterface $centerResolverManager, + PhoneNumberHelperInterface $phoneNumberHelper ) { $this->render = $render; $this->repository = $repository; $this->centerResolverManager = $centerResolverManager; + $this->phoneNumberHelper = $phoneNumberHelper; } public function denormalize($data, $type, $format = null, array $context = []) @@ -106,12 +111,12 @@ class PersonJsonNormalizer implements DenormalizerAwareInterface, NormalizerAwar break; case 'phonenumber': - $person->setPhonenumber($data[$item]); + $person->setPhonenumber($this->phoneNumberHelper->denormalize($data[$item])); break; case 'mobilenumber': - $person->setMobilenumber($data[$item]); + $person->setMobilenumber($this->phoneNumberHelper->denormalize($data[$item])); break; @@ -187,8 +192,8 @@ class PersonJsonNormalizer implements DenormalizerAwareInterface, NormalizerAwar 'deathdate' => $this->normalizer->normalize($person->getDeathdate(), $format, $context), 'age' => $this->normalizer->normalize($person->getAge(), $format, $context), 'centers' => $this->normalizer->normalize($this->centerResolverManager->resolveCenters($person), $format, $context), - 'phonenumber' => $person->getPhonenumber(), - 'mobilenumber' => $person->getMobilenumber(), + 'phonenumber' => $this->phoneNumberHelper->normalize($person->getPhonenumber()), + 'mobilenumber' => $this->phoneNumberHelper->normalize($person->getMobilenumber()), 'email' => $person->getEmail(), 'altNames' => $this->normalizeAltNames($person->getAltNames()), 'gender' => $person->getGender(),