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.
 
 

124 lines
3.8 KiB

<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Lister les formulaires de modeles disponibles dans les dossiers modeles/
* les trie par ordre alphabétique de nom
* @staticvar array $liste_formulaires_modeles
* @return array
*/
function inserer_modeles_lister_formulaires_modeles() {
static $liste_formulaires_modeles = false;
if ($liste_formulaires_modeles === false) {
$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) {
$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);
// 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;
}
});
}
return $liste_formulaires_modeles;
}
/**
* Charger les informations d'un formulaire de modele
*
* @staticvar array $infos_formulaires_modeles
* @return array
*/
function charger_infos_formulaire_modele($formulaire) {
static $infos_formulaires_modeles = array();
if (!isset($infos_formulaires_modeles[$formulaire])) {
if (substr($formulaire, -5) != '.yaml') {
$formulaire .= '.yaml';
}
if ($chemin = find_in_path($formulaire, 'modeles/')) {
include_spip('inc/yaml');
$infos_formulaires_modeles[$formulaire] = yaml_charger_inclusions(yaml_decode_file($chemin));
$infos_formulaires_modeles[$formulaire]['parametres'] = inserer_modeles_definir_defaut($infos_formulaires_modeles[$formulaire]['parametres']);
}
}
return $infos_formulaires_modeles[$formulaire];
}
/**
* Lis une description tabulaire des saisies de description d'un modeles
* Cherche les paramètres defaut
* si présent, regarde si appelle à une fonction
* et l'appliquer au options de base
* et cela recursivement aux sous saisies
* @param array $saisies
* @return array()
*/
function inserer_modeles_definir_defaut($saisies) {
foreach ($saisies as &$saisie) {
if (!is_array($saisie)) {
return $tableau;
}
$options = &$saisie['options'];
if (isset($options['defaut']) and strpos($options['defaut'], 'fonction:') === 0) {
$defaut = &$options['defaut'];
$eval = '$defaut = '.str_replace('fonction:', '', $defaut).';';
eval($eval);
}
if (isset($saisie['saisies'])) {
$saisie['saisies'] = inserer_modeles_definir_defaut($saisie['saisies']);
}
}
return $saisies;
}
/**
* Retrouver l'icone :
* - d'abord dans icones_barre
* - sinon dans le thème / images (et du coup on peut jouer avec png/svg)
* - à défaut dans find_in_path
* S'assure que l'icone ne fait pas plus de 16 px, pour tenir dans la barre du porte plume.
* @param string $nom
* @return string chemin
**/
function inserer_modeles_find_icone_barre_path($nom) {
if (!$chemin = find_in_path("icones_barre/$nom")) {
if (!$chemin = find_in_theme("images/$nom")) {
if(!$chemin = find_in_path($nom)) {
return '';
}
}
}
include_spip('inc/filtres');
include_spip('inc/filtres_images_mini');
$chemin = preg_replace('#\?.*$#', '', $chemin);//Au cas où find_in_theme nous return un truc genre gis-xx.svg?16px
return extraire_attribut(image_reduire($chemin, 16), 'src');//On force la reduction à 16px, pour le porteplume
}