From e4caa42fc9e48f6d332956b546703769efe8a424 Mon Sep 17 00:00:00 2001 From: "marcimat@rezo.net" <> Date: Sat, 21 Jan 2012 17:36:28 +0000 Subject: [PATCH] =?UTF-8?q?On=20tente=20une=20option=20de=20normalisation?= =?UTF-8?q?=20sur=20verifier(),=20plut=C3=B4t=20que=20d'avoir=20une=20fonc?= =?UTF-8?q?tion=20normaliser()=20s=C3=A9parer,=20puisque=20Rastapopoulos?= =?UTF-8?q?=20pr=C3=A9f=C3=A8re=20comme=20=C3=A7a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 -- inc/normaliser.php | 32 -------------------- inc/verifier.php | 48 ++++++++++++++++++----------- lang/verifier_fr.php | 5 +++ normaliser/datepicker.php | 64 --------------------------------------- paquet.xml | 2 +- plugin.xml | 2 +- verifier/date.php | 56 ++++++++++++++++++++++++++++++++-- verifier/date.yaml | 10 ++++++ verifier/email.yaml | 2 +- 10 files changed, 102 insertions(+), 121 deletions(-) delete mode 100644 inc/normaliser.php delete mode 100644 normaliser/datepicker.php diff --git a/.gitattributes b/.gitattributes index cca1007..2c55545 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,7 +4,6 @@ aide/verifier_fonctions.php -text images/icones-infos.txt -text images/verifier-128.png -text inc/is_email.php -text -inc/normaliser.php -text inc/verifier.php -text lang/paquet-verifier_en.php -text lang/paquet-verifier_fr.php -text @@ -19,7 +18,6 @@ lang/verifier_fr_tu.php -text lang/verifier_it.php -text lang/verifier_pt_br.php -text lang/verifier_sk.php -text -normaliser/datepicker.php -text /paquet.xml -text /plugin.xml -text test/verifier.html -text diff --git a/inc/normaliser.php b/inc/normaliser.php deleted file mode 100644 index fa9d71f..0000000 --- a/inc/normaliser.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -// Sécurité -if (!defined("_ECRIRE_INC_VERSION")) return; - -/** - * Fonction de base de l'API de normalisation. - * (En cours de dev... sera peut etre a revoir) - * - */ -function inc_normaliser_dist($valeur, $type, $options=null){ - - // On vérifie que les options sont bien un tableau - if (!is_array($options)) - $options = array(); - - $erreur = ''; - - // On cherche si une fonction correspond au type existant - if ($normaliser = charger_fonction($type, 'normaliser', true)) { - $valeur_normalisee = $normaliser($valeur, $options, $erreur); - } - - return array( - 'erreur' => $erreur, - 'valeur' => $valeur_normalisee, - 'changement' => !$erreur and ($valeur_normalisee != $valeur) - ); -} - - -?> diff --git a/inc/verifier.php b/inc/verifier.php index de8b652..f73ea77 100644 --- a/inc/verifier.php +++ b/inc/verifier.php @@ -8,9 +8,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @param mixed $valeur La valeur a verifier. * @param string $type Le type de verification a appliquer. * @param array $options Un eventuel tableau d'options suivant le type. + * @param array $valeur_normalisee + * Si des options de verification modifient la valeur entrante (normalisent), + * alors la valeur modifie sera stockee dans cette variable. * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur. */ -function inc_verifier_dist($valeur, $type, $options=null){ +function inc_verifier_dist($valeur, $type, $options=null, &$valeur_normalisee=null){ // On vérifie que les options sont bien un tableau if (!is_array($options)) @@ -21,7 +24,7 @@ function inc_verifier_dist($valeur, $type, $options=null){ // On cherche si une fonction correspondant au type existe if ($verifier = charger_fonction($type, 'verifier',true)){ - $erreur = $verifier($valeur, $options); + $erreur = $verifier($valeur, $options, $valeur_normalisee); } // On passe le tout dans le pipeline du meme nom @@ -31,7 +34,7 @@ function inc_verifier_dist($valeur, $type, $options=null){ 'args' => array( 'valeur' => $valeur, 'type' => $type, - 'options' => $options + 'options' => $options, ), 'data' => $erreur ) @@ -42,44 +45,53 @@ function inc_verifier_dist($valeur, $type, $options=null){ /** * Liste toutes les vérifications possibles - * + * + * @param string $repertoire + * Dans quel repertoire chercher les yaml. + * * @return Retourne un tableau listant les vérifications et leurs options */ -function verifier_lister_disponibles(){ - static $verifications = null; - - if (is_null($verifications)){ - $verifications = array(); - $liste = find_all_in_path('verifier/', '.+[.]yaml$'); +function verifier_lister_disponibles($repertoire='verifier'){ + static $verifications = array(); + + if (is_null($verifications[$repertoire])){ + $verifications[$repertoire] = array(); + $liste = find_all_in_path("$repertoire/", '.+[.]yaml$'); if (count($liste)){ foreach ($liste as $fichier=>$chemin){ - $type_verif = preg_replace(',[.]yaml$,i', '', $fichier); + $type = preg_replace(',[.]yaml$,i', '', $fichier); $dossier = str_replace($fichier, '', $chemin); // On ne garde que les vérifications qui ont bien la fonction ! - if (charger_fonction($type_verif, 'verifier', true) + if (charger_fonction($type, $repertoire, true) and ( - is_array($verif = verifier_charger_infos($type_verif)) + is_array($verif = verifier_charger_infos($type, $repertoire)) ) ){ - $verifications[$type_verif] = $verif; + $verifications[$repertoire][$type] = $verif; } } } } - return $verifications; + return $verifications[$repertoire]; } + /** * Charger les informations contenues dans le yaml d'une vérification * - * @param string $type_verif Le type de la vérification + * @param string $type_verif + * Le type de la vérification + * + * @param string $repertoire + * Dans quel repertoire chercher les yaml. + * * @return array Un tableau contenant le YAML décodé */ -function verifier_charger_infos($type_verif){ +function verifier_charger_infos($type_verif, $repertoire='verifier'){ include_spip('inc/yaml'); - $fichier = find_in_path("verifier/$type_verif.yaml"); + $fichier = find_in_path("$repertoire/$type_verif.yaml"); $verif = yaml_decode_file($fichier); if (is_array($verif)){ $verif['titre'] = $verif['titre'] ? _T_ou_typo($verif['titre']) : $type_verif; diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php index 17e519d..2e357fe 100644 --- a/lang/verifier_fr.php +++ b/lang/verifier_fr.php @@ -38,6 +38,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_url_protocole' => 'L\'adresse saisie <em>(@url@)</em> doit commencer par @protocole@', 'erreur_url_protocole_exact' => 'L\'adresse saisie <em>(@url@)</em> ne commence pas par un protocole valide (http:// par exemple)', + // N + 'normaliser_option_date' => 'Normaliser la date ?', + 'normaliser_option_date_aucune' => 'Non', + 'normaliser_option_date_en_datetime' => 'Au format «Datetime» (pour SQL)', + // O 'option_decimal_nb_decimales_label' => 'Nombre de décimales après la virgule', 'option_email_disponible_label' => 'Adresse disponible', diff --git a/normaliser/datepicker.php b/normaliser/datepicker.php deleted file mode 100644 index eafb925..0000000 --- a/normaliser/datepicker.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php - -// Sécurité -if (!defined("_ECRIRE_INC_VERSION")) return; - -/** - * Convertir une date vers un type de format - */ -function normaliser_datepicker_dist($valeur, $options=array(), &$erreur) { - - if (!isset($options['format'])) { - $erreur = "Pas de format de date transmis pour normalisation."; - return; - } - - $format = $options['format']; - $normaliser = charger_fonction('datepicker_'.$format, 'normaliser', true); - - if (!$normaliser) { - $erreur = "Pas de normalisation trouvee pour 'date' vers '$format'"; - return; - } - - return $normaliser($valeur, $options, $erreur); -} - - -/** - * Convertir une date en datetime - * -**/ -function normaliser_datepicker_datetime_dist($valeur, $options, &$erreur) { - $defaut = '0000-00-00 00:00:00'; - - if (!$valeur) { - return $defaut; - } - - $date = $valeur; - if (isset($options['heure'])) { - $date .= (' ' . $options['heure'] . ':00'); - } else { - $date .= ' 00:00:00'; - } - - include_spip('inc/filtres'); - if (!$date = recup_date($date)) { - $erreur = "Impossible d'extraire la date de $date"; - return; - } - - if (!($date = mktime($date[3], $date[4], 0, (int)$date[1], (int)$date[2], (int)$date[0]))) { - // mauvais format de date - $erreur = "Impossible de normaliser la date..."; - return false; - } - - $date = date("Y-m-d H:i:s", $date); - $date = vider_date($date); // enlever les valeurs considerees comme nulles (1 1 1970, etc...) - if (!$date) { - $date = $defaut; - } - return $date; -} diff --git a/paquet.xml b/paquet.xml index 7bea50b..abbb4ae 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@ <paquet prefix="verifier" categorie="outil" - version="0.1.11" + version="0.1.12" etat="test" compatibilite="[2.0.10;3.0.99]" logo="images/verifier-128.png" diff --git a/plugin.xml b/plugin.xml index 58d6c9f..dda729a 100644 --- a/plugin.xml +++ b/plugin.xml @@ -9,7 +9,7 @@ <auteur>[Les Développements Durables->http://www.ldd.fr]</auteur> <icon>images/verifier-128.png</icon> <licence>GPL v3</licence> - <version>0.1.11</version> + <version>0.1.12</version> <etat>test</etat> <description> <multi> diff --git a/verifier/date.php b/verifier/date.php index f2a2e8a..868fdbd 100644 --- a/verifier/date.php +++ b/verifier/date.php @@ -14,11 +14,13 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @param string $valeur * La valeur à vérifier. * @param array $options - * tableau d'options [NON UTILISE]. + * tableau d'options. + * @param null $valeur_normalisee + * Si normalisation a faire, la variable sera rempli par la date normalisee. * @return string * Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur. */ -function verifier_date_dist($valeur, $options=array()){ +function verifier_date_dist($valeur, $options=array(), &$valeur_normalisee){ $erreur = _T('verifier:erreur_date_format'); if (!is_string($valeur)) return $erreur; @@ -45,6 +47,56 @@ function verifier_date_dist($valeur, $options=array()){ // validité de la date $erreur = _T('verifier:erreur_date'); if (!checkdate($mois, $jour, $annee)) return $erreur; + + // normaliser si demandé + if ($options['normaliser'] and $options['normaliser'] == 'datetime') { + $valeur_normalisee = normaliser_date_datetime_dist($valeur, $options, $ok); + } return $ok; } + + + + +/** + * Convertir une date en datetime + * +**/ +function normaliser_date_datetime_dist($valeur, $options, &$erreur) { + $defaut = '0000-00-00 00:00:00'; + + if (!$valeur) { + return $defaut; + } + + $date = str_replace('-', '/', $valeur); // formater en jj/mm/aaaa + + if (isset($options['heure'])) { + $date .= (' ' . $options['heure'] . ':00'); + } else { + $date .= ' 00:00:00'; + } + + include_spip('inc/filtres'); + if (!$date = recup_date($date)) { + $erreur = "Impossible d'extraire la date de $date"; + return false; + } + + if (!($date = mktime($date[3], $date[4], 0, (int)$date[1], (int)$date[2], (int)$date[0]))) { + // mauvais format de date + $erreur = "Impossible de normaliser la date..."; + return false; + } + + $date = date("Y-m-d H:i:s", $date); + $date = vider_date($date); // enlever les valeurs considerees comme nulles (1 1 1970, etc...) + + if (!$date) { + $date = $defaut; + } + + return $date; +} + diff --git a/verifier/date.yaml b/verifier/date.yaml index 90a9c54..aef4408 100644 --- a/verifier/date.yaml +++ b/verifier/date.yaml @@ -1,3 +1,13 @@ titre: '<:verifier:type_date:>' description: '<:verifier:type_date_description:>' +options: + - + saisie: 'radio' + options: + nom: 'normaliser' + label: '<:verifier:normaliser_option_date:>' + datas: + aucune: '<:verifier:normaliser_option_date_aucune:>' + datetime: '<:verifier:normaliser_option_date_en_datetime:>' + defaut: 'datetime' diff --git a/verifier/email.yaml b/verifier/email.yaml index fd6ea33..bbd904f 100644 --- a/verifier/email.yaml +++ b/verifier/email.yaml @@ -10,7 +10,7 @@ options: datas: normal: '<:verifier:option_email_mode_normal:>' strict: '<:verifier:option_email_mode_strict:>' - rfc5322: '<:verifier:option_email_mode_rfc5322:>' + rfc5322: '<:verifier:option_email_mode_5322:>' defaut: 'normal' - saisie: 'case' -- GitLab