You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

156 lines
4.4 KiB

<?php
/**
* Fonctions de l'API de vérification
*
* @plugin verifier
* @copyright 2018
* @author Les Développements Durables
* @licence GNU/GPL
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction de base de l'API de vérification.
*
* @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, &$valeur_normalisee = null) {
$erreur = array();
// On vérifie que les options sont bien un tableau
if (!is_array($options)) {
$options = array();
}
$valeur_vide = (is_null($valeur) or (is_string($valeur) and $valeur == ''));
// Si la valeur est vide, il n'y a rien a verifier donc c'est bon
if ($valeur_vide
and empty($options['normaliser'])
) {
return '';
}
// On cherche si une fonction correspondant au type existe
if ($verifier = charger_fonction($type, 'verifier', true)) {
$erreur = $verifier($valeur, $options, $valeur_normalisee);
}
// On passe le tout dans le pipeline du meme nom
$erreur = pipeline(
'verifier',
array(
'args' => array(
'valeur' => $valeur,
'valeur_normalisee' => &$valeur_normalisee,
'type' => $type,
'options' => $options,
),
'data' => $erreur
)
);
// Si la valeur est vide, on garde juste la normalisation
if ($valeur_vide) {
$erreur = '';
}
return $erreur;
}
/**
* Liste toutes les vérifications possibles
*
* @param string $repertoire
* Dans quel repertoire chercher les yaml.
*
* @return array Retourne un tableau listant les vérifications et leurs options
*/
function verifier_lister_disponibles($repertoire = 'verifier') {
static $verifications = array();
if (!isset($verifications[$repertoire])) {
$verifications[$repertoire] = array();
$liste = find_all_in_path("$repertoire/", '.+[.]yaml$');
if (count($liste)) {
foreach ($liste as $fichier => $chemin) {
$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, $repertoire, true)
and (
is_array($verif = verifier_charger_infos($type, $repertoire))
)
) {
$verifications[$repertoire][$type] = $verif;
}
}
}
}
return $verifications[$repertoire];
}
/**
* Fonction de callback pour uasort()
* Afin de trier selon le titre
* @param array $array1 premier élèment
* @param array $array2 second élèment
* @return int 1,0,-1
**/
function verifier_trier_par_titre($array1,$array2) {
if (isset($array1['titre']) and isset($array2['titre'])) {
if ($array1['titre'] == $array2['titre']) {
return 0;
} elseif ($array1['titre'] > $array2['titre']) {
return 1;
} else {
return -1;
}
} else {
return 0;
}
}
/**
* Charger les informations contenues dans le yaml d'une vérification
*
* @note
* Cette fonction nécessite le plugin Yaml
* ET un des plugins fournissant _T_ou_typo() : Bonux ou Saisies.
*
* @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, $repertoire = 'verifier') {
$verif = array();
include_spip('inc/utils'); // pour test_plugin_actif()
if (test_plugin_actif('yaml')) {
include_spip('inc/yaml');
include_spip('inc/filtres'); // pour appliquer_filtre()
$fichier = find_in_path("$repertoire/$type_verif.yaml");
$verif = yaml_decode_file($fichier);
if (is_array($verif)) {
$verif['titre'] = (isset($verif['titre']) and $verif['titre']) ? appliquer_filtre($verif['titre'], '_T_ou_typo', true) : $type_verif;
$verif['description'] = (isset($verif['description']) and $verif['description']) ? appliquer_filtre($verif['description'], '_T_ou_typo', true) : '';
$verif['icone'] = (isset($verif['icone']) and $verif['icone']) ? appliquer_filtre($verif['icone'], '_T_ou_typo', true) : '';
}
}
return $verif;
}