Valider 20450bf8 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

trouve_modele reprend son role initial limite au cas de modeles/

et on delegue a trouver_fond la tache de trouver un fond dans le chemin en prenant en compte son extension.

Elle s'enrichit d'un argument optionnel booleen permettant de retourner son resultat sous forme de tableau type pathinfo
dont la valeur 'extension' est toujours renseignee (meme en cas d'echec), et dont la valeur 'fond' contient le nom du fichier sans l'extension.
 
Cela permet d'eviter de mettre l'extension en dur dans styliser.
Les plugins pourront utiliser cette fonction, et continuer a etre compatible avec les anciennes versions de SPIP simplement
en la definissant si elle n'existe pas
parent cff230f3
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -35,7 +35,7 @@ function existe_formulaire($form)

	if (!$form) return ''; // on ne sait pas, le nom du formulaire n'est pas fourni ici

	return trouve_modele($form, 'formulaires/') ? $form : false;
	return trouver_fond($form, 'formulaires/') ? $form : false;
}


+38 −9
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1826,22 +1826,51 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
		return $options['trim'] ? ltrim($texte) : $texte;
}

// Trouve un squelette, par defaut dans le repertoire modeles/
// Attention, si le 2arg fourni, il doit avoir le / final 
function trouve_modele($nom, $dir='modeles/')
{
	return find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir);
/**
 * Trouve un squelette dans le repertoire modeles/
 *
 * @param  $nom
 * @return string
 */
function trouve_modele($nom) {
	return trouver_fond($nom,'modeles/');
}

/**
 * Trouver un squelette dans le chemin
 * on peut specifier un sous-dossier dans $dir
 * si $pathinfo est a true, retourne un tableau avec
 * les composantes du fichier trouve
 * + le chemin complet sans son extension dans fond
 *
 * @param string $nom
 * @param string $dir
 * @param bool $pathinfo
 * @return array|string
 */
function trouver_fond($nom, $dir='', $pathinfo = false) {
	$f = find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir?rtrim($dir,'/').'/':'');
  if (!$pathinfo) return $f;
  // renvoyer un tableau detaille si $pathinfo==true
	$p = pathinfo($f);
  if (!$p['extension'])
	  $p['extension'] = _EXTENSION_SQUELETTES;
  if (!$p['filename'])
	   $p['filename'] = ($p['basename']?substr($p['basename'],0,-strlen($p['extension'])-1):'');
	$p['fond'] = ($f?substr($f,0,-strlen($p['extension'])-1):'');
  return $p;
}

function tester_url_ecrire($nom){
	// tester si c'est une page en squelette
	if (trouve_modele($nom, 'prive/squelettes/contenu/'))
	if (trouver_fond($nom, 'prive/squelettes/contenu/'))
		return 'fond';
	// compat skels orthogonaux version precedente
	elseif (trouve_modele($nom, 'prive/exec/'))
	elseif (trouver_fond($nom, 'prive/exec/'))
		return 'fond_monobloc';
	// attention, il ne faut pas inclure l'exec ici car sinon on modifie l'environnement
	// par un simple #URL_ECRIRE dans un squelette (cas d'un define en debut d'exec/nom )
	// attention, il ne faut pas inclure l'exec ici
	// car sinon #URL_ECRIRE provoque des inclusions
	// et des define intrusifs potentiels
	return (find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:'';
}

+5 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -42,12 +42,9 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
	// trouver un squelette du nom demande
	// ne rien dire si on ne trouve pas, 
	// c'est l'appelant qui sait comment gerer la situation
	$squelette = trouve_modele($fond,"");
	
	// supprimer l'extension pour pouvoir affiner par id_rubrique ou par langue
	if ($squelette AND preg_match('/^(.*)[.](\w+)$/', $squelette, $r)) {
		list(, $squelette, $ext) = $r;
	} else $ext = 'html'; // valeur par defaut, historique.
	// ou les plugins qui feront mieux dans le pipeline
	$squelette = trouver_fond($fond,"",true);
	$ext = $squelette['extension'];

	$flux = array(
		'args' => array(
@@ -58,7 +55,7 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
			'contexte' => $contexte, // le style d'un objet peut dependre de lui meme
			'connect' => $connect
		),
		'data' => $squelette,
		'data' => $squelette['fond'],
	);

	if (test_espace_prive() OR defined('_ZPIP')) {
+13 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -83,8 +83,10 @@ function public_styliser_par_z_dist($flux){
				if (!isset($disponible[$fond]))
					$disponible[$fond] = z_contenu_disponible($prefix_path,$z_contenu,$fond,$ext);

				if ($disponible[$fond])
					$flux['data'] = substr(find_in_path($prefix_path."page.$ext"), 0, - strlen(".$ext"));
				if ($disponible[$fond]) {
					$flux['data'] = trouver_fond("page",$prefix_path,true);
			    $flux['data'] = $flux['data']['fond'];
				}
			}

			// echaffaudage :
@@ -142,8 +144,9 @@ function public_styliser_par_z_dist($flux){
			AND $dir = explode('/',$dir)
			AND $dir = reset($dir)
			AND in_array($dir,$z_blocs)
			AND $f=find_in_path($prefix_path.$fond."-".$flux['args']['contexte']['composition'].".$ext")){
			$flux['data'] = substr($f,0,-strlen(".$ext"));
			AND $f=trouver_fond($fond."-".$flux['args']['contexte']['composition'],$prefix_path,true)
			AND $f['fond']){
			$flux['data'] = $f['fond'];
		}
	}
	return $flux;
@@ -194,10 +197,12 @@ function z_contenu_disponible($prefix_path,$z_contenu,$type,$ext){
 * @return string
 */
function z_trouver_bloc($prefix_path,$bloc,$fond,$ext){
	if ($f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext")
		OR $f = find_in_path("$prefix_path$bloc/$fond.$ext"))
		return substr($f, 0, - strlen(".$ext"));
	return "";
	$f = trouver_fond("$bloc.$fond","$prefix_path$bloc/",true);
	if ($f['fond']) return $f['fond'];

	$f = trouver_fond($fond,"$prefix_path$bloc/",true);
	// vide si rien trouve
	return $f['fond'];
}
/**
 * Tester si un type est echaffaudable