Bonsoir
à nouveau un souci de formulaire:
Je voudrais n’envoyer par courriel que les réponses significatives, et donc masquer les champs qui restent vierges.
J’ai donc coché la case 'Masquer les champs vides’
la réponse envoyée contient toujours l’ensemble des champs avec la mention « Sans réponse »
'Masquer les champs vides’ semble donc sans effet. J’ai tenté de contourner en cherchant du côté de ‹ formulaire_analyse ›, mais sans succès jusqu’ici.
Merci de vos lumières!
je ne comprend pas comment cela avait pu passer chez moi… je devait avoir doublement les yeux pas en face des trou
j’ai envoyé une nouvelle version du code qui semble marcher…sur un formulaire simple.
pour $options['masquer_champs_vides'] ?? '' cela veut dire "si $options['masquer_champs_vides'] n’existe pas, prendre '' à la place. Cela éviter d’avoir des warnings de clé indéfini.
Bonjour
Pas au clair avec le fonctionnement de git… du coup, je re-poste ici :
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
Je prendrai le tps prochainement de refaire une PR pour avoir quelque chose de propre. On passera surement par une fonction dans saisies pour faire le filtre.
Bonjour Maïeul
La solution que j’avais trouvé en modifiant traiter/email.php était pleinement fonctionnelle. Du coup, j’ai jeté un coup d’oeil aux PR, mais sans mettre en oeuvre la solution proposée, faute de temps.
Mais d’après ce que j’ai compris, ça correspond