Données liste de sélection non rapatriées lors de la réouverture d'un Webform en modification

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je reprends un espace client en ligne développé en Drupal (que je découvre).

Celui-ci permet, entre autres, au client d’enregistrer sa liste de personnel.
J’ai pour ce faire un Webform qui permet l’ajout d’une personne. Celui-ci permet la soumission d’un nouvel enregistrement mais aussi le retour sur des données déjà saisies dans e but de les modifier.

En regardant de plus près le fonctionnement de ce webform, j’ai constaté que lors de la création initiale d’une personne, les informations étaient bien enregistrées (jusqu’ici tout va bien) mais que lors du retour sur un formulaire en modification toutes les informations ne remontaient pas.
Ainsi, par exemple, le nom de la personne est bien restitué tel qu’il a été saisi initialement, mais son grade par exemple, issu d’une liste de sélection n’est pas remonté (alors que j’ai pu vérifier qu’il avait bien été enregistré). Du coup si on re-valide le webform, l’information initialement saisie est perdue.

Pour être le plus exhaustif possible, j’ai également constaté l’existence d’un module associé à mon webform qui permet de peupler 2 des listes de sélection dont le contenu est conditionné par certaines informations liées au compte utilisateur. Etrangement, pour la première liste dans ce cas (le budget), la données est bien restituée au retour sur le webform en modification mais pas pour la deuxième (le grade).

Voici, pour exemple, une image de mon formulaire lors de la création initiale d’une personne :

(capture webform création)

Et voici le même formulaire tel qu’il se présente quand je reviens sur cette personne préalablement créée (on voit que le grade est vide):

(capture webform modification)

Et en complément, voici le code qui alimente les listes budget et grade en fonction du client connecté.

//Table de référence des budgets alimentée selon le client
$optionsBudget = array('_none' => 'Sélectionnez un budget');

if($profiles->field_budget_coll['und']){

  foreach ($profiles->field_budget_coll['und'] as $budget) {

    $budgetInfos = db_select('field_data_field_budget_coll', 'fdfbc');
    $budgetInfos->leftJoin('field_data_field_num_budget', 'fdfnb', 'fdfbc.field_budget_coll_value = fdfnb.entity_id');
    $budgetInfos->leftJoin('field_data_field_libelle_budget', 'fdflb', 'fdfbc.field_budget_coll_value = fdflb.entity_id');
    $budgetInfos->fields('fdfnb', array('field_num_budget_value'))
      ->fields('fdflb', array('field_libelle_budget_value'))
      ->condition('fdfbc.field_budget_coll_value', $budget['value'], '=');

    $result = $budgetInfos->execute();

    $libelleBudget = '';
    $idBudget = '';
    foreach ($result->fetchAssoc() as $key => $record) {
      $libelleBudget .= $record . ' - ';
      if($key == 'field_num_budget_value'){
        $idBudget = $record;
      }
    }

    $optionsBudget[$idBudget] = substr($libelleBudget, 0, -3);
  }

}

$form['field_agent_budget']['und']['#options'] = $optionsBudget;

$form['field_agent_id_coll']['#type'] = 'hidden';
$form['field_agent_id_coll']['und'][0]['value']['#default_value'] = $_SESSION['id_collec'];

$form['field_agent_statut_retraite']['und']['#ajax'] = array(
  'callback' => 'ajax_statut_retraite',
  'wrapper' => 'agent_statut',
);

//Table de référence des grades alimentée selon le client
if($profiles->field_domaine['und'][0]['value']=='FPH')
{
  $grades = db_select('aapp_grade_h', 'grade')
    ->fields('grade')
    ->execute();
}
else
{
  $grades = db_select('aapp_grade', 'grade')
    ->fields('grade')
    ->execute();
}

$optionsGrades = array('_none' => 'Choisir un grade');

while ($value = $grades->fetchAssoc()) {
  $optionsGrades[$value['code']] = $value['code'] . ' - ' . $value['libelle'];
}

$form['field_code_grade']['und']['#options'] = $optionsGrades;

Merci aux âmes charitables qui auront une idée sur mon souci ou partageront leur expérience sur la question !

Forum : 
Version de Drupal :