Publication initiale de RelaisSMS : documentation et sources nettoyees
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Phone;
|
||||
|
||||
use App\Contracts\PhoneNumberNormalizerInterface;
|
||||
use libphonenumber\NumberParseException;
|
||||
use libphonenumber\PhoneNumberFormat;
|
||||
use libphonenumber\PhoneNumberType;
|
||||
use libphonenumber\PhoneNumberUtil;
|
||||
|
||||
class LibPhoneNumberNormalizer implements PhoneNumberNormalizerInterface
|
||||
{
|
||||
public function __construct(
|
||||
private readonly PhoneNumberUtil $phoneNumberUtil,
|
||||
) {}
|
||||
|
||||
public function normalize(string $rawNumber, string $defaultCountry): PhoneNumberResult
|
||||
{
|
||||
$rawNumber = trim($rawNumber);
|
||||
$defaultCountry = strtoupper(trim($defaultCountry));
|
||||
|
||||
if ($rawNumber === '') {
|
||||
return new PhoneNumberResult($rawNumber, null, null, false, false, 'Numero vide.');
|
||||
}
|
||||
|
||||
try {
|
||||
$number = $this->phoneNumberUtil->parse($rawNumber, $defaultCountry);
|
||||
} catch (NumberParseException $exception) {
|
||||
return new PhoneNumberResult($rawNumber, null, null, false, false, $exception->getMessage());
|
||||
}
|
||||
|
||||
$isValid = $this->phoneNumberUtil->isValidNumber($number);
|
||||
$normalizedNumber = $isValid
|
||||
? $this->phoneNumberUtil->format($number, PhoneNumberFormat::E164)
|
||||
: null;
|
||||
$country = $this->phoneNumberUtil->getRegionCodeForNumber($number);
|
||||
$mobileRegex = (string) config('relais_sms.default_settings.mobile_phone_regex');
|
||||
$numberType = $this->phoneNumberUtil->getNumberType($number);
|
||||
$isMobile = $isValid && (
|
||||
in_array($numberType, [PhoneNumberType::MOBILE, PhoneNumberType::FIXED_LINE_OR_MOBILE], true)
|
||||
|| ($mobileRegex !== '' && (
|
||||
preg_match($mobileRegex, $rawNumber) === 1
|
||||
|| ($normalizedNumber !== null && preg_match($mobileRegex, $normalizedNumber) === 1)
|
||||
))
|
||||
);
|
||||
|
||||
return new PhoneNumberResult(
|
||||
rawNumber: $rawNumber,
|
||||
normalizedNumber: $normalizedNumber,
|
||||
country: $country,
|
||||
isValid: $isValid,
|
||||
isMobile: $isMobile,
|
||||
error: $isValid ? null : 'Numero invalide.',
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user