1 | <?php |
---|
2 | /** |
---|
3 | * vérification des numéros internationaux |
---|
4 | * |
---|
5 | * @plugin libphonenumber for SPIP |
---|
6 | * @copyright 2019 |
---|
7 | * @author Anne-lise Martenot |
---|
8 | * @licence GNU/GPL |
---|
9 | * (c) 2019 - Distribue sous licence GNU/GPL |
---|
10 | * |
---|
11 | **/ |
---|
12 | |
---|
13 | if (!defined('_ECRIRE_INC_VERSION')) { |
---|
14 | return; |
---|
15 | } |
---|
16 | |
---|
17 | /** |
---|
18 | * Vérifie un numéro de téléphone avec la lib https://github.com/giggsey/libphonenumber-for-php |
---|
19 | * |
---|
20 | * |
---|
21 | * @param string $valeur |
---|
22 | * La valeur à vérifier. |
---|
23 | * @param array $options |
---|
24 | * pays |
---|
25 | * @return string |
---|
26 | * Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur. |
---|
27 | */ |
---|
28 | |
---|
29 | include_spip('lib/libphonenumber/src/MatcherAPIInterface'); |
---|
30 | include_spip('lib/libphonenumber/src/MetadataLoaderInterface'); |
---|
31 | include_spip('lib/libphonenumber/src/DefaultMetadataLoader'); |
---|
32 | include_spip('lib/libphonenumber/src/MetadataSourceInterface'); |
---|
33 | include_spip('lib/libphonenumber/src/MultiFileMetadataSourceImpl'); |
---|
34 | include_spip('lib/libphonenumber/src/PhoneNumberUtil'); |
---|
35 | include_spip('lib/libphonenumber/src/CountryCodeToRegionCodeMap'); |
---|
36 | include_spip('lib/libphonenumber/src/RegexBasedMatcher'); |
---|
37 | include_spip('lib/libphonenumber/src/PhoneNumber'); |
---|
38 | include_spip('lib/libphonenumber/src/CountryCodeSource'); |
---|
39 | include_spip('lib/libphonenumber/src/Matcher'); |
---|
40 | include_spip('lib/libphonenumber/src/PhoneMetadata'); |
---|
41 | include_spip('lib/libphonenumber/src/PhoneNumberDesc'); |
---|
42 | include_spip('lib/libphonenumber/src/NumberFormat'); |
---|
43 | include_spip('lib/libphonenumber/src/PhoneNumberType'); |
---|
44 | include_spip('lib/libphonenumber/src/ValidationResult'); |
---|
45 | include_spip('lib/libphonenumber/src/NumberParseException'); |
---|
46 | include_spip('lib/libphonenumber/src/PhoneNumberFormat'); |
---|
47 | |
---|
48 | |
---|
49 | use libphonenumber\MatcherAPIInterface; |
---|
50 | use libphonenumber\MetadataLoaderInterface; |
---|
51 | use libphonenumber\DefaultMetadataLoader; |
---|
52 | use libphonenumber\MetadataSourceInterface; |
---|
53 | use libphonenumber\MultiFileMetadataSourceImpl; |
---|
54 | use libphonenumber\PhoneNumberUtil; |
---|
55 | use libphonenumber\PhoneNumber; |
---|
56 | use libphonenumber\RegexBasedMatcher; |
---|
57 | use libphonenumber\CountryCodeToRegionCodeMap; |
---|
58 | use libphonenumber\CountryCodeSource; |
---|
59 | use libphonenumber\Matcher; |
---|
60 | use libphonenumber\PhoneMetadata; |
---|
61 | use libphonenumber\PhoneNumberDesc; |
---|
62 | use libphonenumber\NumberFormat; |
---|
63 | use libphonenumber\PhoneNumberType; |
---|
64 | use libphonenumber\ValidationResult; |
---|
65 | use libphonenumber\NumberParseException; |
---|
66 | use libphonenumber\PhoneNumberFormat; |
---|
67 | |
---|
68 | |
---|
69 | function verifier_phone_dist($valeur, $options = array()) { |
---|
70 | $ok = ''; |
---|
71 | |
---|
72 | $erreur = _T('verifier:erreur_telephone'); |
---|
73 | if (!is_string($valeur) OR strlen($valeur) < 8 ) { |
---|
74 | return $erreur; |
---|
75 | } |
---|
76 | |
---|
77 | $clean_number = str_replace("|","",$valeur); |
---|
78 | if($valeur != $clean_number){ |
---|
79 | return $erreur." Merci de retirer le signe |"; |
---|
80 | } |
---|
81 | |
---|
82 | $pays = $options['prefixes_pays']; //"CH" |
---|
83 | |
---|
84 | $NumberStr = $valeur ;//"044 668 18 00"; |
---|
85 | $phoneUtil = libphonenumber\PhoneNumberUtil::getInstance(); |
---|
86 | try { |
---|
87 | $NumberProto = $phoneUtil->parse($NumberStr, $pays); |
---|
88 | //var_dump($NumberProto); |
---|
89 | } catch (libphonenumber\NumberParseException $e) { |
---|
90 | //var_dump($e); |
---|
91 | return $e; |
---|
92 | } |
---|
93 | |
---|
94 | $isValid = $phoneUtil->isValidNumber($NumberProto); |
---|
95 | //var_dump($isValid); // true →1 |
---|
96 | if(!$isValid){ |
---|
97 | $erreur = "Attention à l'écriture du numéro"; |
---|
98 | return $erreur; |
---|
99 | } |
---|
100 | //on va peut-être garder l'international pour la construction du form Elavon |
---|
101 | $international = $phoneUtil->format($NumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL); |
---|
102 | |
---|
103 | if($valeur != $international){ |
---|
104 | $erreur = "Erreur dans l'internationalisation du numéro"; //.$NumberProto['nationalNumber']; |
---|
105 | $erreur .= " essayez ". $phoneUtil->format($NumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL); |
---|
106 | return $erreur; |
---|
107 | } |
---|
108 | |
---|
109 | return $ok; |
---|
110 | } |
---|