système qui permet de gérer des validations conditionnelles entre différents champs de service, où certains champs ne sont obligatoires que si d'autres sont activés.

PHOTO EMBED

Wed Jan 15 2025 17:40:14 GMT+0000 (Coordinated Universal Time)

Saved by @swaab #drupal #features

/**
 * Implements hook_form_FORM_ID_alter().
 */
function actency_module_form_config_pages_configuration_modules_et_options_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  unset($form['field_activation_du_service_dete']['widget']['#default_value']);
  $form['#validate'][] = '_check_ai_service_required_field';
}

/**
 * Validation callback for detection service field.
 */
function _check_ai_service_required_field($form, FormStateInterface $form_state) {
  $field_controls = [
    'field_activation_du_service_dete' => 'field_activation_du_module_assis',
    'field_activation_du_service_sugg' => 'field_activation_du_service_dete',
    'field_activation_du_service_eval' => 'field_activation_du_service_dete',
    'field_delai_maximum_pour_soumett' => 'field_activation_du_service_eval',
    'field_aide_memoire_fonction_asse' => 'field_activation_du_service_dete',
    'field_aide_memoire_fonction_prof' => 'field_activation_du_service_dete',
    'field_sujet_attente_definition' => 'field_activation_du_service_dete',
    'field_texte_attente_definition' => 'field_activation_du_service_dete',
    'field_sujet_attente_resultat' => 'field_activation_du_service_eval',
    'field_texte_attente_resultat' => 'field_activation_du_service_eval',
    'field_sujet_attente_traitement' => 'field_activation_du_service_eval',
    'field_text_attente_traitement' => 'field_activation_du_service_eval',
  ];

  foreach ($field_controls as $dependent_field => $control_field) {
    $field_value = $form_state->getValue($control_field)[0]['value'];

    if (!$field_value) {
      $form_errors = $form_state->getErrors();
      $form_state->clearErrors();
      $dependent_field_value = $dependent_field.'][0][value';
      $dependent_field_uri = $dependent_field.'][0][uri';
      $dependent_field_title = $dependent_field.'][0][title';
      if(isset($form_errors[$dependent_field_value])){
        unset($form_errors[$dependent_field_value]);
      }elseif (isset($form_errors[$dependent_field_uri])){
        unset($form_errors[$dependent_field_uri], $form_errors[$dependent_field_title]);
      }else{
        unset($form_errors[$dependent_field]);
      }
      foreach ($form_errors as $name => $error_message) {
        $form_state->setErrorByName($name, $error_message);
      }
    }
  }
}
content_copyCOPY

Ce code en Drupal fait deux choses principales : Il modifie un formulaire de configuration en supprimant la valeur par défaut du champ 'field_activation_du_service_dete' et ajoute une validation personnalisée. La fonction de validation _check_ai_service_required_field gère des dépendances entre différents champs du formulaire : Elle définit des relations de contrôle entre les champs (par exemple, 'field_activation_du_service_dete' dépend de 'field_activation_du_module_assis') Si un champ de contrôle est désactivé (valeur false), elle supprime les erreurs de validation sur les champs qui en dépendent Elle préserve les autres erreurs de validation qui ne sont pas liées à ces dépendances En résumé, c'est un système qui permet de gérer des validations conditionnelles entre différents champs de service, où certains champs ne sont obligatoires que si d'autres sont activés.