You are here

protected function BetterExposedFilters::addDefaultElementInfo in Better Exposed Filters 8.4

Same name and namespace in other branches
  1. 8.5 src/Plugin/views/exposed_form/BetterExposedFilters.php \Drupal\better_exposed_filters\Plugin\views\exposed_form\BetterExposedFilters::addDefaultElementInfo()

Adds default element callbacks.

This is a workaround where adding process and pre-render functions are not results in replacing the default ones instead of merging.

@todo remove once the following issues are resolved.

Parameters

array $element: The render array for a single form element.

See also

https://www.drupal.org/project/drupal/issues/2070131

https://www.drupal.org/project/drupal/issues/2190333

1 call to BetterExposedFilters::addDefaultElementInfo()
BetterExposedFilters::exposedFormAlter in src/Plugin/views/exposed_form/BetterExposedFilters.php
Alters the exposed form.

File

src/Plugin/views/exposed_form/BetterExposedFilters.php, line 882

Class

BetterExposedFilters
Exposed form plugin that provides a basic exposed form.

Namespace

Drupal\better_exposed_filters\Plugin\views\exposed_form

Code

protected function addDefaultElementInfo(array &$element) {

  /** @var \Drupal\Core\Render\ElementInfoManager $element_info_manager */
  $element_info = \Drupal::service('element_info');
  if (isset($element['#type']) && empty($element['#defaults_loaded']) && ($info = $element_info
    ->getInfo($element['#type']))) {
    $element['#process'] = $element['#process'] ?? [];
    $element['#pre_render'] = $element['#pre_render'] ?? [];
    if (!empty($info['#process'])) {
      $element['#process'] = array_merge($info['#process'], $element['#process']);
    }
    if (!empty($info['#pre_render'])) {
      $element['#pre_render'] = array_merge($info['#pre_render'], $element['#pre_render']);
    }

    // Some processing needs to happen prior to the default form element
    // callbacks (e.g. sort). We use the custom '#pre_process' array for this.
    if (!empty($element['#pre_process'])) {
      $element['#process'] = array_merge($element['#pre_process'], $element['#process']);
    }

    // Workaround to add support for #group FAPI to all elements currently not
    // supported.
    // @todo remove once core issue is resolved.
    // @see https://www.drupal.org/project/drupal/issues/2190333
    if (!in_array('processGroup', array_column($element['#process'], 1))) {
      $element['#process'][] = [
        '\\Drupal\\Core\\Render\\Element\\RenderElement',
        'processGroup',
      ];
      $element['#pre_render'][] = [
        '\\Drupal\\Core\\Render\\Element\\RenderElement',
        'preRenderGroup',
      ];
    }
  }

  // Apply the same to any nested children.
  foreach (Element::children($element) as $key) {
    $child =& $element[$key];
    $this
      ->addDefaultElementInfo($child);
  }
}