Browse Source

évaluer correctement les @config:xx@ et avoir des tests unitaires qui testent vraiment ce qu'ils annoncent tester

svn/root/tags/v3.15.0
maieul@maieul.net 4 years ago
parent
commit
b173967d3e
  1. 2
      .gitattributes
  2. 31
      inc/saisies_afficher_si.php
  3. 4
      tests/saisies_afficher_si/saisies_evaluer_afficher_si_config.php

2
.gitattributes vendored

@ -197,5 +197,5 @@ saisies/url.html -text
/saisies_options.php -text
/saisies_pipelines.php -text
tests/saisies_afficher_si/saisies_evaluer_afficher_si.php -text
tests/saisies_afficher_si/saisies_evaluer_afficher_si_config.php -text
tests/saisies_afficher_si/saisies_tester_condition_afficher_si.php -text
tests/saisies_afficher_si/saisies_transformer_condition_afficher_si_config.php -text

31
inc/saisies_afficher_si.php

@ -222,7 +222,6 @@ function saisies_verifier_afficher_si($saisies, $env = null) {
$condition = preg_replace('#@plugin:'.$plug.'@#U', 'false', $condition);
}
}
$condition = saisies_transformer_condition_afficher_si_config($condition);
// On transforme en une condition PHP valide
$ok = saisies_evaluer_afficher_si($condition, $env);
if (!$ok) {
@ -263,6 +262,28 @@ function saisies_set_request_null_recursivement($saisie) {
}
}
/**
* Récupère la valeur d'un champ à tester avec afficher_si
* Si le champ est de type @config:xx@, alors prend la valeur de la config
* sinon en _request() ou en $env["valeurs"]
* @param string $champ: le champ
* @param null|array $env
* @return la valeur du champ ou de la config
**/
function saisies_afficher_si_get_valeur_champ($champ, $env) {
if (preg_match_all("#config:(.*)#", $champ, $matches, PREG_SET_ORDER)) {
foreach ($matches as $plugin) {
$arobase = $plugin[0];
$config_a_tester = str_replace(":", "/", $plugin[1]);
$champ = lire_config($config_a_tester);
}
} elseif (is_null($env)) {
$champ = _request($champ);
} else {
$champ = $env["valeurs"][$champ];
}
return $champ;
}
/**
* Prend un test conditionnel
@ -308,12 +329,7 @@ function saisies_transformer_condition_afficher_si($condition, $env = null) {
if (preg_match_all($regexp, $condition, $tests, PREG_SET_ORDER)) {
foreach ($tests as $test) {
$expression = $test[0];
$champ = $test['champ'];
if (is_null($env)) {
$champ = _request($champ);
} else {
$champ = $env["valeurs"][$champ];
}
$champ = saisies_afficher_si_get_valeur_champ($test['champ'], $env);
$operateur = isset($test['operateur']) ? $test['operateur'] : null;
$valeur = isset($test['valeur']) ? $test['valeur'] : null;
$test_modifie = saisies_tester_condition_afficher_si($champ, $operateur, $valeur) ? 'true' : 'false';
@ -324,6 +340,7 @@ function saisies_transformer_condition_afficher_si($condition, $env = null) {
}
} else {
spip_log("Afficher_si incorrect : $condition", "saisies"._LOG_CRITIQUE);
$condition = true;
}
return $condition;

4
tests/saisies_afficher_si/saisies_transformer_condition_afficher_si_config.php → tests/saisies_afficher_si/saisies_evaluer_afficher_si_config.php

@ -7,7 +7,7 @@
* le 2018-12-20 19:31
*/
$test = 'saisies_transformer_condition_afficher_si_config';
$test = 'saisies_evaluer_afficher_si_config';
$remonte = "../";
while (!is_dir($remonte."ecrire"))
$remonte = "../$remonte";
@ -15,9 +15,7 @@
find_in_path("../plugins/saisies/inc/saisies_afficher_si.php",'',true);
// On va plutot test le resultat des évaluations
function condition_eval($condition) {
$condition = saisies_transformer_condition_afficher_si_config($condition);
return saisies_evaluer_afficher_si($condition);
};
Loading…
Cancel
Save