You are here

better_exposed_filters.install in Better Exposed Filters 8.4

Same filename and directory in other branches
  1. 8.5 better_exposed_filters.install
  2. 7.3 better_exposed_filters.install

File

better_exposed_filters.install
View source
<?php

/**
 * @file
 * Contains better_exposed_filters.install.
 */

/**
 * Provide upgrade path from 8.x-3.x to 8.x-4.x.
 */
function better_exposed_filters_update_8001() {
  $config_factory = \Drupal::configFactory();
  foreach ($config_factory
    ->listAll('views.view.') as $config_name) {
    $config = $config_factory
      ->getEditable($config_name);

    // Go through each display on each view.
    $displays = $config
      ->get('display');
    foreach ($displays as $display_name => $display) {
      if (!empty($display['display_options']['exposed_form'])) {
        $exposed_form = $display['display_options']['exposed_form'];

        // Find BEF exposed forms.
        if (isset($exposed_form['type']) && $exposed_form['type'] === 'bef') {
          $bef_settings = [];
          foreach ($exposed_form['options']['bef'] as $type => $option) {

            // General settings.
            if ($type === 'general') {
              $bef_settings['general'] = [
                'autosubmit' => $option['autosubmit'] ?? FALSE,
                'autosubmit_exclude_textfield' => $option['autosubmit_exclude_textfield'] ?? FALSE,
                'autosubmit_hide' => $option['autosubmit_hide'] ?? FALSE,
                'input_required' => $exposed_form['options']['input_required'] ?? FALSE,
              ];
              if (isset($exposed_form['options']['text_input_required'])) {
                $bef_settings['general'] += [
                  'text_input_required' => $exposed_form['options']['text_input_required'],
                  'text_input_required_format' => 'basic_html',
                ];
              }
              $bef_settings['general'] += [
                'allow_secondary' => $option['allow_secondary'] ?? FALSE,
                'secondary_label' => $option['secondary_label'] ?? 'Advanced options',
              ];
            }
            elseif ($type === 'sort') {
              $bef_settings['sort'] = [
                'plugin_id' => $option['bef_format'] ?? 'default',
                'advanced' => [
                  'combine' => $option['advanced']['combine'] ?? FALSE,
                  'combine_rewrite' => $option['advanced']['combine_rewrite'] ?? '',
                  'reset' => $option['advanced']['reset'] ?? FALSE,
                  'reset_label' => $option['advanced']['reset_label'] ?? '',
                  'collapsible' => $option['advanced']['collapsible'] ?? FALSE,
                  'collapsible_label' => $option['advanced']['collapsible_label'] ?? '',
                  'is_secondary' => $option['advanced']['is_secondary'] ?? FALSE,
                ],
              ];
            }
            elseif ($type === 'pager') {
              $bef_settings['pager'] = [
                'plugin_id' => $option['bef_format'] ?? 'default',
                'advanced' => [
                  'is_secondary' => $option['is_secondary'] ?? FALSE,
                ],
              ];
            }
            else {

              // This would indicate a newer version of the config already.
              if ($type === 'filter') {
                continue;
              }
              $field_name = $type;
              $bef_settings['filter'][$field_name] = [
                'plugin_id' => $option['bef_format'] ?? 'default',
              ];

              // Checkboxes/Radio buttons.
              if ($option['bef_format'] === 'bef') {
                $bef_settings['filter'][$field_name]['select_all_none'] = $option['more_options']['select_all_none'] ?? FALSE;
                $bef_settings['filter'][$field_name]['select_all_none_nested'] = $option['more_options']['select_all_none_nested'] ?? FALSE;
              }

              // Links.
              if ($option['bef_format'] === 'bef_links') {
                $bef_settings['filter'][$field_name]['select_all_none'] = $option['more_options']['select_all_none'] ?? FALSE;
              }

              // Sliders.
              if ($option['bef_format'] === 'bef_slider') {

                // Update plugin name to 'bef_sliders'.
                $bef_settings['filter'][$field_name] = [
                  'plugin_id' => 'bef_sliders',
                ];

                // Animate option is now split into two separate options.
                $animate = $option['slider_options']['bef_slider_animate'];
                $animate_ms = 0;
                if (empty($animate)) {
                  $animate = 'none';
                }
                elseif (is_int($animate)) {
                  $animate = 'custom';
                  $animate_ms = $animate;
                }
                $bef_settings['filter'][$field_name] = array_merge($bef_settings['filter'][$field_name], [
                  'min' => $option['slider_options']['bef_slider_min'] ?? 0,
                  'max' => $option['slider_options']['bef_slider_max'] ?? 99999,
                  'step' => $option['slider_options']['bef_slider_step'] ?? 1,
                  'animate' => $animate,
                  'animate_ms' => $animate_ms,
                  'orientation' => $option['slider_options']['bef_slider_orientation'] ?? 'horizontal',
                ]);
              }

              // Shared advanced settings.
              $bef_settings['filter'][$field_name]['advanced'] = [
                'collapsible' => $option['more_options']['bef_collapsible'] ?? FALSE,
                'is_secondary' => $option['more_options']['is_secondary'] ?? FALSE,
                'placeholder_text' => $option['more_options']['placeholder_text'] ?? '',
                'rewrite' => [
                  'filter_rewrite_values' => $option['more_options']['rewrite']['filter_rewrite_values'] ?? '',
                ],
                // New option.
                'sort_options' => FALSE,
              ];
            }
          }

          // Update BEF settings.
          $config
            ->set("display.{$display_name}.display_options.exposed_form.options.bef", $bef_settings);
        }
      }
    }
    $config
      ->save(TRUE);
  }
}

/**
 * Renames bef_slider plugin to bef_sliders to be compatible with 8.x-4.x.
 */
function better_exposed_filters_update_8002() {
  $config_factory = \Drupal::configFactory();
  foreach ($config_factory
    ->listAll('views.view.') as $config_name) {
    $config = $config_factory
      ->getEditable($config_name);

    // Go through each display on each view.
    $displays = $config
      ->get('display');
    $needs_update = FALSE;
    foreach ($displays as $display_name => $display) {
      if (!empty($display['display_options']['exposed_form'])) {
        $exposed_form = $display['display_options']['exposed_form'];

        // Find BEF exposed forms.
        if (isset($exposed_form['type']) && $exposed_form['type'] === 'bef') {
          $bef_settings = $exposed_form['options']['bef'];
          foreach ($exposed_form['options']['bef'] as $type => $option) {
            if ($type === 'filter') {
              $field_name = $type;

              // Sliders.
              if (($option['bef_format'] ?? '') === 'bef_slider') {
                $needs_update = TRUE;

                // Update plugin name to 'bef_sliders'.
                $bef_settings['filter'][$field_name] = [
                  'plugin_id' => 'bef_sliders',
                ];

                // Animate option is now split into two separate options.
                $animate = $option['slider_options']['bef_slider_animate'];
                $animate_ms = 0;
                if (empty($animate)) {
                  $animate = 'none';
                }
                elseif (is_int($animate)) {
                  $animate = 'custom';
                  $animate_ms = $animate;
                }
                $bef_settings['filter'][$field_name] = array_merge($bef_settings['filter'][$field_name], [
                  'min' => $option['slider_options']['bef_slider_min'] ?? 0,
                  'max' => $option['slider_options']['bef_slider_max'] ?? 99999,
                  'step' => $option['slider_options']['bef_slider_step'] ?? 1,
                  'animate' => $animate,
                  'animate_ms' => $animate_ms,
                  'orientation' => $option['slider_options']['bef_slider_orientation'] ?? 'horizontal',
                ]);
              }
            }
          }

          // Update BEF settings.
          if ($needs_update) {
            $config
              ->set("display.{$display_name}.display_options.exposed_form.options.bef", $bef_settings);
          }
        }
      }
    }
    if ($needs_update) {
      $config
        ->save(TRUE);
    }
  }
}

Functions

Namesort descending Description
better_exposed_filters_update_8001 Provide upgrade path from 8.x-3.x to 8.x-4.x.
better_exposed_filters_update_8002 Renames bef_slider plugin to bef_sliders to be compatible with 8.x-4.x.