Browse Source

- Il manquait une chaine de langue dans la balise `TRI` en cas d’erreur de squelette.

- On simplifie la sélection de la boucle parente avec une fonction `index_boucle_parente` pour le code des balises.
- On simplifie l’affichage des erreurs de certaines balises (évite des copiers collers dont on oublie de modifier le contenu),
comme ici avec la balise `GRAND_TOTAL` qui avait un mauvais message d’erreur, en ajoutant une fonction `zbug_presenter_champ`
qui utilise directement le nom de la balise par défaut, préfixé d’un éventuel nom de boucle explicite.
master
cedric@yterium.com 2 years ago
parent
commit
140616f416
  1. 1
      ecrire/lang/spip_fr.php
  2. 49
      ecrire/public/balises.php
  3. 46
      ecrire/public/references.php

1
ecrire/lang/spip_fr.php

@ -697,6 +697,7 @@ et vous reconnecter au site.
'zbug_boucle_recursive_undef' => 'Boucle récursive non définie : @nom@',
'zbug_calcul' => 'calcul',
'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle',
'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@',
'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@',
'zbug_code' => 'code',
'zbug_critere_inconnu' => 'Critère inconnu @critere@',

49
ecrire/public/balises.php

@ -508,12 +508,9 @@ function balise_RECHERCHE_dist($p) {
* Pile complétée par le code à générer
**/
function balise_COMPTEUR_BOUCLE_dist($p) {
$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
$b = index_boucle_parente($p);
if ($b === '') {
$msg = array(
'zbug_champ_hors_boucle',
array('champ' => '#COMPTEUR_BOUCLE')
);
$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
erreur_squelette($msg, $p);
} else {
$p->code = "\$Numrows['$b']['compteur_boucle']";
@ -539,12 +536,9 @@ function balise_COMPTEUR_BOUCLE_dist($p) {
* Pile complétée par le code à générer
**/
function balise_TOTAL_BOUCLE_dist($p) {
$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
if ($b === '' || !isset($p->boucles[$b])) {
$msg = array(
'zbug_champ_hors_boucle',
array('champ' => "#$b" . 'TOTAL_BOUCLE')
);
$b = index_boucle_parente($p);
if ($b === '') {
$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
erreur_squelette($msg, $p);
} else {
$p->code = "\$Numrows['$b']['total']";
@ -735,9 +729,9 @@ function balise_EXPOSE_dist($p) {
* Pile complétée par le code à générer
**/
function calculer_balise_expose($p, $on, $off) {
$b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle;
$b = index_boucle($p);
if (empty($p->boucles[$b]->primary)) {
$msg = array('zbug_champ_hors_boucle', array('champ' => '#EXPOSER'));
$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
erreur_squelette($msg, $p);
} else {
@ -1098,7 +1092,7 @@ define('CODE_PAGINATION',
* Pile complétée par le code à générer
*/
function balise_PAGINATION_dist($p, $liste = 'true') {
$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
$b = index_boucle_parente($p);
// s'il n'y a pas de nom de boucle, on ne peut pas paginer
if ($b === '') {
@ -1208,12 +1202,9 @@ function balise_ANCRE_PAGINATION_dist($p) {
* Pile complétée par le code à générer
**/
function balise_GRAND_TOTAL_dist($p) {
$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
if ($b === '' || !isset($p->boucles[$b])) {
$msg = array(
'zbug_champ_hors_boucle',
array('champ' => "#$b" . 'TOTAL_BOUCLE')
);
$b = index_boucle_parente($p);
if ($b === '') {
$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
erreur_squelette($msg, $p);
} else {
$p->code = "(isset(\$Numrows['$b']['grand_total'])
@ -2649,14 +2640,11 @@ function balise_HTML5_dist($p) {
* Pile complétée par le code à générer
*/
function balise_TRI_dist($p, $liste = 'true') {
$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
$b = index_boucle_parente($p);
// s'il n'y a pas de nom de boucle, on ne peut pas trier
if ($b === '') {
erreur_squelette(
_T('zbug_champ_hors_boucle',
array('champ' => '#TRI')
), $p->id_boucle);
$msg = array('zbug_champ_hors_boucle', array('champ' => zbug_presenter_champ($p)));
erreur_squelette($msg, $p);
$p->code = "''";
return $p;
@ -2666,10 +2654,11 @@ function balise_TRI_dist($p, $liste = 'true') {
// s'il n'y a pas de tri_champ, c'est qu'on se trouve
// dans un boucle recursive ou qu'on a oublie le critere {tri}
if (!isset($boucle->modificateur['tri_champ'])) {
erreur_squelette(
_T('zbug_tri_sans_critere',
array('champ' => '#TRI')
), $p->id_boucle);
$msg = array('zbug_champ_hors_critere', array(
'champ' => zbug_presenter_champ($p),
'critere' => 'tri'
));
erreur_squelette($msg, $p);
$p->code = "''";
return $p;

46
ecrire/public/references.php

@ -46,7 +46,7 @@ function index_boucle($p) {
$explicite = $p->nom_boucle;
if (strlen($explicite)) {
// Recherche d'un champ dans un etage superieur
// Recherche d'un champ dans un étage supérieur
while (($idb !== $explicite) && ($idb !== '')) {
$idb = $p->boucles[$idb]->id_parent;
}
@ -55,6 +55,38 @@ function index_boucle($p) {
return $idb;
}
/**
* Retrouver l'index de la boucle parente d'une balise (sauf explicitée)
*
* Retrouve la boucle parente d’une balise, sauf si son nom est explicité
*
* - `#MABALISE` : l'index sera celui de la boucle parente
* - `#_autreboucle:MABALISE` : l'index est celui de la boucle _autreboucle si elle est bien englobante
*
* @example
* Dans une balise dynamique ou calculée :
* ```
* $idb = index_boucle_parente($p);
* ```
*
* @param Champ $p AST au niveau de la balise
* @return string
*
* - Identifiant de la boucle parente possédant ce champ, ou '' si pas de parent.
* - '' si une référence explicite incorrecte est envoyée
*/
function index_boucle_parente($p) {
if (strlen($p->nom_boucle)) {
// retourne l’index explicite demandé s’il existe
return index_boucle($p);
}
if (!empty($p->descr['id_mere'])) {
return $p->descr['id_mere'];
}
return '';
}
/**
* Retourne la position dans la pile d'un champ SQL
*
@ -925,3 +957,15 @@ function rindex_pile($p, $champ, $motif) {
return $p;
}
/**
* Retourne le nom de la balise indiquée pour les messages d’erreurs
* @param Pile $p Description de la balise
* @param string $champ Nom du champ
* @return string Nom de la balise, avec indication de boucle explicite si présent.
*/
function zbug_presenter_champ($p, $champ = "") {
$balise = $champ ? $champ : $p->nom_champ;
$explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
return "#{$explicite}{$balise}";
}
Loading…
Cancel
Save