Browse Source

Afficher_si en php: si on teste sur un champ inexistant, alors on considère que tout le test est bon

Passer aussi par le plpeline saisies_afficher_si_js_saisies_form (et du coup peut être à renommer un de ces 4).
pull/77/head
Maïeul 2 years ago
parent
commit
d2b5c9eb38
  1. 16
      inc/saisies_afficher_si_php.php
  2. 34
      tests/saisies_afficher_si/saisies_evaluer_afficher_si.php

16
inc/saisies_afficher_si_php.php

@ -43,6 +43,7 @@ include_spip('inc/saisies_afficher_si_commun');
*/
function saisies_verifier_afficher_si($saisies, $env = null, $saisies_toutes_par_nom = array()) {
if (!$saisies_toutes_par_nom) {
$saisies = pipeline('saisies_afficher_si_js_saisies_form', $saisies);
$saisies_toutes_par_nom = saisies_lister_par_nom($saisies);
}
// compat historique
@ -216,12 +217,12 @@ function saisies_transformer_condition_afficher_si($condition, $env = null, $sai
foreach ($tests as $test) {
$expression = $test[0];
if (!isset($test['booleen'])) {
$nom_champ = $test['champ'];
if (!$no_arobase) {
$champ = saisies_afficher_si_get_valeur_champ($test['champ'], $env, $saisies_par_nom);
$valeur_champ = saisies_afficher_si_get_valeur_champ($nom_champ, $env, $saisies_par_nom);
} else {
$champ = $no_arobase;
$valeur_champ = $no_arobase;
}
$total = isset($test['total']) ? $test['total'] : '';
@ -236,8 +237,13 @@ function saisies_transformer_condition_afficher_si($condition, $env = null, $sai
$valeur = null;
}
$test_modifie = saisies_tester_condition_afficher_si($champ, $total, $operateur, $valeur, $negation) ? 'true' : 'false';
$condition = str_replace($expression, $test_modifie, $condition);
if (!$saisies_par_nom or isset($saisies_par_nom[$nom_champ])) {
$test_modifie = saisies_tester_condition_afficher_si($valeur_champ, $total, $operateur, $valeur, $negation) ? 'true' : 'false';
$condition = str_replace($expression, $test_modifie, $condition);
} else {
$condition = '';// Si champ inexistant, on laisse tomber tout le tests
spip_log("Afficher_si incorrect. Champ $nom_champ inexistant", "saisies"._LOG_CRITIQUE);
}
}
}
} else {

34
tests/saisies_afficher_si/saisies_evaluer_afficher_si.php

@ -12,7 +12,7 @@
while (!is_dir($remonte."ecrire"))
$remonte = "../$remonte";
require $remonte.'tests/test.inc';
find_in_path("../plugins/saisies/inc/saisies_afficher_si_php.php",'',true);
find_in_path("../plugins/saisies/inc/saisies.php",'',true);
// chercher la fonction si elle n'existe pas
if (!function_exists($f='saisies_evaluer_afficher_si')){
@ -35,10 +35,26 @@
set_request('cascade', array('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 (
'saisie' => 'input',
'options' =>
array (
'label' => 'Ligne de texte',
'type' => 'text',
'afficher_si' => '!@truc@',
'size' => '40',
'autocomplete' => 'defaut',
'nom' => 'input_1',
),
),
);
//
// hop ! on y va
//
$err = tester_fun($f, essais_saisies_evaluer_afficher_si());
$err = tester_fun($f, essais_saisies_evaluer_afficher_si(saisies_lister_par_nom($saisies)));
effacer_config('tests_saisies_config');
// si le tableau $err est pas vide ca va pas
@ -50,7 +66,7 @@
// On va tester essentiellement sur des set_request, le cas $env étant normalement identique
function essais_saisies_evaluer_afficher_si(){
function essais_saisies_evaluer_afficher_si($saisies_par_nom){
$essais = array (
'simple_egalite' =>
array (
@ -250,6 +266,18 @@
'not_match_negation' => array(
'0' => true,
'1' => '!@input_1@ !MATCH \'/domaine.ext$/\'',
),
'champ_inexistant' => array(
'0' => true,
'1' => '@champ_inexistant@ == \'s\'',
'2' => null,
'3' => $saisies_par_nom
),
'champ_existant' => array(
'0' => false,
'1' => '@input_1@ == \'s\'',
'2' => null,
'3' => $saisies_par_nom
)
);
return $essais;

Loading…
Cancel
Save