diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php index 023ac20ab1f2e4a89f62b1d641f97001c22e1fd0..4219a6603c2db351d8f2bbf1a2e10b502e2b82ba 100644 --- a/ecrire/balise/formulaire_.php +++ b/ecrire/balise/formulaire_.php @@ -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; } diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index b2d423ec7203a6f7c0c4505e96f7b9b3dd9438f1..9aea6cab08d0459f11e0910d56dde1be97955948 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -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:''; } diff --git a/ecrire/public/styliser.php b/ecrire/public/styliser.php index 459f5bd2823a28287ec5992d859d9d4789c96170..9ed6b6d5ac95a61f82dc46f53ee7b92c707b39b3 100644 --- a/ecrire/public/styliser.php +++ b/ecrire/public/styliser.php @@ -42,13 +42,10 @@ 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( 'id_rubrique' => $id_rubrique, @@ -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')) { diff --git a/ecrire/public/styliser_par_z.php b/ecrire/public/styliser_par_z.php index 3b2c93bbdf2907ce53ef026cdc4215139a172565..30df398aeb22b83a6be8ebde6ac3edd03e20e412 100644 --- a/ecrire/public/styliser_par_z.php +++ b/ecrire/public/styliser_par_z.php @@ -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