You are here

function webform_bootstrap_webform_element_alter in Webform 6.x

Same name and namespace in other branches
  1. 8.5 modules/webform_bootstrap/webform_bootstrap.module \webform_bootstrap_webform_element_alter()

Implements hook_webform_element_alter().

File

modules/webform_bootstrap/webform_bootstrap.module, line 44
Helps support Webform to Bootstrap integration.

Code

function webform_bootstrap_webform_element_alter(array &$element, FormStateInterface $form_state, array $context) {
  if (!_webform_bootstrap_is_active_theme()) {
    return;
  }

  // Convert #description are being changed smart descriptions which
  // contain render arrays to rendered markup.
  // @see \Drupal\bootstrap\Utility\Element::smartDescription
  static $smart_description_enabled;
  if (!isset($smart_description_enabled)) {
    $theme = \Drupal\bootstrap\Bootstrap::getTheme();
    $smart_description_enabled = $theme
      ->getSetting('tooltip_enabled') && $theme
      ->getSetting('forms_smart_descriptions');
  }

  // We need to set $element['#smart_description'] to false if the element's
  // description_display is set to 'before' or 'after' otherwise Bootstrap will
  // display as a tooltip regardless of the setting.
  if ($smart_description_enabled && isset($element['#description']) && isset($element['#description_display']) && empty($element['#smart_description']) && ($element['#description_display'] === 'after' || $element['#description_display'] === 'before')) {
    $element['#smart_description'] = FALSE;
  }
  if ($smart_description_enabled && isset($element['#description']) && is_array($element['#description']) && (empty($element['#smart_description']) || $element['#smart_description'] === TRUE)) {
    $element['#description'] = \Drupal::service('renderer')
      ->renderPlain($element['#description']);
  }

  // Enable Bootstrap .input-group wrapper for #field_prefix.
  // and/or #field_suffix support.
  // @see \Drupal\bootstrap\Plugin\ProcessManager::process
  if (isset($element['#field_prefix']) || isset($element['#field_suffix'])) {
    $element['#input_group'] = TRUE;
  }

  // Tweak element types.
  if (isset($element['#type'])) {
    $element_info = \Drupal::service('element_info')
      ->getInfo($element['#type']);
    if (isset($element_info['#pre_render'])) {
      foreach ($element_info['#pre_render'] as $pre_render) {
        if (is_array($pre_render) && in_array($pre_render[1], [
          'preRenderCompositeFormElement',
          'preRenderWebformCompositeFormElement',
        ])) {

          // Prevent elements that extend radios and checkboxes from being wrapped
          // in a fieldset.
          // @see \Drupal\bootstrap\Plugin\Alter\ElementInfo::alter
          $element['#bootstrap_panel'] = FALSE;
          break;
        }
      }
    }
  }
}