Browse Source

- `afficher_si` : permettre les tests sur `toto/truc/bidule`

- en profiter pour améliorer `saisies_set_request` et `saisies_request`
pour supporter cette syntaxe
pull/97/head
Maïeul 2 years ago
parent
commit
262309223f
  1. 28
      inc/saisies_request.php
  2. 1
      saisies_afficher_si_js/defaut.php
  3. 10
      tests/saisies_afficher_si/saisies_evaluer_afficher_si.php

28
inc/saisies_request.php

@ -19,8 +19,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
/**
* Trouve le résultat d'une saisie (_request())
* en tenant compte du fait que la saisie peut être décrit sous forme de sous entrées d'un tableau
* - soit `toto[truc][bidule]`
* - soit `toto/truc/bidule`
*
* @todo Prendre en compte aussi la notation champ/index/index
* @param string $champ
* Nom du champ de la saisie, y compris avec crochets pour sous entrées
* @param null|array $tableau
@ -40,6 +41,16 @@ function saisies_request($champ, $tableau = null) {
foreach ($index[1] as $cle) {
$valeur = isset($valeur[$cle]) ? $valeur[$cle] : null;
}
} elseif (count($explode = explode('/', $champ)) > 1) {
if ($tableau) {
$valeur = $tableau[array_shift($explode)];
} else {
$valeur = _request(array_shift($explode));
}
// On va chercher au fond du tableau
foreach ($explode as $cle) {
$valeur = isset($valeur[$cle]) ? $valeur[$cle] : null;
}
} else {
// Sinon la valeur est juste celle du champ
if ($tableau) {
@ -116,8 +127,8 @@ function saisies_request_property_from_FILES($champ, $property = 'name') {
/**
* Modifie la valeur d'un saisie postée en tenant compte que ça puisse être un tableau
*
* @todo Prendre en compte aussi la notation champ/index/index
* - soit `toto[truc][bidule]`
* - soit `toto/truc/bidule`
* @todo Prendre un arg en plus pour enregistrer la valeur dans un autre tableau que le GET/POST
* @param string $nom
* Nom du champ
@ -142,6 +153,17 @@ function saisies_set_request($champ, $valeur) {
// Et on reinjecte le tout
saisies_liste_set_request('get', $nom_champ_principal, $champ_principal);
set_request($nom_champ_principal, $champ_principal);
} elseif (count($explode = explode('/', $champ)) > 1) {
$nom_champ_principal = array_shift($explode);
$enfant = &$champ_principal;
foreach ($explode as $cle) {
$enfant = &$enfant[$cle];
}
// Une fois descendu tout en bas, on met la valeur
$enfant = $valeur;
// Et on reinjecte le tout
saisies_liste_set_request('get', $nom_champ_principal, $champ_principal);
set_request($nom_champ_principal, $champ_principal);
}
// Sinon la valeur est juste celle du nom
else {

1
saisies_afficher_si_js/defaut.php

@ -32,6 +32,7 @@ function saisies_afficher_si_js_defaut($parse, $saisies_form) {
$parse['valeur'] = $m['regexp'];
$parse['regexp_modif'] = $m['regexp_modif'];
}
$parse['champ'] = saisie_nom2name($parse['champ']);
$parse = json_encode($parse);
return $negation.'afficher_si('.$parse.')';
}

10
tests/saisies_afficher_si/saisies_evaluer_afficher_si.php

@ -35,9 +35,9 @@
set_request("nombre", "20");
set_request("nombre_negatif", '-20');
set_request('cascade', array('a'=>'a'));
saisies_set_request('cascade_bis/a', 'a');
include_spip("inc/config");
ecrire_config("tests_saisies_config", array("a" => "a", "sous" => array("b" => "b", "c" => "c")));
// Tableau de saisies
$saisies = array (
array (
@ -253,6 +253,14 @@
0 => true,
1 => '@cascade[a]@ == \'a\''
),
'cascade_slash' => array(
0 => true,
1 => '@cascade/a@ == \'a\''
),
'cascade_bis' => array(
0 => true,
1 => '@cascade_bis/a@ == \'a\''
),
'total_tableau_sup' => array(
0 => true,
1 => '@tableau_1@:TOTAL > 2'

Loading…
Cancel
Save