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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+14 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,17 +24,23 @@ function balise_FORMULAIRE_ECRIRE_AUTEUR ($p) {
}

// 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');

	// Pas d'id_auteur ni d'id_article ? Erreur de squelette
	$id = intval($args[1]);
	if (!$args[0] AND !$id)
		return erreur_squelette(
			_T('zbug_champ_hors_motif',
				array ('champ' => '#FORMULAIRE_ECRIRE_AUTEUR',
					'motif' => 'AUTEURS/ARTICLES')), '');

	if (!$args[0] AND !$id) {
		include_spip('public/interfaces');
		$p = new Contexte;
		$p->descr = array('sourcefile' => $context_compil[0],
				  '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, 
	// sortir tous les mails des auteurs de l'article
	if (!$args[0] AND $id) {
+14 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -31,15 +31,22 @@ function balise_FORMULAIRE_SIGNATURE ($p) {

// Verification des arguments (contexte + filtres)
// 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
	if (!$args[0])
		return erreur_squelette(
			_T('zbug_champ_hors_motif',
				array ('champ' => '#FORMULAIRE_SIGNATURE',
					'motif' => 'ARTICLES')), '');

	if (!$args[0]) {
		include_spip('public/interfaces');
		$p = new Contexte;
		$p->descr = array('sourcefile' => $context_compil[0],
				  '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
	else if (!$args[1])
		return '';
+14 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,15 +21,22 @@ function balise_FORMULAIRE_SITE ($p) {
}

// 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
	if (!$args[0])
		return erreur_squelette(
			_T('zbug_champ_hors_motif',
				array ('champ' => '#FORMULAIRE_SITE',
					'motif' => 'RUBRIQUES')), '');

	if (!$args[0]) {
		include_spip('public/interfaces');
		$p = new Contexte;
		$p->descr = array('sourcefile' => $context_compil[0],
				  '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

	return (($GLOBALS['meta']["proposer_sites"] != 2) ? '' : $args);
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -750,7 +750,7 @@ et vous reconnecter au site.
'zbug_boucle_recursive_undef' => 'Boucle r&eacute;cursive non d&eacute;finie&nbsp;: @nom@',
'zbug_calcul' => 'calcul',
'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_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;.
+13 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -272,8 +272,16 @@ if ($lang_select) lang_select();
?'
       .'>');

function synthetiser_balise_dynamique($nom, $args, $file, $lang, $ligne) {
	$r = sprintf(CODE_INCLURE_BALISE, $lang, $file, $nom, join(", ", array_map('argumenter_squelette', $args)), $ligne);
// Cette fonction fabrique l'appel d'une balise dynamique a l'aide du contexte
// 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;
}

@@ -292,7 +300,7 @@ function argumenter_squelette($v) {

// verifier leurs arguments et filtres, et calculer le code a inclure
// 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)) {
		// regarder si une fonction generique n'existe pas
		if (($p = strpos($nom,"_"))
@@ -307,7 +315,7 @@ function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) {
	// Y a-t-il une fonction de traitement des arguments ?
	$f = 'balise_' . $nom . '_stat';
	if (function_exists($f))
		$r = $f($args, $autres); 
		$r = $f($args, $context_compil); 
	else
		$r = $args;
	if (!is_array($r))
@@ -327,12 +335,10 @@ function executer_balise_dynamique($nom, $args, $autres, $lang, $ligne) {
		}
		if (!_DIR_RESTREINT) 
			$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
function lister_objets_avec_logos ($type) {
	global $formats_logos;
Chargement en cours