diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index e81937f381d1f4aecaea526e15255b0df451ec8a..d35e47ff6c654b709d818e200f161c9a05c35c71 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -2024,6 +2024,9 @@ function tester_url_ecrire($nom){ // compat skels orthogonaux version precedente elseif (trouver_fond($nom, 'prive/exec/')) return 'fond_monobloc'; + // echaffaudage d'un fond ! + elseif(include_spip('public/styliser_par_z') AND z_echaffaudable($nom)) + return 'fond'; // attention, il ne faut pas inclure l'exec ici // car sinon #URL_ECRIRE provoque des inclusions // et des define intrusifs potentiels diff --git a/ecrire/public/styliser_par_z.php b/ecrire/public/styliser_par_z.php index e5f2101cb808a59cd272bc90a03a220588bc919e..72c1d198b1e161c0514e7a8563475571c835149e 100644 --- a/ecrire/public/styliser_par_z.php +++ b/ecrire/public/styliser_par_z.php @@ -36,7 +36,7 @@ function public_styliser_par_z_dist($flux){ $prefix_length = strlen($prefix_path); $apl_constant = '_ECRIRE_AJAX_PARALLEL_LOAD'; $page = 'exec'; - $echaffauder = ""; // pas d'echaffaudage dans ecrire/ pour le moment + $echaffauder = charger_fonction('echaffauder','prive',true); define('_ZCORE_EXCLURE_PATH',''); } else { @@ -239,21 +239,87 @@ function z_trouver_bloc($prefix_path,$bloc,$fond,$ext){ * @return bool */ function z_echaffaudable($type){ + static $pages = null; static $echaffaudable = array(); if (isset($echaffaudable[$type])) return $echaffaudable[$type]; if (preg_match(',[^\w],',$type)) return $echaffaudable[$type] = false; - if ($table = table_objet($type) - AND $type == objet_type($table) - AND $trouver_table = charger_fonction('trouver_table','base') - AND - ($desc = $trouver_table($table) - OR $desc = $trouver_table($table_sql = "spip_$table")) - ) - return $echaffaudable[$type] = array($table,$desc['table'],$desc); - else - return $echaffaudable[$type] = false; + + if (test_espace_prive()){ + include_spip('inc/pipelines_ecrire'); + if ($e=trouver_objet_exec($type)){ + return $echaffaudable[$type] = array($e['table'],$e['table_objet_sql'],$e); + } + else { + // peut etre c'est un exec=types qui liste tous les objets "type" + if (($t=objet_type($type,false))!==$type + AND $e=trouver_objet_exec($t)){ + return $echaffaudable[$type] = array($e['table'],$e['table_objet_sql'],$t); + } + } + } + else { + if (is_null($pages)) { + $pages = array(); + $liste = lister_tables_objets_sql(); + foreach($liste as $t=>$d) + if ($d['page']) $pages[$d['page']] = array($d['table_objet'],$t); + } + if (!isset($pages[$type])) + return $echaffaudable[$type] = false; + if (count($pages[$type])==2){ + $trouver_table = charger_fonction('trouver_table','base'); + $pages[$type][] = $trouver_table(reset($pages[$type])); + } + return $echaffaudable[$type] = $pages[$type]; + } + return $echaffaudable[$type] = false; +} + + +/** + * Generer a la volee un fond a partir d'un contenu connu + * tous les squelettes d'echafaudage du prive sont en fait explicites dans prive/echaffaudage + * on ne fait qu'un mini squelette d'inclusion pour reecrire les variables d'env + * + * @param string $type + * @param string $table + * @param string $table_sql + * @param array $desc + * @param string $ext + * @return string + */ +function prive_echaffauder_dist($exec,$table,$table_sql,$desc_exec,$ext){ + $scaffold = ""; + + // page objet ou objet_edit + if (is_array($desc_exec)) { + $type = $desc_exec['type']; + $primary = $desc_exec['id_table_objet']; + + if ($desc_exec['edition']===false) + $fond = "objet"; + else { + $trouver_table = charger_fonction('trouver_table','base'); + $desc = $trouver_table($table_sql); + if (isset($desc['field']['id_rubrique'])) + $fond = 'objet_edit'; + else + $fond = 'objet_edit.sans_rubrique'; + } + $scaffold = "<INCLURE{fond=prive/echafaudage/contenu/".$fond.",objet=".$type.",id_objet=#".strtoupper($primary).",env}>"; + } + // page objets + elseif($type = $desc_exec){ + $scaffold = "<INCLURE{fond=prive/echafaudage/contenu/objets,objet=".$type."} />"; + } + + $dir = sous_repertoire(_DIR_CACHE,"scaffold",false); + $dir = sous_repertoire($dir,"contenu",false); + $f = $dir."$exec"; + ecrire_fichier("$f.$ext",$scaffold); + return $f; } ?> \ No newline at end of file diff --git a/prive/squelettes/navigation/dist.html b/prive/squelettes/navigation/dist.html index 3ec37d5dfdcef8cd06808166dc07a5e51f6251d1..351c5d65cc15f99e5357d222637f2032cfdcefd7 100644 --- a/prive/squelettes/navigation/dist.html +++ b/prive/squelettes/navigation/dist.html @@ -1,3 +1,8 @@ [(#ENV{exec}|match{configurer_}|oui) <INCLURE{fond=prive/squelettes/navigation/configurer,env}> +] +#SET{objet_exec,#ENV{exec}|trouver_objet_exec} +[(#GET{objet_exec}|oui) + #SET{f,#GET{objet_exec}|table_valeur{edition}|?{objet_edit,objet}} + <INCLURE{fond=prive/echafaudage/navigation/#GET{f},objet=#GET{objet_exec}|table_valeur{type},id_objet=#ENV{#GET{objet_exec}|table_valeur{id_table_objet}},env} /> ] \ No newline at end of file