Publication initiale de RelaisSMS : documentation et sources nettoyees

This commit is contained in:
2026-10-21 09:29:39 +02:00
commit ac186b03b1
158 changed files with 24818 additions and 0 deletions
@@ -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.',
);
}
}