Alterar un webform para crear campos de dependientes

 /**

 * form alter for validate fields in user form

 */

function pb_general_forms_form_alter(&$form, &$form_state, $form_id) {

  $user_form = array("user_form", "user_register_form");

  // Edit user_form

  if (in_array($form_id, $user_form)) {

    $form['#validate'][] = 'pb_general_forms_form_edit_user_validate';

    $form['#validate'][] = 'pb_general_forms_iquals_phone';

  }

  // Webform Iniciativas

  if ($form_id == 'webform_submission_iniciativas_juveniles_2020_add_form') {

    $element = $form_state->getTriggeringElement();

    $form['#tree'] = TRUE;

    $localidad = '';

    $barrio = '';

    $barrios = [];

    $form['elements']['grupo1']['barrio_select']['#options'] = $barrios;

    // Identify element call ajax for assign value to variable temp.

    if (!empty($element) && isset($element['#webform_key']) && isset($element['#value'])) {

      switch ($element['#webform_key']) {

        case 'localidad':

          $localidad = $element['#value'];

          break;

        case 'barrio_select':

          $barrio = $element['#value'];

          break;

      }

    }


   $form['elements']['grupo2']['localidad']['#ajax'] = [

      'event' => 'change',

      'callback' => '_pb_general_forms_barrios_ajax_callback',

      'wrapper' => 'serialNumber_wrapper',

      'method'=> 'replace',

      'progress' => [

        'type' => 'throbber',

        'message' => t('Verifying entry...'),

      ]

    ];


    $form['elements']['grupo2']['barrio_select']['#prefix'] = '<div id="serialNumber_wrapper">';

    $form['elements']['grupo2']['barrio_select']['#suffix'] = '</div>';



    $form['elements']['grupo2']['barrio_select']['#ajax'] = [

      'event' => 'change',

      'callback' => '_pb_general_forms_upz_ajax_callback',

      'wrapper' => 'serial_upz_wrapper',

      'method'=> 'replace',

      'progress' => [

        'type' => 'throbber',

        'message' => t('Verifying entry...'),

      ]

    ];


    $form['elements']['grupo2']['upz']['#prefix'] = '<div id="serial_upz_wrapper">';

    $form['elements']['grupo2']['upz']['#suffix'] = '</div>';

    $form['elements']['grupo2']['upz']['#attributes'] = [

      'id' => ['serial_upz_wrapper'],

    ];


    if (!empty($localidad)) {

      $barrios = _barrios_by_localidad($localidad);

      $form['elements']['grupo2']['barrio_select']['#options'] = $barrios;

    }


    if (!empty($barrio)) {

      $upz = _upz_by_barrio($barrio);

      $form['elements']['grupo2']['upz']['#options'] = $upz;

    }

  }

}


function _barrios_by_localidad($localidad_id) {

  $response = [];

  $manager = \Drupal::entityTypeManager()->getStorage('taxonomy_term');

  $localidad_term = $manager->load($localidad_id);

  $barrios = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadByProperties([

    'vid' => 'barrios',

    'field_codigo' => $localidad_term->field_codigo->value,

  ]);

  foreach ($barrios as $barrio) {

    $response[$barrio->id()] = $barrio->getName();

  }

  return $response;

}


function _upz_by_barrio($id_barrio) {

  $response = [];

  $manager = \Drupal::entityTypeManager()->getStorage('taxonomy_term');

  $barrio_term = $manager->load($id_barrio);

  $upzs = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadByProperties([

    'vid' => 'upz',

    'field_cod_upz' => (int) $barrio_term->field_cod_upz->value,

  ]);

  foreach ($upzs as $upz) {

    $response[$upz->id()] = $upz->getName();

  }

  return $response;

}


/**

 * Submit form ajax for postulants.

 *

 * @param array $form

 *   The form elements array.

 * @param \Drupal\Core\Form\FormStateInterface $form_state

 *   The form state object.

 *

 * @return array

 *   The modified form array.

 */

function _pb_general_forms_barrios_ajax_callback(array &$form, FormStateInterface $form_state) {

  return $form['elements']['grupo2']['barrio_select'];

}


/**

 * Submit form ajax for postulants.

 *

 * @param array $form

 *   The form elements array.

 * @param \Drupal\Core\Form\FormStateInterface $form_state

 *   The form state object.

 *

 * @return array

 *   The modified form array.

 */

function _pb_general_forms_upz_ajax_callback(array &$form, FormStateInterface $form_state) {

  return $form['elements']['grupo2']['upz'];

}

Comentarios

Entradas populares