Changeset 114565 in spip-zone for _plugins_/verifier


Ignore:
Timestamp:
Mar 18, 2019, 3:58:36 PM (5 weeks ago)
Author:
cedric@…
Message:

Verification des numeros de telephone :

  • rendre la verification par pays extensible : quand un pays est pas prevu par le plugin on peut fournir son indicatif en option et une fonction de verification
  • reparer la verification des numeros ES : le remplacement du prefixe international par un 0 est abusif ca rend certains numeros invalides - on se contente de normaliser le prefixe
  • ajouter la verification des numeros belges qui sont des utilisateurs de SPIP comme les autres francophones :)
Location:
_plugins_/verifier
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/verifier/paquet.xml

    r113903 r114565  
    22        prefix="verifier"
    33        categorie="outil"
    4         version="1.8.3"
     4        version="1.9.0"
    55        etat="stable"
    66        compatibilite="[2.0.10;3.2.*]"
  • _plugins_/verifier/verifier/telephone.php

    r113903 r114565  
    2020 *   La valeur à vérifier.
    2121 * @param array $options
    22  *   [INUTILISE].
     22 *   pays
    2323 * @return string
    2424 *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
     
    3535
    3636        // Pour les prefixes, on accepte les notations +33 et 0033
    37         $prefixe_FR = '/^(\+|00)33/';
    38         $prefixe_ES = '/^(\+|00)34/';
    39         $prefixe_CH = '/^(\+|00)41/';
    40         if (preg_match($prefixe_FR, $tel)) {
    41                 $options['pays'] = 'FR';
    42                 $tel = preg_replace($prefixe_FR, '0', $tel);
     37        // si on trouve un indicatif de pays, il est prioritaire sur le pays par defaut passe en option
     38        $telephone_prefixes_pays = charger_fonction('telephone_prefixes_pays', 'verifier');
     39        $prefixes = $telephone_prefixes_pays();
     40        if (isset($options['prefixes_pays']) and $options['prefixes_pays']) {
     41                $prefixes = $prefixes +  $options['prefixes_pays'];
    4342        }
    44         if (preg_match($prefixe_ES, $tel)) {
    45                 $options['pays'] = 'ES';
    46                 $tel = preg_replace($prefixe_ES, '', $tel);
    47         }
    48         if (preg_match($prefixe_CH, $tel)) {
    49                 $options['pays'] = 'CH';
    50                 $tel = preg_replace($prefixe_CH, '0', $tel);
     43        foreach ($prefixes as $prefix => $code_pays) {
     44                $regexp = '/^(\+|00)'.$prefix.'/';
     45                if (preg_match($regexp, $tel)) {
     46                        $options['pays'] = $code_pays;
     47                        // on normalise le prefixe, mais on ne le remplace par par zero, car ça n'est valable que pour certains pays et ça casse la verif sur d'autres
     48                        $tel = preg_replace($regexp, '+'.$prefix, $tel);
     49                        break;
     50                }
    5151        }
    5252
    53         $pays = isset($options['pays']) ? $options['pays'] : null;
    54         switch ($pays) {
    55                 case 'CH':
    56                         if (!preg_match('/^0[0-9]{9}$/', $tel)) {
    57                                 return $erreur;
    58                         }
    59                         break;
    60                 case 'ES':
    61                         if (!preg_match('/^[69][0-9]{8}$/', $tel)) {
    62                                 return $erreur;
    63                         }
    64                         break;
    65                 case 'FR':
    66                         if (!preg_match('/^0[1-9][0-9]{8}$/', $tel)) {
    67                                 return $erreur;
    68                         }
    69                         break;
    70                 default:
    71                         // On interdit les 000 etc. mais je pense qu'on peut faire plus malin
    72                         // On interdit egalement les "numéros" tout en lettres
    73                         // TODO finaliser les numéros à la con
    74                         if (intval($tel) == 0) {
    75                                 return $erreur;
    76                         }
    77                         break;
     53        // si on connait le pays (par option ou par indicatif) et qu'on a une fonction de verification pour ce pays on utilise
     54        $pays = (isset($options['pays']) ? strtolower($options['pays']) : null);
     55        if ($pays and $verifier_telephone_pays = charger_fonction('telephone_pays_' . $options['pays'], 'verifier', true)) {
     56                if ($e = $verifier_telephone_pays($tel, $erreur)) {
     57                        return $e;
     58                }
     59                return $ok;
     60        }
     61
     62        // On interdit les 000 etc. mais je pense qu'on peut faire plus malin
     63        // On interdit egalement les "numéros" tout en lettres
     64        // TODO finaliser les numéros à la con
     65        if (intval($tel) == 0) {
     66                return $erreur;
    7867        }
    7968
    8069        return $ok;
    8170}
     71
     72
     73function verifier_telephone_prefixes_pays_dist() {
     74
     75        $indicatifs = array(
     76                '32' => 'be',
     77                '33' => 'fr',
     78                '34' => 'es',
     79                '41' => 'ch',
     80        );
     81
     82        return $indicatifs;
     83}
     84
     85
     86function verifier_telephone_pays_ch_dist($tel, $message_erreur_defaut) {
     87        if (!preg_match('/^(0|\+41)[0-9]{9}$/', $tel)) {
     88                return $message_erreur_defaut;
     89        }
     90}
     91
     92function verifier_telephone_pays_es_dist($tel, $message_erreur_defaut) {
     93        if (!preg_match('/^(\+34)?[69][0-9]{8}$/', $tel)) {
     94                return $message_erreur_defaut;
     95        }
     96}
     97
     98function verifier_telephone_pays_fr_dist($tel, $message_erreur_defaut) {
     99        if (!preg_match('/^(0|\+33)[1-9][0-9]{8}$/', $tel)) {
     100                return $message_erreur_defaut;
     101        }
     102}
     103
     104function verifier_telephone_pays_be_dist($tel, $message_erreur_defaut) {
     105        // Patterns
     106        $pattern = '/^(0|\+32)[0-9]{8}$/';
     107        $pattern_mobile = '/^(0|\+32)4(60|[789]\d)[0-9]{6}$/';
     108        if (!preg_match($pattern, $tel) and !preg_match($pattern_mobile, $tel)){
     109                return $message_erreur_defaut;
     110        }
     111}
Note: See TracChangeset for help on using the changeset viewer.