Browse Source

fix(#13): exclure les modèles ignorés dans la barre d'édition également

Pour cela on ajoute une option à la fonction qui liste les modèles pour exclure optionnellement ceux désactivés dans la config.
Par défaut son fonctionnement ne change pas, elle continue à tout lister comme avant.

Fix #13
master
tcharlss 8 months ago committed by Maïeul Rouquette
parent
commit
a8c0d6cea8
  1. 7
      CHANGELOG.md
  2. 7
      formulaires/inserer_modeles.php
  3. 86
      inc/inserer_modeles.php
  4. 6
      inserer_modeles_pipelines.php

7
CHANGELOG.md

@ -0,0 +1,7 @@
# CHANGELOG
## Unreleased
### Fixed
- #13 : exclure également de la barre d'outils les modèles désactivés dans la config/en pipeline

7
formulaires/inserer_modeles.php

@ -15,12 +15,7 @@ function formulaires_inserer_modeles_charger_dist($formulaire_modele, $modalbox,
}
}
if ((!_request('formulaire_modele') && $formulaire_modele=='') || _request('annuler')) {
$modeles_dispo = inserer_modeles_lister_formulaires_modeles();
include_spip('inc/config');
$config_ignorer = lire_config('inserer_modeles/ignorer_modeles') ?? [];
foreach ($config_ignorer as $ignorer) {
unset($modeles_dispo[$ignorer]);
}
$modeles_dispo = inserer_modeles_lister_formulaires_modeles(true);
$contexte['_liste_formulaires_modeles'] = $modeles_dispo;
} else {
if ($formulaire_modele != '') {

86
inc/inserer_modeles.php

@ -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;
}

6
inserer_modeles_pipelines.php

@ -24,7 +24,7 @@ function inserer_modeles_affiche_droite($flux) {
$objets = inserer_modeles_objets();
if (in_array($flux['args']['exec'], $objets)) {
include_spip('inc/inserer_modeles');
if (count(inserer_modeles_lister_formulaires_modeles()) > 0) {
if (count(inserer_modeles_lister_formulaires_modeles(true)) > 0) {
$flux['data'] .= recuperer_fond('inserer_modeles', $flux['args']);
}
}
@ -36,7 +36,7 @@ function inserer_modeles_affiche_droite($flux) {
function inserer_modeles_porte_plume_barre_pre_charger($barres) {
include_spip('inc/inserer_modeles');
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles();
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles(true);
if (count($formulaires_modeles) > 0) {
$barre = &$barres['edition'];
$barre->ajouterApres('grpCaracteres', array(
@ -84,7 +84,7 @@ function inserer_modeles_porte_plume_barre_pre_charger($barres) {
function inserer_modeles_porte_plume_lien_classe_vers_icone($flux) {
include_spip('inc/inserer_modeles');
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles();
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles(true);
if (count($formulaires_modeles) > 0) {
$icones = array();
$icones['outil_inserer_modeles'] = inserer_modeles_find_icone_barre_path('modele-xx.svg');

Loading…
Cancel
Save