fix(147): Traitement `email` : faire fonctionner correctement l'option `masquer_champs_vides`
Cette option a été introduite par moi (!) en 11ad7c44.
J'ai testé en reprenant le code d'alors... et ca ne marchait déjà pas.
En fait je ne vois pas comment cela aurait pu marcher, puisque saisie affiche Sans réponse
si aucune valeur n'est passé pour une saisie.
Ce sont bien les saisies qu'il faut filtrer, pas les valeurs.
fix #147 (closed)
Rapports de requête de fusion
Activité
@maieul a ajouté 2 révisions : 4cfa566c67e91627d8b677a0fd2423c7ae51957a 316c758afda4f45662930be5aed757f4cf5ad5f6
@rastapopoulos a approuvé cette PR (316c758afda4f45662930be5aed757f4cf5ad5f6)
@maieul a force-pushed 2 révisions : 316c758afda4f45662930be5aed757f4cf5ad5f6 b7b03c349e23f880beeb4ce11407b59b4f1b80a3
Bonjour Il restait un souci avec les champs imbriqués (par ex. plusieurs fieldset) et de type 'date'. Ceci fonctionne, mais peut sans doute être amélioré :
// Récuperer les valeurs saisies list($valeurs,$valeurs_libellees) = formidable_tableau_valeurs_saisies($saisies); // Traiter le masquage des champs vides si demandé // 1-Supprimer les champs vides de la liste // 2-Ajouter les conteneurs avec au moins un champ non-vide if (isset($options['masquer_champs_vides']) and $options['masquer_champs_vides'] == 'on') { $valeurs_libellees = array_filter($valeurs_libellees); $valeurs = array_filter($valeurs); // Cas particulier rencontré avec les champs de type 'date' // nettoyer les incohérences avec les champs sans réponse mais avec une valeur associée foreach ($valeurs as $key => $value){ if(($valeurs_libellees[$key] === "sans reponse") && ($value != '')) {unset($valeurs[$key]);} } // liste des clés à ne pas vérifier, il en manque sûrement $cles = array('options', 'verifier', 'saisie', 'identifiant'); //Vérifier si le champ doit être affiché car il contient des saisies valides function valider_champs($saisie = array(), &$valeurs = array()) { global $cles; foreach($saisie as $key => $value) { // $saisie est une saisie valide si une valeur est assignée -> $retour='true' if ($key === "options" ){ $retour = $retour || (isset($valeurs[$saisie["options"]["nom"]])); } // Appel récursif de la fonction pour lire un autre niveau de profondeur, en évitant les itérations inutiles. if((is_array($value)) && (!in_array($key, $cles, true))){ $retour_fct = valider_champs($value, $valeurs); } $retour = $retour || $retour_fct; } if ($retour && (isset($saisie["options"]["nom"]))){ // Assigne une valeur au conteneur - fieldset - pour afficher le champ if(!isset($valeurs[$saisie["options"]["nom"]])) { $valeurs[$saisie["options"]["nom"]] = true; } } return $retour; } valider_champs($saisies, $valeurs); $saisies_vides = array_diff(array_keys($valeurs_libellees), array_keys($valeurs)); foreach ($saisies_vides as $saisie_vide) { $saisies_fond_notification = saisies_supprimer($saisies_fond_notification, $saisie_vide); } }//Fin traitement des saisies vides
@philbzh a fermé cette PR