[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / verifier / inc / verifier.php
1 <?php
2
3 // Sécurité
4 if (!defined('_ECRIRE_INC_VERSION')) {
5 return;
6 }
7
8 /**
9 * Fonction de base de l'API de vérification.
10 * @param mixed $valeur La valeur a verifier.
11 * @param string $type Le type de verification a appliquer.
12 * @param array $options Un eventuel tableau d'options suivant le type.
13 * @param array $valeur_normalisee
14 * Si des options de verification modifient la valeur entrante (normalisent),
15 * alors la valeur modifie sera stockee dans cette variable.
16 * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
17 */
18 function inc_verifier_dist($valeur, $type, $options = null, &$valeur_normalisee = null) {
19
20 // On vérifie que les options sont bien un tableau
21 if (!is_array($options)) {
22 $options = array();
23 }
24
25 // Si la valeur est vide, il n'y a rien a verifier donc c'est bon
26 if (is_null($valeur) or (is_string($valeur) and $valeur == '')) {
27 return '';
28 }
29 // Si c'est une date avec horaire c'est un tableau
30 if (is_array($valeur) and isset($valeur['date']) and $valeur['date'] == '') {
31 return '';
32 }
33
34 // On cherche si une fonction correspondant au type existe
35 if ($verifier = charger_fonction($type, 'verifier', true)) {
36 $erreur = $verifier($valeur, $options, $valeur_normalisee);
37 }
38
39 // On passe le tout dans le pipeline du meme nom
40 $erreur = pipeline(
41 'verifier',
42 array(
43 'args' => array(
44 'valeur' => $valeur,
45 'type' => $type,
46 'options' => $options,
47 ),
48 'data' => $erreur
49 )
50 );
51
52 return $erreur;
53 }
54
55 /**
56 * Liste toutes les vérifications possibles
57 *
58 * @param string $repertoire
59 * Dans quel repertoire chercher les yaml.
60 *
61 * @return Retourne un tableau listant les vérifications et leurs options
62 */
63 function verifier_lister_disponibles($repertoire = 'verifier') {
64 static $verifications = array();
65
66 if (!isset($verifications[$repertoire])) {
67 $verifications[$repertoire] = array();
68 $liste = find_all_in_path("$repertoire/", '.+[.]yaml$');
69
70 if (count($liste)) {
71 foreach ($liste as $fichier => $chemin) {
72 $type = preg_replace(',[.]yaml$,i', '', $fichier);
73 $dossier = str_replace($fichier, '', $chemin);
74 // On ne garde que les vérifications qui ont bien la fonction !
75 if (charger_fonction($type, $repertoire, true)
76 and (
77 is_array($verif = verifier_charger_infos($type, $repertoire))
78 )
79 ) {
80 $verifications[$repertoire][$type] = $verif;
81 }
82 }
83 }
84 }
85
86 return $verifications[$repertoire];
87 }
88
89
90 /**
91 * Charger les informations contenues dans le yaml d'une vérification
92 *
93 * @param string $type_verif
94 * Le type de la vérification
95 *
96 * @param string $repertoire
97 * Dans quel repertoire chercher les yaml.
98 *
99 * @return array Un tableau contenant le YAML décodé
100 */
101 function verifier_charger_infos($type_verif, $repertoire = 'verifier') {
102 include_spip('inc/yaml');
103 $fichier = find_in_path("$repertoire/$type_verif.yaml");
104 $verif = yaml_decode_file($fichier);
105 if (is_array($verif)) {
106 $verif['titre'] = (isset($verif['titre']) and $verif['titre']) ? _T_ou_typo($verif['titre']) : $type_verif;
107 $verif['description'] = (isset($verif['description']) and $verif['description']) ? _T_ou_typo($verif['description']) : '';
108 $verif['icone'] = (isset($verif['icone']) and $verif['icone']) ? _T_ou_typo($verif['icone']) : '';
109 }
110 return $verif;
111 }