Skip to content
Extraits de code Groupes Projets
Valider a3a5c85d rédigé par esj's avatar esj
Parcourir les fichiers

Le débusqueur donne à présent aussi pour les balises dynamiques l'endroit...

Le débusqueur donne à présent aussi pour les balises dynamiques l'endroit précis de leur éventuelle mauvaise utilisation dans un squelette.

Cette fonctionnalité a nécessité de revenir encore une fois sur le deuxième argument des balises dynamiques, tombé en désuétude en [14194], ressuscité en [14213] sur la suggestion de #1728: ce tableau est finalement composé d'abord de 5 valeurs issues du contexte de compilation (nom du squelette, nom du fichier compilé, nom de la boucle éventuelle où figure la balise, numéro de ligne, langue) suivis éventuellement des éléments du tableau optionnel fourni par la fonction principale de la balise dynamique comme 4e argument de la fonction {{{calculer_balise_dynamique}}}. Introduction aussi d'une nouvelle structure pour contenir ces informations, qui n'est peut-être pas très intuitive mais facilite leur propagation.

Ce dépot s'accompagne d'un modification sémantique du libellé des erreurs concernant ces balises: elles ne sont pas nécessairement à utiliser dans une boucle (sinon on pourrait réperer l'erreur à la compilation et on n'aurait pas tout ce problème de contexte à trimbaler), il faut seulement que le {{{id_*}}} idoine soit présent (par exemple dans l'URL).

Musée des horreurs ayant servi de tests pour les derniers dépôts:

{{{
[(#FORMULAIRE_ECRIRE_AUTEUR)]
[(#FORMULAIRE_SITE)]
[(#FORMULAIRE_SIGNATURE)]
<BOUCLE_coucou(AUTEURS){#ID_AUTEUR}>
CHEMIN
#INCLURE{expo, #X}
</div>
</BOUCLE_coucou>
<//B_coucou>
<BOUCLE2(AUTEURS){id_auteur} />
<BOUCLE2(ARTICLES){id_auteur} />
<BOUCLE3(ARTICLES){id_auteur} >
[(#NOM&&&)]
[(#NOM{,,,,,,,,,})]
}}}
parent c5ba2dc6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -24,17 +24,23 @@ function balise_FORMULAIRE_ECRIRE_AUTEUR ($p) { ...@@ -24,17 +24,23 @@ function balise_FORMULAIRE_ECRIRE_AUTEUR ($p) {
} }
// http://doc.spip.org/@balise_FORMULAIRE_ECRIRE_AUTEUR_stat // http://doc.spip.org/@balise_FORMULAIRE_ECRIRE_AUTEUR_stat
function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $filtres) { function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $context_compil) {
include_spip('inc/filtres'); include_spip('inc/filtres');
// Pas d'id_auteur ni d'id_article ? Erreur de squelette // Pas d'id_auteur ni d'id_article ? Erreur de squelette
$id = intval($args[1]); $id = intval($args[1]);
if (!$args[0] AND !$id) if (!$args[0] AND !$id) {
return erreur_squelette( include_spip('public/interfaces');
_T('zbug_champ_hors_motif', $p = new Contexte;
array ('champ' => '#FORMULAIRE_ECRIRE_AUTEUR', $p->descr = array('sourcefile' => $context_compil[0],
'motif' => 'AUTEURS/ARTICLES')), ''); 'nom' => $context_compil[1]);
$p->id_boucle = $context_compil[2];
$p->ligne = $context_compil[3];
$p->lang = $context_compil[4];
$msg = array('zbug_champ_hors_motif',
array ('champ' => 'FORMULAIRE_ECRIRE_AUTEUR',
'motif' => 'AUTEURS/ARTICLES'));
return erreur_squelette($msg, $p);
}
// Si on est dans un contexte article, // Si on est dans un contexte article,
// sortir tous les mails des auteurs de l'article // sortir tous les mails des auteurs de l'article
if (!$args[0] AND $id) { if (!$args[0] AND $id) {
......
...@@ -31,15 +31,22 @@ function balise_FORMULAIRE_SIGNATURE ($p) { ...@@ -31,15 +31,22 @@ function balise_FORMULAIRE_SIGNATURE ($p) {
// Verification des arguments (contexte + filtres) // Verification des arguments (contexte + filtres)
// http://doc.spip.org/@balise_FORMULAIRE_SIGNATURE_stat // http://doc.spip.org/@balise_FORMULAIRE_SIGNATURE_stat
function balise_FORMULAIRE_SIGNATURE_stat($args, $filtres) { function balise_FORMULAIRE_SIGNATURE_stat($args, $context_compil) {
// pas d'id_article => erreur de squelette // pas d'id_article => erreur de squelette
if (!$args[0]) if (!$args[0]) {
return erreur_squelette( include_spip('public/interfaces');
_T('zbug_champ_hors_motif', $p = new Contexte;
array ('champ' => '#FORMULAIRE_SIGNATURE', $p->descr = array('sourcefile' => $context_compil[0],
'motif' => 'ARTICLES')), ''); 'nom' => $context_compil[1]);
$p->id_boucle = $context_compil[2];
$p->ligne = $context_compil[3];
$p->lang = $context_compil[4];
$msg = array('zbug_champ_hors_motif',
array ('champ' => 'FORMULAIRE_SIGNATURE',
'motif' => 'ARTICLES'));
return erreur_squelette($msg, $p);
}
// article sans petition => pas de balise // article sans petition => pas de balise
else if (!$args[1]) else if (!$args[1])
return ''; return '';
......
...@@ -21,15 +21,22 @@ function balise_FORMULAIRE_SITE ($p) { ...@@ -21,15 +21,22 @@ function balise_FORMULAIRE_SITE ($p) {
} }
// http://doc.spip.org/@balise_FORMULAIRE_SITE_stat // http://doc.spip.org/@balise_FORMULAIRE_SITE_stat
function balise_FORMULAIRE_SITE_stat($args, $filtres) { function balise_FORMULAIRE_SITE_stat($args, $context_compil) {
// Pas d'id_rubrique ? Erreur de squelette // Pas d'id_rubrique ? Erreur de squelette
if (!$args[0]) if (!$args[0]) {
return erreur_squelette( include_spip('public/interfaces');
_T('zbug_champ_hors_motif', $p = new Contexte;
array ('champ' => '#FORMULAIRE_SITE', $p->descr = array('sourcefile' => $context_compil[0],
'motif' => 'RUBRIQUES')), ''); 'nom' => $context_compil[1]);
$p->id_boucle = $context_compil[2];
$p->ligne = $context_compil[3];
$p->lang = $context_compil[4];
$msg = array('zbug_champ_hors_motif',
array ('champ' => 'FORMULAIRE_SITE',
'motif' => 'RUBRIQUES'));
return erreur_squelette($msg, $p);
}
// Verifier que les visisteurs sont autorises a proposer un site // Verifier que les visisteurs sont autorises a proposer un site
return (($GLOBALS['meta']["proposer_sites"] != 2) ? '' : $args); return (($GLOBALS['meta']["proposer_sites"] != 2) ? '' : $args);
......
...@@ -750,7 +750,7 @@ et vous reconnecter au site. ...@@ -750,7 +750,7 @@ et vous reconnecter au site.
'zbug_boucle_recursive_undef' => 'Boucle r&eacute;cursive non d&eacute;finie&nbsp;: @nom@', 'zbug_boucle_recursive_undef' => 'Boucle r&eacute;cursive non d&eacute;finie&nbsp;: @nom@',
'zbug_calcul' => 'calcul', 'zbug_calcul' => 'calcul',
'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle',
'zbug_champ_hors_motif' => 'Champ @champ@ hors d\'une boucle de motif @motif@', 'zbug_champ_hors_motif' => 'Champ @champ@ hors d\'un contexte @motif@',
'zbug_code' => 'code', 'zbug_code' => 'code',
'zbug_critere_inconnu' => 'Crit&egrave;re inconnu @critere@', 'zbug_critere_inconnu' => 'Crit&egrave;re inconnu @critere@',
'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de donn&eacute;es "externe", pas g&eacute;r&eacute;e par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul probl&egrave;mes certaines manipulations sont interdites sur ces bases-l&agrave;. 'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de donn&eacute;es "externe", pas g&eacute;r&eacute;e par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul probl&egrave;mes certaines manipulations sont interdites sur ces bases-l&agrave;.
......
...@@ -272,8 +272,16 @@ if ($lang_select) lang_select(); ...@@ -272,8 +272,16 @@ if ($lang_select) lang_select();
?' ?'
.'>'); .'>');
function synthetiser_balise_dynamique($nom, $args, $file, $lang, $ligne) { // Cette fonction fabrique l'appel d'une balise dynamique a l'aide du contexte
$r = sprintf(CODE_INCLURE_BALISE, $lang, $file, $nom, join(", ", array_map('argumenter_squelette', $args)), $ligne); // de compilation prepare par calculer_balise_dynamique dans references.php:
// 0: sourcefile
// 1: codefile
// 2: id_boucle
// 3: ligne
// 4: langue
function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
$r = sprintf(CODE_INCLURE_BALISE, $context_compil[4], $file, $nom, join(", ", array_map('argumenter_squelette', $args)), $context_compil[3]);
return $r; return $r;
} }
...@@ -292,7 +300,7 @@ function argumenter_squelette($v) { ...@@ -292,7 +300,7 @@ function argumenter_squelette($v) {
// verifier leurs arguments et filtres, et calculer le code a inclure // verifier leurs arguments et filtres, et calculer le code a inclure
// http://doc.spip.org/@executer_balise_dynamique // http://doc.spip.org/@executer_balise_dynamique
function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) { function executer_balise_dynamique($nom, $args, $context_compil) {
if (!$file = find_in_path(strtolower($nom) .'.php', 'balise/', true)) { if (!$file = find_in_path(strtolower($nom) .'.php', 'balise/', true)) {
// regarder si une fonction generique n'existe pas // regarder si une fonction generique n'existe pas
if (($p = strpos($nom,"_")) if (($p = strpos($nom,"_"))
...@@ -307,7 +315,7 @@ function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) { ...@@ -307,7 +315,7 @@ function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) {
// Y a-t-il une fonction de traitement des arguments ? // Y a-t-il une fonction de traitement des arguments ?
$f = 'balise_' . $nom . '_stat'; $f = 'balise_' . $nom . '_stat';
if (function_exists($f)) if (function_exists($f))
$r = $f($args, $autres); $r = $f($args, $context_compil);
else else
$r = $args; $r = $args;
if (!is_array($r)) if (!is_array($r))
...@@ -327,12 +335,10 @@ function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) { ...@@ -327,12 +335,10 @@ function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) {
} }
if (!_DIR_RESTREINT) if (!_DIR_RESTREINT)
$file = _DIR_RESTREINT_ABS . $file; $file = _DIR_RESTREINT_ABS . $file;
return synthetiser_balise_dynamique($nom, $r, $file, $lang, $ligne); return synthetiser_balise_dynamique($nom, $r, $file, $context_compil);
} }
} }
// http://doc.spip.org/@lister_objets_avec_logos // http://doc.spip.org/@lister_objets_avec_logos
function lister_objets_avec_logos ($type) { function lister_objets_avec_logos ($type) {
global $formats_logos; global $formats_logos;
......
...@@ -155,6 +155,13 @@ class Polyglotte { ...@@ -155,6 +155,13 @@ class Polyglotte {
var $ligne = 0; var $ligne = 0;
} }
class Contexte {
var $descr = array();
var $id_boucle = '';
var $ligne = 0;
var $lang = '';
}
global $table_criteres_infixes; global $table_criteres_infixes;
$table_criteres_infixes = array('<', '>', '<=', '>=', '==', '===', '!=', '!==', '<>', '?'); $table_criteres_infixes = array('<', '>', '<=', '>=', '==', '===', '!=', '!==', '<>', '?');
......
...@@ -164,9 +164,10 @@ function calculer_champ($p) { ...@@ -164,9 +164,10 @@ function calculer_champ($p) {
// Pour une balise nommmee NOM, elle demande a charger_fonction de chercher // Pour une balise nommmee NOM, elle demande a charger_fonction de chercher
// s'il existe une fonction balise_NOM ou balise_NOM_dist // s'il existe une fonction balise_NOM ou balise_NOM_dist
// eventuellement en chargeant le fichier balise/NOM.php. // eventuellement en chargeant le fichier balise/NOM.php.
// Si ce n'est pas le cas, hormis le cas historique des balise LOGO_*, // Si la balise est de la forme PREFIXE_SUFFIXE (cf LOGO_* et URL_*)
// elle estime que c'est une reference a une colonne de table connue. // elle fait de meme avec juste le PREFIXE.
// Les surcharges via charger_fonction sont donc possibles. // Si pas de fonction, c'est une reference a une colonne de table SQL connue.
// Les surcharges des colonnes SQL via charger_fonction sont donc possibles.
// http://doc.spip.org/@calculer_balise // http://doc.spip.org/@calculer_balise
function calculer_balise($nom, $p) { function calculer_balise($nom, $p) {
...@@ -231,13 +232,11 @@ function calculer_balise_DEFAUT_dist($nom, $p) { ...@@ -231,13 +232,11 @@ function calculer_balise_DEFAUT_dist($nom, $p) {
// On leur adjoint les arguments explicites de la balise (cf #LOGIN{url}) // On leur adjoint les arguments explicites de la balise (cf #LOGIN{url})
// et d'eventuelles valeurs transmises d'autorite par la balise. // et d'eventuelles valeurs transmises d'autorite par la balise.
// (cf http://trac.rezo.net/trac/spip/ticket/1728) // (cf http://trac.rezo.net/trac/spip/ticket/1728)
// La fonction nomme ci-dessous recevra a l'execution la valeur de tout ca. // La fonction nommee ci-dessous recevra a l'execution la valeur de tout ca.
define('CODE_EXECUTER_BALISE', "executer_balise_dynamique('%s', define('CODE_EXECUTER_BALISE', "executer_balise_dynamique('%s',
array(%s%s), array(%s%s),
array(%s), array(%s))");
\$GLOBALS['spip_lang'],
%s)");
// http://doc.spip.org/@calculer_balise_dynamique // http://doc.spip.org/@calculer_balise_dynamique
function calculer_balise_dynamique($p, $nom, $l, $supp=array()) { function calculer_balise_dynamique($p, $nom, $l, $supp=array()) {
...@@ -254,11 +253,18 @@ function calculer_balise_dynamique($p, $nom, $l, $supp=array()) { ...@@ -254,11 +253,18 @@ function calculer_balise_dynamique($p, $nom, $l, $supp=array()) {
$param = compose_filtres_args($p, $c, ','); $param = compose_filtres_args($p, $c, ',');
} else $param = ""; } else $param = "";
$collecte = join(',', collecter_balise_dynamique($l, $p, $nom)); $collecte = join(',', collecter_balise_dynamique($l, $p, $nom));
$supp = array_merge(array(
_q($p->descr['sourcefile']),
_q($p->descr['nom']),
_q($p->id_boucle),
intval($p->ligne),
_q($GLOBALS['spip_lang'])),
$supp);
$p->code = sprintf(CODE_EXECUTER_BALISE, $nom, $p->code = sprintf(CODE_EXECUTER_BALISE, $nom,
$collecte, $collecte,
($collecte ? $param : substr($param,1)), # virer la virgule ($collecte ? $param : substr($param,1)), # virer la virgule
join(',', $supp), join(',', $supp));
$p->ligne);
$p->interdire_scripts = false; $p->interdire_scripts = false;
return $p; return $p;
......
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