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
Publicar un comentario