You are here

public function FilterWidgetBase::exposedFormAlter in Better Exposed Filters 8.4

Same name and namespace in other branches
  1. 8.5 src/Plugin/better_exposed_filters/filter/FilterWidgetBase.php \Drupal\better_exposed_filters\Plugin\better_exposed_filters\filter\FilterWidgetBase::exposedFormAlter()

Manipulate views exposed from element.

Parameters

array $form: The views configuration form.

\Drupal\Core\Form\FormStateInterface $form_state: Form state.

Overrides BetterExposedFiltersWidgetInterface::exposedFormAlter

6 calls to FilterWidgetBase::exposedFormAlter()
DatePickers::exposedFormAlter in src/Plugin/better_exposed_filters/filter/DatePickers.php
Manipulate views exposed from element.
Hidden::exposedFormAlter in src/Plugin/better_exposed_filters/filter/Hidden.php
Manipulate views exposed from element.
Links::exposedFormAlter in src/Plugin/better_exposed_filters/filter/Links.php
Manipulate views exposed from element.
RadioButtons::exposedFormAlter in src/Plugin/better_exposed_filters/filter/RadioButtons.php
Manipulate views exposed from element.
Single::exposedFormAlter in src/Plugin/better_exposed_filters/filter/Single.php
Manipulate views exposed from element.

... See full list

6 methods override FilterWidgetBase::exposedFormAlter()
DatePickers::exposedFormAlter in src/Plugin/better_exposed_filters/filter/DatePickers.php
Manipulate views exposed from element.
Hidden::exposedFormAlter in src/Plugin/better_exposed_filters/filter/Hidden.php
Manipulate views exposed from element.
Links::exposedFormAlter in src/Plugin/better_exposed_filters/filter/Links.php
Manipulate views exposed from element.
RadioButtons::exposedFormAlter in src/Plugin/better_exposed_filters/filter/RadioButtons.php
Manipulate views exposed from element.
Single::exposedFormAlter in src/Plugin/better_exposed_filters/filter/Single.php
Manipulate views exposed from element.

... See full list

File

src/Plugin/better_exposed_filters/filter/FilterWidgetBase.php, line 167

Class

FilterWidgetBase
Base class for Better exposed filters widget plugins.

Namespace

Drupal\better_exposed_filters\Plugin\better_exposed_filters\filter

Code

public function exposedFormAlter(array &$form, FormStateInterface $form_state) {

  /** @var \Drupal\views\Plugin\views\filter\FilterPluginBase $filter */
  $filter = $this->handler;
  $filter_id = $filter->options['expose']['identifier'];
  $field_id = $this
    ->getExposedFilterFieldId();
  $is_collapsible = $this->configuration['advanced']['collapsible'];
  $is_secondary = !empty($form['secondary']) && $this->configuration['advanced']['is_secondary'];

  // Sort options alphabetically.
  if ($this->configuration['advanced']['sort_options']) {
    $form[$field_id]['#nested'] = $filter->options['hierarchy'] ?? FALSE;
    $form[$field_id]['#nested_delimiter'] = '-';
    $form[$field_id]['#pre_process'][] = [
      $this,
      'processSortedOptions',
    ];
  }

  // Check for placeholder text.
  if (!empty($this->configuration['advanced']['placeholder_text'])) {

    // @todo Add token replacement for placeholder text.
    $form[$field_id]['#placeholder'] = $this
      ->t($this->configuration['advanced']['placeholder_text']);
  }

  // Handle filter value rewrites.
  if ($this->configuration['advanced']['rewrite']['filter_rewrite_values']) {

    // Reorder options based on rewrite values, if sort options is disabled.
    $form[$field_id]['#options'] = BetterExposedFiltersHelper::rewriteOptions($form[$field_id]['#options'], $this->configuration['advanced']['rewrite']['filter_rewrite_values'], !$this->configuration['advanced']['sort_options']);

    // @todo what is $selected?
    // if (isset($selected) &&
    // !isset($form[$field_id]['#options'][$selected])) {
    // Avoid "Illegal choice" errors.
    // $form[$field_id]['#default_value'] = NULL;
    // }
  }

  // Identify all exposed filter elements.
  $identifier = $filter_id;
  $exposed_label = $filter->options['expose']['label'];
  $exposed_description = $filter->options['expose']['description'];
  if ($filter
    ->isAGroup()) {
    $identifier = $filter->options['group_info']['identifier'];
    $exposed_label = $filter->options['group_info']['label'];
    $exposed_description = $filter->options['group_info']['description'];
  }

  // If selected, collect our collapsible filter form element and put it in
  // a details element.
  if ($is_collapsible) {
    $form[$field_id . '_collapsible'] = [
      '#type' => 'details',
      '#title' => $exposed_label,
      '#description' => $exposed_description,
      '#attributes' => [
        'class' => [
          'form-item',
        ],
      ],
    ];
    if ($is_secondary) {

      // Move secondary elements.
      $this
        ->addElementToGroup($form, $form_state, $field_id . '_collapsible', 'secondary');
    }
  }
  $filter_elements = [
    $identifier,
    $filter->options['expose']['operator_id'],
  ];

  // Iterate over all exposed filter elements.
  foreach ($filter_elements as $element) {

    // Sanity check to make sure the element exists.
    if (empty($form[$element])) {
      continue;
    }

    // Move collapsible elements.
    if ($is_collapsible) {
      $this
        ->addElementToGroup($form, $form_state, $element, $field_id . '_collapsible');
    }
    else {
      $form[$element]['#title'] = $exposed_label;
      $form[$element]['#description'] = $exposed_description;

      // Move secondary elements.
      if ($is_secondary) {
        $this
          ->addElementToGroup($form, $form_state, $element, 'secondary');
      }
    }

    // Finally, add some metadata to the form element.
    $this
      ->addContext($form[$element]);
  }
}