Skip to content
Extraits de code Groupes Projets
Valider 461b3505 rédigé par cerdic's avatar cerdic Validation de Gitea
Parcourir les fichiers

Utiliser contexte_compil pour reperer les appels a executer_balise_dynamique()...

Utiliser contexte_compil pour reperer les appels a executer_balise_dynamique() venant d'un modele, et lever un flag le temps du traitement de la balise dynamique
parent a385b048
Branches
Étiquettes
Aucune requête de fusion associée trouvée
...@@ -87,6 +87,20 @@ function test_formulaire_inclus_par_modele() { ...@@ -87,6 +87,20 @@ function test_formulaire_inclus_par_modele() {
$trace = debug_backtrace(null, 20); $trace = debug_backtrace(null, 20);
$trace_fonctions = array_column($trace, 'function'); $trace_fonctions = array_column($trace, 'function');
$trace_fonctions = array_map('strtolower', $trace_fonctions); $trace_fonctions = array_map('strtolower', $trace_fonctions);
// regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn
if (!empty($GLOBALS["balise_dyn_appellee_par_modele"])
and $form = existe_formulaire($GLOBALS["balise_dyn_appellee_par_modele"])) {
if (in_array('balise_formulaire__dyn', $trace_fonctions)) {
$k = array_search('balise_formulaire__dyn', $trace_fonctions);
if ($trace[$k]['args'][0] === $form) {
return $trace[$k]['args'];
}
}
}
// fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil,
// mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette
if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) { if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) {
$k = array_search('inclure_modele', $trace_fonctions); $k = array_search('inclure_modele', $trace_fonctions);
// les arguments de recuperer_fond() passes par inclure_modele() // les arguments de recuperer_fond() passes par inclure_modele()
......
...@@ -346,6 +346,9 @@ function public_produire_page_dist( ...@@ -346,6 +346,9 @@ function public_produire_page_dist(
// 4: langue // 4: langue
function inserer_balise_dynamique($contexte_exec, $contexte_compil) { function inserer_balise_dynamique($contexte_exec, $contexte_compil) {
if (!empty($GLOBALS["balise_dyn_appellee_par_modele"])) {
unset($GLOBALS["balise_dyn_appellee_par_modele"]);
}
if (!is_array($contexte_exec)) { if (!is_array($contexte_exec)) {
echo $contexte_exec; echo $contexte_exec;
} // message d'erreur etc } // message d'erreur etc
...@@ -459,6 +462,11 @@ function message_page_indisponible($page, $contexte) { ...@@ -459,6 +462,11 @@ function message_page_indisponible($page, $contexte) {
return $page; return $page;
} }
function arguments_balise_dyn_depuis_modele($arg) {
$GLOBALS["balise_dyn_appellee_par_modele"] = $arg;
return $arg;
}
// temporairement ici : a mettre dans le futur inc/modeles // temporairement ici : a mettre dans le futur inc/modeles
// creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array() // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
// https://code.spip.net/@creer_contexte_de_modele // https://code.spip.net/@creer_contexte_de_modele
......
...@@ -312,11 +312,18 @@ function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) { ...@@ -312,11 +312,18 @@ function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
if (strncmp($file, "/", 1) !== 0) { if (strncmp($file, "/", 1) !== 0) {
$file = './" . _DIR_RACINE . "' . $file; $file = './" . _DIR_RACINE . "' . $file;
} }
$args = array_map('argumenter_squelette', $args);
if (!empty($context_compil['appel_php_depuis_modele'])) {
$args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
}
$args = join(', ', $args);
$r = sprintf(CODE_INCLURE_BALISE, $r = sprintf(CODE_INCLURE_BALISE,
$file, $file,
$context_compil[4] ? $context_compil[4] : '', $context_compil[4] ? $context_compil[4] : '',
$nom, $nom,
join(', ', array_map('argumenter_squelette', $args)), $args,
join(', ', array_map('_q', $context_compil))); join(', ', array_map('_q', $context_compil)));
return $r; return $r;
...@@ -385,6 +392,16 @@ function executer_balise_dynamique($nom, $args, $context_compil) { ...@@ -385,6 +392,16 @@ function executer_balise_dynamique($nom, $args, $context_compil) {
$nomfonction = $nom; $nomfonction = $nom;
$nomfonction_generique = ""; $nomfonction_generique = "";
$appel_php_depuis_modele = false;
if (is_array($context_compil)
and !is_numeric($context_compil[3])
and empty($context_compil[0])
and empty($context_compil[1])
and empty($context_compil[2])
and empty($context_compil[3])) {
$appel_php_depuis_modele = true;
}
// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article') // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
if (false !== ($p = strpos($nom, "_"))) { if (false !== ($p = strpos($nom, "_"))) {
$nomfonction_generique = substr($nom, 0, $p + 1); $nomfonction_generique = substr($nom, 0, $p + 1);
...@@ -444,6 +461,9 @@ function executer_balise_dynamique($nom, $args, $context_compil) { ...@@ -444,6 +461,9 @@ function executer_balise_dynamique($nom, $args, $context_compil) {
} }
} }
if ($appel_php_depuis_modele) {
$context_compil['appel_php_depuis_modele'] = true;
}
return synthetiser_balise_dynamique($nomfonction, $r, $file, $context_compil); return synthetiser_balise_dynamique($nomfonction, $r, $file, $context_compil);
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter