Browse Source

add: Nouvelle fonction `saisie_mapper_option()` pour appliquer une fonction pour une option donnée d'un ensemble de saisies.

pull/223/head
Maïeul 2 weeks ago committed by Gitea
parent
commit
ad254041d8
  1. 3
      CHANGELOG.md
  2. 49
      inc/saisies_manipuler.php
  3. 80
      tests/saisies_manipuler/saisies_mapper_option.php

3
CHANGELOG.md

@ -10,7 +10,8 @@
### Added
- #208 Tenir compte des options pour dev lorsqu'on nettoie l'environnement de `#GENERER_SAISIES`
- #222 Nouvelle fonction `saisie_mapper_option()` pour appliquer une fonction de rappel sur une (ou plusieurs) options données d'un ensemble de saisies
- #222 `saisie_transformer_option()` peut recevoir une liste d'option à modifier, plutôt qu'une option unique
## [4.4.1] - 2022-06-06

49
inc/saisies_manipuler.php

@ -403,7 +403,7 @@ function saisies_transformer_noms($saisies, $masque, $remplacement) {
* @param $saisies
* Tableau décrivant les saisies
* @param $option
* Nom de l'option à transformer (par ex "nom", ou "afficher_si")
* Nom de l'option à transformer (par ex "nom", ou "afficher_si"), ou tableau
* @param $masque
* Ce que l'on doit chercher dans le texte
* @param $remplacement
@ -413,23 +413,17 @@ function saisies_transformer_noms($saisies, $masque, $remplacement) {
* Retourne le tableau modifié des saisies
*/
function saisies_transformer_option($saisies, $option, $masque, $remplacement, $recursif = True) {
if (is_array($saisies)) {
foreach ($saisies as $cle => $saisie) {
// Seulement si l'option demandée est bien textuelle
if (isset($saisie['options'][$option]) and is_string($saisie['options'][$option])) {
$saisies[$cle]['options'][$option] = preg_replace($masque, $remplacement, $saisie['options'][$option]);
} else {
$saisies[$cle]['options'][$option] = preg_replace($masque, $remplacement, '');
}
// On parcourt récursivement toutes les saisies enfants
if (isset($saisie['saisies']) and is_array($saisie['saisies']) and $recursif) {
$saisies[$cle]['saisies'] = saisies_transformer_option($saisie['saisies'], $option, $masque, $remplacement);
return saisies_mapper_option(
$saisies,
$option,
function ($valeur, $masque, $remplacement) {
if (!is_string($valeur)) {
$valeur = '';
}
}
}
return $saisies;
return preg_replace($masque, $remplacement, $valeur);
},
[$masque, $remplacement],
$recursif);
}
@ -438,29 +432,32 @@ function saisies_transformer_option($saisies, $option, $masque, $remplacement, $
*
* @param array $saisies
* Tableau décrivant les saisies
* @param str $option
* @param str|array $options
* Nom de l'option à transformer (par ex "nom", ou "afficher_si")
* Ou tableau de noms
* @param str $callback
* Nom de la fonction à appliquer
* @param array $args
* Arguments de la fonction de rappel
* La valeur de l'option est passée automatiquement en premier
* @param bool $recursif=True
* @return array
* Retourne le tableau modifié des saisies
*/
function saisies_mapper_option($saisies, $option, $callback, $args = [], $recursif = True) {
function saisies_mapper_option($saisies, $options, $callback, $args = [], $recursif = True) {
if (!is_array($options)) {
$options = [$options];
}
if (is_array($saisies)) {
foreach ($saisies as $cle => $saisie) {
// Seulement si l'option demandée est bien textuelle
if (isset($saisie['options'][$option]) and is_string($saisie['options'][$option])) {
$saisies[$cle]['options'][$option] = preg_replace($masque, $remplacement, $saisie['options'][$option]);
} else {
$saisies[$cle]['options'][$option] = preg_replace($masque, $remplacement, '');
foreach ($options as $option) {
if (isset($saisie['options'][$option])) {
$saisies[$cle]['options'][$option] = call_user_func_array($callback, array_merge([$saisies[$cle]['options'][$option]], $args));
}
}
// On parcourt récursivement toutes les saisies enfants
if (isset($saisie['saisies']) and is_array($saisie['saisies']) and $recursif) {
$saisies[$cle]['saisies'] = saisies_transformer_option($saisie['saisies'], $option, $masque, $remplacement);
$saisies[$cle]['saisies'] = saisies_mapper_option($saisie['saisies'], $option, $callback, $args, $recursif);
}
}
}

80
tests/saisies_manipuler/saisies_mapper_option.php

@ -0,0 +1,80 @@
<?php
/**
* Test unitaire de la fonction saisies_mapper_option, avec heritage
* du fichier ../plugins/saisies/inc/saisies_manipuler.php
*
*/
$test = 'saisies_mapper_option';
$remonte = "";
while (!is_file($remonte."test.inc") and !is_dir($remonte.'ecrire/'))
$remonte = $remonte."../";
foreach ([$remonte."test.inc", $remonte."tests/test.inc", $remonte."tests/tests/legacy/test.inc"] as $f) {
if (is_file($f)){
require $f;
break;
}
}
if (!defined('_SPIP_TEST_INC')) {
die('Impossible de trouver test.inc depuis ' .getcwd());
}
find_in_path("inc/saisies.php",'',true);
// chercher la fonction si elle n'existe pas
function tester_saisies_mapper_option($saisies, $option, $callback) {
if (!function_exists($f='saisies_mapper_option')){
find_in_path("inc/filtres.php",'',true);
$f = chercher_filtre($f);
}
return saisies_supprimer_identifiants($f($saisies, $option, $callback));
}
$g = 'tester_saisies_mapper_option';
$err = tester_fun($g, essais_saisies_mapper_option());
// si le tableau $err est pas vide ca va pas
if ($err) {
die ('<dl>' . join('', $err) . '</dl>');
}
echo "OK";
function essais_saisies_mapper_option(){
$essais = array (
array(
0 => array (
0 =>
array (
'saisie' => 'choix_grille_1',
'options' =>
array (
'nom' => 'choix_grille_1',
'data_rows' => ['a' => 'a', 'b' => 'b'],
'data_cols' => ['a' => 'a', 'b' => 'b']
)
),
),
1 => array (
0 =>
array (
'saisie' => 'choix_grille_1',
'options' =>
array (
'nom' => 'choix_grille_1',
'data_rows' => 'a|a
b|b',
'data_cols' => 'a|a
b|b',
)
)
),
2 => ['data_cols', 'data_rows'],
3 => 'saisies_chaine2tableau',
),
);
return $essais;
}
?>
Loading…
Cancel
Save