source: spip-zone/_plugins_/verifier/inc/verifier.php @ 115390

Last change on this file since 115390 was 115390, checked in by rastapopoulos@…, 14 months ago

Pour la vérif date, on ne fait plus de dérogation en dur, mais on gère le cas où c'est vide dans la fonction dédiée. En effet, même si c'est vide, on veut absolument passer dedans car ça peut être normalisé ! Là si c'était vide, pas de normalisation et donc pétage de SQL si on devait avoir un datetime. Dans tous les cas, la fonction renvoie pareil qu'avant : chaine vide, si la date est vide, mais c'est fait en interne.

File size: 3.8 KB
Line 
1<?php
2/**
3 * Fonctions de l'API de vérification
4 *
5 * @plugin     verifier
6 * @copyright  2018
7 * @author     Les Développements Durables
8 * @licence    GNU/GPL
9 */
10
11// Sécurité
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16/**
17 * Fonction de base de l'API de vérification.
18 *
19 * @param mixed $valeur La valeur a verifier.
20 * @param string $type Le type de verification a appliquer.
21 * @param array $options Un eventuel tableau d'options suivant le type.
22 * @param array $valeur_normalisee
23 *              Si des options de verification modifient la valeur entrante (normalisent),
24 *              alors la valeur modifie sera stockee dans cette variable.
25 * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
26 */
27function inc_verifier_dist($valeur, $type, $options = null, &$valeur_normalisee = null) {
28
29        $erreur = array();
30        // On vérifie que les options sont bien un tableau
31        if (!is_array($options)) {
32                $options = array();
33        }
34
35        // Si la valeur est vide, il n'y a rien a verifier donc c'est bon
36        if (is_null($valeur) or (is_string($valeur) and $valeur == '')) {
37                return '';
38        }
39
40        // On cherche si une fonction correspondant au type existe
41        if ($verifier = charger_fonction($type, 'verifier', true)) {
42                $erreur = $verifier($valeur, $options, $valeur_normalisee);
43        }
44
45        // On passe le tout dans le pipeline du meme nom
46        $erreur = pipeline(
47                'verifier',
48                array(
49                        'args' => array(
50                                'valeur' => $valeur,
51                                'type' => $type,
52                                'options' => $options,
53                        ),
54                        'data' => $erreur
55                )
56        );
57
58        return $erreur;
59}
60
61/**
62 * Liste toutes les vérifications possibles
63 *
64 * @param string $repertoire
65 *              Dans quel repertoire chercher les yaml.
66 *
67 * @return array Retourne un tableau listant les vérifications et leurs options
68 */
69function verifier_lister_disponibles($repertoire = 'verifier') {
70        static $verifications = array();
71
72        if (!isset($verifications[$repertoire])) {
73                $verifications[$repertoire] = array();
74                $liste = find_all_in_path("$repertoire/", '.+[.]yaml$');
75
76                if (count($liste)) {
77                        foreach ($liste as $fichier => $chemin) {
78                                $type = preg_replace(',[.]yaml$,i', '', $fichier);
79                                $dossier = str_replace($fichier, '', $chemin);
80                                // On ne garde que les vérifications qui ont bien la fonction !
81                                if (charger_fonction($type, $repertoire, true)
82                                        and (
83                                                is_array($verif = verifier_charger_infos($type, $repertoire))
84                                        )
85                                ) {
86                                        $verifications[$repertoire][$type] = $verif;
87                                }
88                        }
89                }
90        }
91
92        return $verifications[$repertoire];
93}
94
95/**
96 * Fonction de callback pour uasort()
97 * Afin de trier selon le titre
98 * @param array $array1 premier élèment
99 * @param array $array2 second élèment
100 * @return int 1,0,-1
101 **/
102function verifier_trier_par_titre($array1,$array2) {
103        if (isset($array1['titre']) and isset($array2['titre'])) {
104                if ($array1['titre'] == $array2['titre']) {
105                        return 0;
106                } elseif ($array1['titre'] > $array2['titre']) {
107                        return 1;
108                } else {
109                        return -1;
110                }
111        } else {
112                return 0;
113        }
114}
115
116/**
117 * Charger les informations contenues dans le yaml d'une vérification
118 *
119 * @param string $type_verif
120 *              Le type de la vérification
121 *
122 * @param string $repertoire
123 *              Dans quel repertoire chercher les yaml.
124 *
125 * @return array Un tableau contenant le YAML décodé
126 */
127function verifier_charger_infos($type_verif, $repertoire = 'verifier') {
128        $verif = array();       
129
130        if (defined('_DIR_PLUGIN_YAML')) {
131                include_spip('inc/yaml');
132                $fichier = find_in_path("$repertoire/$type_verif.yaml");
133
134                $verif = yaml_decode_file($fichier);
135                if (is_array($verif)) {
136                        $verif['titre']       = (isset($verif['titre'])       and $verif['titre'])       ? _T_ou_typo($verif['titre']) : $type_verif;
137                        $verif['description'] = (isset($verif['description']) and $verif['description']) ? _T_ou_typo($verif['description']) : '';
138                        $verif['icone']       = (isset($verif['icone'])       and $verif['icone'])       ? _T_ou_typo($verif['icone']) : '';
139                }
140        }
141        return $verif;
142}
Note: See TracBrowser for help on using the repository browser.