@ -6,49 +6,69 @@ include_spip('inc/saisies');
/**
* Lister les formulaires de modeles disponibles dans les dossiers modeles/
* les trie par ordre alphabétique de nom
*
* Par défaut retourne les modèles ignorés dans la config,
* on peut optionnellement les exclure.
*
* @staticvar array $liste_formulaires_modeles
* @param bool $exclure_ignores
* pour exclure les modèles ignorés dans la config
* @return array
*/
function inserer_modeles_lister_formulaires_modeles() {
static $liste_formulaires_modeles = false;
function inserer_modeles_lister_formulaires_modeles(bool $exclure_ignores = false): array {
static $listes_memoire;
$hash = ($exclure_ignores ? 1 : 0);
if (isset($listes_memoire[$hash])) {
return $listes_memoire[$hash] ?: [];
}
if ($liste_formulaires_modeles === false) {
$liste_formulaires_modeles = array();
$match = '[^-]*[.]yaml$';
$liste = find_all_in_path('modeles/', $match);
$liste_formulaires_modeles = array();
$match = '[^-]*[.]yaml$';
$liste = find_all_in_path('modeles/', $match);
if (count($liste)) {
include_spip('inc/yaml');
foreach ($liste as $formulaire => $chemin) {
$formulaire = str_replace('.yaml', '', $formulaire);//
$yaml_data = yaml_charger_inclusions(yaml_decode_file($chemin));
if (is_array($yaml_data)) {
$liste_formulaires_modeles[$formulaire] = array(
'nom' => $yaml_data['nom'],
'icone_barre' => isset($yaml_data['icone_barre']) ? inserer_modeles_find_icone_barre_path($yaml_data['icone_barre']) : ''
);
}
if (count($liste)) {
include_spip('inc/yaml');
foreach ($liste as $formulaire => $chemin) {
$formulaire = str_replace('.yaml', '', $formulaire);//
$yaml_data = yaml_charger_inclusions(yaml_decode_file($chemin));
if (is_array($yaml_data)) {
$liste_formulaires_modeles[$formulaire] = array(
'nom' => $yaml_data['nom'],
'icone_barre' => isset($yaml_data['icone_barre']) ? inserer_modeles_find_icone_barre_path($yaml_data['icone_barre']) : ''
);
}
}
}
// Traduire les chaines de langues des noms
$liste_formulaires_modeles = array_map(function($valeur) {
$valeur['nom'] = _T_ou_typo($valeur['nom']);
return $valeur;
}, $liste_formulaires_modeles);
// Traduire les chaines de langues des noms
$liste_formulaires_modeles = array_map(function($valeur) {
$valeur['nom'] = _T_ou_typo($valeur['nom']);
return $valeur;
}, $liste_formulaires_modeles);
// Puis les trier par ordre alphabétique
uasort($liste_formulaires_modeles, function($valeur1, $valeur2) {
if ($valeur1['nom'] > $valeur2['nom']) {
return 1;
} elseif ($valeur1['nom'] == $valeur2['nom']) {
return 0;
} else {
return -1;
}
});
}
// Puis les trier par ordre alphabétique
uasort($liste_formulaires_modeles, function($valeur1, $valeur2) {
if ($valeur1['nom'] > $valeur2['nom']) {
return 1;
} elseif ($valeur1['nom'] == $valeur2['nom']) {
return 0;
} else {
return -1;
}
});
$liste_formulaires_modeles = pipeline('inserer_modeles_lister_formulaires_modeles', $liste_formulaires_modeles);
// Retirer les modèles désactivés dans la config
if ($exclure_ignores === true) {
include_spip('inc/config');
$config_ignorer = lire_config('inserer_modeles/ignorer_modeles') ?? [];
foreach ($config_ignorer as $ignorer) {
unset($liste_formulaires_modeles[$ignorer]);
}
}
$listes_memoire[$hash] = $liste_formulaires_modeles;
return $liste_formulaires_modeles;
}