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(),