Your IP : 216.73.216.251


Current Path : /home/atelierpru/provence/plugins/auto/verifier/v1.9.4/verifier/
Upload File :
Current File : /home/atelierpru/provence/plugins/auto/verifier/v1.9.4/verifier/telephone.php

<?php
/**
 * API de vérification : vérification de la validité d'un numéro de téléphone
 *
 * @plugin     verifier
 * @copyright  2018
 * @author     Les Développements Durables
 * @licence    GNU/GPL
 */

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

/**
 * Vérifie un numéro de téléphone. Pour l'instant seulement avec le schéma français.
 *
 * @param string $valeur
 *   La valeur à vérifier.
 * @param array $options
 *   pays
 * @return string
 *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
 */
function verifier_telephone_dist($valeur, $options = array()) {
	$erreur = _T('verifier:erreur_telephone');
	if (!is_string($valeur)) {
		return $erreur;
	}
	$ok = '';

	// On accepte differentes notations, les points, les tirets, les espaces, les slashes
	$tel = preg_replace('#\.|/|-| #i', '', $valeur);

	// Pour les prefixes, on accepte les notations +33 et 0033
	// si on trouve un indicatif de pays, il est prioritaire sur le pays par defaut passe en option
	$telephone_prefixes_pays = charger_fonction('telephone_prefixes_pays', 'verifier');
	$prefixes = $telephone_prefixes_pays();
	if (isset($options['prefixes_pays']) and $options['prefixes_pays']) {
		$prefixes = $prefixes +  $options['prefixes_pays'];
	}
	foreach ($prefixes as $prefix => $code_pays) {
		$regexp = '/^(\+|00)'.$prefix.'/';
		if (preg_match($regexp, $tel)) {
			$options['pays'] = $code_pays;
			// 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
			$tel = preg_replace($regexp, '+'.$prefix, $tel);
			break;
		}
	}

	// si on connait le pays (par option ou par indicatif) et qu'on a une fonction de verification pour ce pays on utilise
	$pays = (isset($options['pays']) ? strtolower($options['pays']) : null);
	if ($pays and $verifier_telephone_pays = charger_fonction('telephone_pays_' . $options['pays'], 'verifier', true)) {
		if ($e = $verifier_telephone_pays($tel, $erreur)) {
			return $e;
		}
		return $ok;
	}

	// On interdit les 000 etc. mais je pense qu'on peut faire plus malin
	// On interdit egalement les "numéros" tout en lettres
	// TODO finaliser les numéros à la con
	if (intval($tel) == 0) {
		return $erreur;
	}

	return $ok;
}


function verifier_telephone_prefixes_pays_dist() {

	$indicatifs = array(
		'32' => 'be',
		'33' => 'fr',
		'34' => 'es',
		'41' => 'ch',
	);

	return $indicatifs;
}


function verifier_telephone_pays_ch_dist($tel, $message_erreur_defaut) {
	if (!preg_match('/^(0|\+41)[0-9]{9}$/', $tel)) {
		return $message_erreur_defaut;
	}
}

function verifier_telephone_pays_es_dist($tel, $message_erreur_defaut) {
	if (!preg_match('/^(\+34)?[69][0-9]{8}$/', $tel)) {
		return $message_erreur_defaut;
	}
}

function verifier_telephone_pays_fr_dist($tel, $message_erreur_defaut) {
	if (!preg_match('/^(0|\+33)[1-9][0-9]{8}$/', $tel)) {
		return $message_erreur_defaut;
	}
}

function verifier_telephone_pays_be_dist($tel, $message_erreur_defaut) {
	// Patterns
	$pattern = '/^(0|\+32)[0-9]{8}$/';
	$pattern_mobile = '/^(0|\+32)4(60|[789]\d)[0-9]{6}$/';
	if (!preg_match($pattern, $tel) and !preg_match($pattern_mobile, $tel)){
		return $message_erreur_defaut;
	}
}