Skip to content
Extraits de code Groupes Projets
Valider 81e9b407 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

report merge de r16615

La constante _EXTENSION_SQUELETTE qui indique l'extension d'un
sauelette avait beaucoup trop d'occurrences dans le code,
ce qui ne permet pas facilement de mettre en place une strategie
ou plusieurs extensions seraient possibles simultanement.
Il n'y a besoin que d'une seule occurrence en fait,
dans la fonction {{{trouve_modele}}} sur laquelle toutes les autres se
rabattent.

Pour le decompilateur, il faut se baseru sur l'extension du
fichier de depart pour retrouver l'information, et n'avoir
qu'un seul point d'entree poureviter de gerer une valeur par defaut.

Pour le debusqueur, on donne le nom du squelette sans l'extension
puisque justement il est possible qu'il y ait le choix.
parent 0cf15c63
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -35,7 +35,7 @@ function existe_formulaire($form) ...@@ -35,7 +35,7 @@ function existe_formulaire($form)
if (!$form) return ''; // on ne sait pas, le nom du formulaire n'est pas fourni ici if (!$form) return ''; // on ne sait pas, le nom du formulaire n'est pas fourni ici
return find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/') ? $form : false; return trouve_modele($form, 'formulaires/') ? $form : false;
} }
......
...@@ -846,18 +846,6 @@ function autoriser_sans_cookie($nom) ...@@ -846,18 +846,6 @@ function autoriser_sans_cookie($nom)
return in_array($nom, $autsanscookie); return in_array($nom, $autsanscookie);
} }
function tester_url_ecrire($nom){
// tester si c'est une page en squelette
if (find_in_path('prive/squelettes/contenu/' . $nom . '.' . _EXTENSION_SQUELETTES))
return 'fond';
// compat skels orthogonaux version precedente
elseif (find_in_path('prive/exec/' . $nom . '.' . _EXTENSION_SQUELETTES))
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 )
return (find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:'';
}
// Fonction codant et decodant les URLS des objets SQL mis en page par SPIP // Fonction codant et decodant les URLS des objets SQL mis en page par SPIP
// $id = numero de la cle primaire si nombre, URL a decoder si pas numerique // $id = numero de la cle primaire si nombre, URL a decoder si pas numerique
// $entite = surnom de la table SQL (donne acces au nom de cle primaire) // $entite = surnom de la table SQL (donne acces au nom de cle primaire)
...@@ -1810,7 +1798,7 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' ...@@ -1810,7 +1798,7 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
$page = evaluer_fond($f, $contexte, $connect); $page = evaluer_fond($f, $contexte, $connect);
if ($page === '') { if ($page === '') {
$c = isset($options['compil']) ? $options['compil'] :''; $c = isset($options['compil']) ? $options['compil'] :'';
$a = array('fichier'=>$fond.'.'._EXTENSION_SQUELETTES); $a = array('fichier'=>$fond);
erreur_squelette(_T('info_erreur_squelette2', $a), $c); erreur_squelette(_T('info_erreur_squelette2', $a), $c);
} }
...@@ -1837,9 +1825,23 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' ...@@ -1837,9 +1825,23 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
return $options['trim'] ? ltrim($texte) : $texte; return $options['trim'] ? ltrim($texte) : $texte;
} }
function trouve_modele($nom) // 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( 'modeles/' . $nom.'.'. _EXTENSION_SQUELETTES); return find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir);
}
function tester_url_ecrire($nom){
// tester si c'est une page en squelette
if (trouve_modele($nom, 'prive/squelettes/contenu/'))
return 'fond';
// compat skels orthogonaux version precedente
elseif (trouve_modele($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 )
return (find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:'';
} }
// Charger dynamiquement une extension php // Charger dynamiquement une extension php
......
...@@ -793,18 +793,34 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='') ...@@ -793,18 +793,34 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
$squelette = $f($squelette, '', $boucles, $descr); $squelette = $f($squelette, '', $boucles, $descr);
$boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect);
$a = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect);
// restituer les echappements // restituer les echappements
if ($esc) foreach($a as $i=>$boucle) { if ($esc) foreach($boucles as $i=>$boucle) {
$a[$i]->return = preg_replace_callback(",$inerte-(\d+)-,", create_function('$a', 'return chr($a[1]);'), $boucles[$i]->return = preg_replace_callback(",$inerte-(\d+)-,", create_function('$a', 'return chr($a[1]);'),
$boucle->return); $boucle->return);
$a[$i]->descr['squelette'] = preg_replace_callback(",$inerte-(\d+)-,", create_function('$a', 'return "\\\\".chr($a[1]);'), $boucles[$i]->descr['squelette'] = preg_replace_callback(",$inerte-(\d+)-,", create_function('$a', 'return "\\\\".chr($a[1]);'),
$boucle->descr['squelette']); $boucle->descr['squelette']);
} }
$debug = ($boucles AND isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode']=='debug');
if ($debug) {
include_spip('public/decompiler');
foreach($boucles as $id => $boucle) {
if ($id)
$decomp = "\n/* BOUCLE " .
$boucle->type_requete .
" " .
str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
" */\n";
else $decomp = ("\n/*\n" .
str_replace('*/', '* /', public_decompiler($squelette, $gram))
. "\n*/");
$boucles[$id]->return = $decomp .$boucle->return;
$GLOBALS['debug_objets']['code'][$nom.$id] = $boucle->return;
}
}
return $a; return $boucles;
} }
// Point d'entree pour arbre de syntaxe abstraite fourni en premier argument // Point d'entree pour arbre de syntaxe abstraite fourni en premier argument
...@@ -933,19 +949,16 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co ...@@ -933,19 +949,16 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co
// idem pour la racine // idem pour la racine
$descr['id_mere'] = ''; $descr['id_mere'] = '';
$corps = calculer_liste($squelette, $descr, $boucles); $corps = calculer_liste($squelette, $descr, $boucles);
$debug = (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode']=='debug');
if ($debug) {
include_spip('public/decompiler');
include_spip('public/format_' . _EXTENSION_SQUELETTES);
}
// Calcul du corps de toutes les fonctions PHP, // Calcul du corps de toutes les fonctions PHP,
// en particulier les requetes SQL et TOTAL_BOUCLE // en particulier les requetes SQL et TOTAL_BOUCLE
// de'terminables seulement maintenant // de'terminables seulement maintenant
foreach($boucles as $id => $boucle) { foreach($boucles as $id => $boucle) {
$boucle = $boucles[$id] = pipeline('pre_boucle', $boucle); $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
if ($boucle->return === false) continue; if ($boucle->return === false) {$corps = false; continue;}
// appeler la fonction de definition de la boucle // appeler la fonction de definition de la boucle
if ($req = $boucle->type_requete) { if ($req = $boucle->type_requete) {
...@@ -962,50 +975,17 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co ...@@ -962,50 +975,17 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co
} else $req = ("\n\treturn '';"); } else $req = ("\n\treturn '';");
$boucles[$id]->return = $boucles[$id]->return =
"function BOUCLE" . strtr($id,"-","_") . $nom . "\n\nfunction BOUCLE" . strtr($id,"-","_") . $nom .
'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
$req . $req .
"\n}\n\n"; "\n}\n";
if ($debug)
$GLOBALS['debug_objets']['code'][$nom.$id] = $boucles[$id]->return;
} }
// Au final, si le corps ou un critere au moins s'est mal compile // Au final, si le corps ou un critere au moins s'est mal compile
// retourner False, sinon inserer leur decompilation // retourner False, sinon inserer leur decompilation
if (is_bool($corps)) return false; if (is_bool($corps)) return false;
foreach($boucles as $id => $boucle) {
if ($boucle->return === false) return false;
$boucle->return = "\n\n/* BOUCLE " .
$boucle->type_requete .
" " .
(!$debug ? '' :
str_replace('*/', '* /',
decompiler_criteres($boucle->param,
$boucle->criteres))) .
" */\n\n " .
$boucle->return;
}
$secondes = spip_timer('calcul_skel');
spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
// Assimiler la fct principale a une boucle anonyme, c'est plus simple
$code = new Boucle;
$code->descr = $descr;
$code->return = '
//
// Fonction principale du squelette ' .
$sourcefile .
($connect ? " pour $connect" : '') .
(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
"\n//" .
(!$debug ? '' : ("\n/*\n" .
str_replace('*/', '* /', public_decompiler($squelette))
. "\n*/")) . "
function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {
$principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {
' '
// reporter de maniere securisee les doublons inclus // reporter de maniere securisee les doublons inclus
.' .'
...@@ -1024,6 +1004,21 @@ function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) ...@@ -1024,6 +1004,21 @@ function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0)
.", \$Cache, \$page, ".var_export($sourcefile,true)."); .", \$Cache, \$page, ".var_export($sourcefile,true).");
}"; }";
$secondes = spip_timer('calcul_skel');
spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
// Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple
$code = new Boucle;
$code->descr = $descr;
$code->return = '
//
// Fonction principale du squelette ' .
$sourcefile .
($connect ? " pour $connect" : '') .
(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
"\n//\n" .
$principal;
$boucles[''] = $code; $boucles[''] = $code;
return $boucles; return $boucles;
} }
......
...@@ -306,10 +306,10 @@ function trouve_squelette_inclus($script) ...@@ -306,10 +306,10 @@ function trouve_squelette_inclus($script)
// a defaut on cherche le param 'page' // a defaut on cherche le param 'page'
if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) if (!preg_match("/'param' => '([^']*)'/", $script, $reg))
$reg[1] = "inconnu"; $reg[1] = "inconnu";
$incl = $reg[1] . '.' . _EXTENSION_SQUELETTES . '$'; $incl = ',' . $reg[1] . '[.]\w$,';
foreach($debug_objets['sourcefile'] as $k => $v) { foreach($debug_objets['sourcefile'] as $k => $v) {
if (preg_match(",$incl,",$v)) return $k; if (preg_match($incl, $v)) return $k;
} }
return ""; return "";
} }
...@@ -456,7 +456,7 @@ function debusquer_navigation_squelettes($self) ...@@ -456,7 +456,7 @@ function debusquer_navigation_squelettes($self)
$t_skel = _T('squelette'); $t_skel = _T('squelette');
foreach ($debug_objets['sourcefile'] as $nom => $sourcefile) { foreach ($debug_objets['sourcefile'] as $nom => $sourcefile) {
$self2 = parametre_url($self,'var_mode_objet', $nom); $self2 = parametre_url($self,'var_mode_objet', $nom);
$nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self); $nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
$temps = !isset($debug_objets['profile'][$sourcefile]) ? '' : _T('zbug_profile', array('time'=>$debug_objets['profile'][$sourcefile])); $temps = !isset($debug_objets['profile'][$sourcefile]) ? '' : _T('zbug_profile', array('time'=>$debug_objets['profile'][$sourcefile]));
$res .= "<fieldset><legend>" $res .= "<fieldset><legend>"
...@@ -482,17 +482,19 @@ function debusquer_navigation_squelettes($self) ...@@ -482,17 +482,19 @@ function debusquer_navigation_squelettes($self)
return $res; return $res;
} }
function debusquer_navigation_boucles($boucles, $nom_skel, $self) function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source)
{ {
$i = 0; $i = 0;
$res = ''; $res = '';
$var_mode_objet = _request('var_mode_objet'); $var_mode_objet = _request('var_mode_objet');
$gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
foreach ($boucles as $objet => $boucle) { foreach ($boucles as $objet => $boucle) {
if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) { if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
$i++; $i++;
$nom = $boucle->id_boucle; $nom = $boucle->id_boucle;
$req = $boucle->type_requete; $req = $boucle->type_requete;
$crit = decompiler_criteres($boucle->param, $boucle->criteres); $crit = public_decompiler($boucle, $gram, 0, 'criteres');
$self2 = $self . "&amp;var_mode_objet=" . $objet; $self2 = $self . "&amp;var_mode_objet=" . $objet;
$res .= "\n<tr style='background-color: " . $res .= "\n<tr style='background-color: " .
...@@ -575,7 +577,9 @@ function debusquer_source($objet, $affiche) ...@@ -575,7 +577,9 @@ function debusquer_source($objet, $affiche)
$res = ancre_texte("<"."?php\n".$quoi."\n?".">"); $res = ancre_texte("<"."?php\n".$quoi."\n?".">");
} else if ($affiche == 'boucle') { } else if ($affiche == 'boucle') {
$legend = _T('boucle') . ' ' . $nom; $legend = _T('boucle') . ' ' . $nom;
$res = ancre_texte(decompiler_boucle($quoi)); // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
$res = ancre_texte(public_decompiler($quoi, '', 0, 'boucle'));
} else if ($affiche == 'squelette') { } else if ($affiche == 'squelette') {
$legend = $GLOBALS['debug_objets']['sourcefile'][$objet]; $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
$res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]); $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
......
...@@ -17,10 +17,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -17,10 +17,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
function decompiler_boucle($struct, $fmt='', $prof=0) function decompiler_boucle($struct, $fmt='', $prof=0)
{ {
$nom = $struct->id_boucle; $nom = $struct->id_boucle;
$avant = public_decompiler($struct->avant, $fmt, $prof); $avant = decompiler_($struct->avant, $fmt, $prof);
$apres = public_decompiler($struct->apres, $fmt, $prof); $apres = decompiler_($struct->apres, $fmt, $prof);
$altern = public_decompiler($struct->altern, $fmt, $prof); $altern = decompiler_($struct->altern, $fmt, $prof);
$milieu = public_decompiler($struct->milieu, $fmt, $prof); $milieu = decompiler_($struct->milieu, $fmt, $prof);
$type = $struct->sql_serveur ? "$struct->sql_serveur:" : ''; $type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
$type .= ($struct->type_requete ? $struct->type_requete : $type .= ($struct->type_requete ? $struct->type_requete :
...@@ -36,9 +36,9 @@ function decompiler_boucle($struct, $fmt='', $prof=0) ...@@ -36,9 +36,9 @@ function decompiler_boucle($struct, $fmt='', $prof=0)
if ($crit AND !is_array($crit[0])) { if ($crit AND !is_array($crit[0])) {
$type = strtolower($type) . array_shift($crit); $type = strtolower($type) . array_shift($crit);
} }
$crit = decompiler_criteres($crit, $struct->criteres, $fmt, $prof) ; $crit = decompiler_criteres($struct, $fmt, $prof) ;
$f = 'format_boucle_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_boucle_' . $fmt;
return $f($avant, $nom, $type, $crit, $milieu, $apres, $altern, $prof); return $f($avant, $nom, $type, $crit, $milieu, $apres, $altern, $prof);
} }
...@@ -48,24 +48,24 @@ function decompiler_include($struct, $fmt='', $prof=0) ...@@ -48,24 +48,24 @@ function decompiler_include($struct, $fmt='', $prof=0)
foreach($struct->param ? $struct->param : array() as $couple) { foreach($struct->param ? $struct->param : array() as $couple) {
array_shift($couple); array_shift($couple);
foreach($couple as $v) { foreach($couple as $v) {
$res[]= public_decompiler($v, $fmt, $prof); $res[]= decompiler_($v, $fmt, $prof);
} }
} }
$file = is_string($struct->texte) ? $struct->texte : $file = is_string($struct->texte) ? $struct->texte :
public_decompiler($struct->texte, $fmt, $prof); decompiler_($struct->texte, $fmt, $prof);
$f = 'format_inclure_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_inclure_' . $fmt;
return $f($file, $res, $prof); return $f($file, $res, $prof);
} }
function decompiler_texte($struct, $fmt='', $prof=0) function decompiler_texte($struct, $fmt='', $prof=0)
{ {
$f = 'format_texte_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_texte_' . $fmt;
return strlen($struct->texte) ? $f($struct->texte, $prof) : ''; return strlen($struct->texte) ? $f($struct->texte, $prof) : '';
} }
function decompiler_polyglotte($struct, $fmt='', $prof=0) function decompiler_polyglotte($struct, $fmt='', $prof=0)
{ {
$f = 'format_polyglotte_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_polyglotte_' . $fmt;
return $f($struct->traductions, $prof); return $f($struct->traductions, $prof);
} }
...@@ -76,32 +76,32 @@ function decompiler_idiome($struct, $fmt='', $prof=0) ...@@ -76,32 +76,32 @@ function decompiler_idiome($struct, $fmt='', $prof=0)
$args = array(); $args = array();
foreach ($struct->arg as $k => $v) { foreach ($struct->arg as $k => $v) {
if ($k) $args[$k]= public_decompiler($v, $fmt, $prof); if ($k) $args[$k]= decompiler_($v, $fmt, $prof);
} }
$filtres = decompiler_liste($struct->param, $fmt, $prof); $filtres = decompiler_liste($struct->param, $fmt, $prof);
$f = 'format_idiome_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_idiome_' . $fmt;
return $f($struct->nom_champ, $module, $args, $filtres, $prof); return $f($struct->nom_champ, $module, $args, $filtres, $prof);
} }
function decompiler_champ($struct, $fmt='', $prof=0) function decompiler_champ($struct, $fmt='', $prof=0)
{ {
$avant = public_decompiler($struct->avant, $fmt, $prof); $avant = decompiler_($struct->avant, $fmt, $prof);
$apres = public_decompiler($struct->apres, $fmt, $prof); $apres = decompiler_($struct->apres, $fmt, $prof);
$args = $filtres = ''; $args = $filtres = '';
if ($p = $struct->param) { if ($p = $struct->param) {
if ($p[0][0]==='') if ($p[0][0]==='')
$args = decompiler_liste(array(array_shift($p)), $fmt, $prof); $args = decompiler_liste(array(array_shift($p)), $fmt, $prof);
$filtres = decompiler_liste($p, $fmt, $prof); $filtres = decompiler_liste($p, $fmt, $prof);
} }
$f = 'format_champ_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_champ_' . $fmt;
return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof); return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
} }
function decompiler_liste($sources, $fmt='', $prof=0) { function decompiler_liste($sources, $fmt='', $prof=0) {
if (!is_array($sources)) return ''; if (!is_array($sources)) return '';
$f = 'format_liste_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_liste_' . $fmt;
$res = ''; $res = '';
foreach($sources as $arg) { foreach($sources as $arg) {
if (!is_array($arg)) { if (!is_array($arg)) {
...@@ -115,7 +115,7 @@ function decompiler_liste($sources, $fmt='', $prof=0) { ...@@ -115,7 +115,7 @@ function decompiler_liste($sources, $fmt='', $prof=0) {
AND (strlen($v[0]->apres) == 1) AND (strlen($v[0]->apres) == 1)
AND $v[0]->apres == $v[0]->avant) AND $v[0]->apres == $v[0]->avant)
$args[]= $v[0]->avant . $v[0]->texte . $v[0]->apres; $args[]= $v[0]->avant . $v[0]->texte . $v[0]->apres;
else $args[]= public_decompiler($v, $fmt, 0-$prof); else $args[]= decompiler_($v, $fmt, 0-$prof);
} }
if (($r!=='') OR $args) $res .= $f($r, $args, $prof); if (($r!=='') OR $args) $res .= $f($r, $args, $prof);
} }
...@@ -126,11 +126,11 @@ function decompiler_liste($sources, $fmt='', $prof=0) { ...@@ -126,11 +126,11 @@ function decompiler_liste($sources, $fmt='', $prof=0) {
// - le phraseur fournit un bout du source en plus de la compil // - le phraseur fournit un bout du source en plus de la compil
// - le champ apres signale le critere {"separateur"} ou {'separateur'} // - le champ apres signale le critere {"separateur"} ou {'separateur'}
// - les champs sont implicitement etendus (crochets implicites mais interdits) // - les champs sont implicitement etendus (crochets implicites mais interdits)
function decompiler_criteres($sources, $comp, $fmt='', $prof=0) { function decompiler_criteres($boucle, $fmt='', $prof=0) {
$sources = $boucle->param;
if (!is_array($sources)) return ''; if (!is_array($sources)) return '';
$res = ''; $res = '';
$f = 'format_critere_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_critere_' . $fmt;
include_spip('public/format_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES));
foreach($sources as $crit) { foreach($sources as $crit) {
if (!is_array($crit)) continue; // boucle recursive if (!is_array($crit)) continue; // boucle recursive
array_shift($crit); array_shift($crit);
...@@ -158,10 +158,9 @@ function decompiler_criteres($sources, $comp, $fmt='', $prof=0) { ...@@ -158,10 +158,9 @@ function decompiler_criteres($sources, $comp, $fmt='', $prof=0) {
} }
function public_decompiler($liste, $fmt='', $prof=0) function decompiler_($liste, $fmt='', $prof=0)
{ {
if (!is_array($liste)) return ''; if (!is_array($liste)) return '';
include_spip('public/format_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES));
$prof2 = ($prof < 0) ? ($prof-1) : ($prof+1); $prof2 = ($prof < 0) ? ($prof-1) : ($prof+1);
$contenu = array(); $contenu = array();
foreach($liste as $k => $p) { foreach($liste as $k => $p) {
...@@ -190,7 +189,14 @@ function public_decompiler($liste, $fmt='', $prof=0) ...@@ -190,7 +189,14 @@ function public_decompiler($liste, $fmt='', $prof=0)
$contenu[] = array($d($p, $fmt, $prof2), $p->type); $contenu[] = array($d($p, $fmt, $prof2), $p->type);
} }
$f = 'format_suite_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES); $f = 'format_suite_' . $fmt;
return $f($contenu); return $f($contenu);
} }
function public_decompiler($liste, $fmt='', $prof=0, $quoi='')
{
if (!include_spip('public/format_' . $fmt)) return "'$fmt'?";
$f = 'decompiler_' . $quoi;
return $f($liste, $fmt, $prof);
}
?> ?>
...@@ -59,7 +59,7 @@ function public_parametrer_dist($fond, $contexte='', $cache='', $connect='') { ...@@ -59,7 +59,7 @@ function public_parametrer_dist($fond, $contexte='', $cache='', $connect='') {
$styliser = charger_fonction('styliser', 'public'); $styliser = charger_fonction('styliser', 'public');
list($skel,$mime_type, $gram, $sourcefile) = list($skel,$mime_type, $gram, $sourcefile) =
$styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect, _EXTENSION_SQUELETTES); $styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
if ($skel) { if ($skel) {
......
...@@ -31,7 +31,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -31,7 +31,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
* *
* http://doc.spip.org/@public_styliser_dist * http://doc.spip.org/@public_styliser_dist
*/ */
function public_styliser_dist($fond, $contexte, $lang='', $connect='', $ext='html') { function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
// Choisir entre $fond-dist.html, $fond=7.html, etc? // Choisir entre $fond-dist.html, $fond=7.html, etc?
$id_rubrique = 0; $id_rubrique = 0;
...@@ -42,10 +42,13 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='', $ext='htm ...@@ -42,10 +42,13 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='', $ext='htm
// trouver un squelette du nom demande // trouver un squelette du nom demande
// ne rien dire si on ne trouve pas, // ne rien dire si on ne trouve pas,
// c'est l'appelant qui sait comment gerer la situation // c'est l'appelant qui sait comment gerer la situation
$base = find_in_path("$fond.$ext"); $squelette = trouve_modele($fond,"");
// supprimer le ".html" pour pouvoir affiner par id_rubrique ou par langue // supprimer l'extension pour pouvoir affiner par id_rubrique ou par langue
$squelette = substr($base, 0, - strlen(".$ext")); if ($squelette AND preg_match('/^(.*)[.](\w+)$/', $squelette, $r)) {
list(, $squelette, $ext) = $r;
} else $ext = '';
$flux = array( $flux = array(
'args' => array( 'args' => array(
'id_rubrique' => $id_rubrique, 'id_rubrique' => $id_rubrique,
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter