better_exposed_filters-8.x-4.x-dev/better_exposed_filters.install

better_exposed_filters.install
<?php

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

/**
 * Implements hook_requirements().
 */
function better_exposed_filters_requirements($phase): array {
  if ($phase !== 'runtime') {
    return [];
  }

  // Check installed libraries.
  $libraries_directory_file_finder = \Drupal::service('library.libraries_directory_file_finder');
  $lib_slider_internal = $libraries_directory_file_finder->find('nouislider');

  if ($lib_slider_internal) {
    $requirements['bef_nouislider'] = [
      'title' => t('BEF: library noUiSlider'),
      'value' => t('Better exposed filters library noUiSlider is installed locally.'),
      'description' => 'The library is installed and will be loaded from this Drupal site.',
      'severity' => REQUIREMENT_OK,
    ];
  }
  else {
    $requirements['bef_nouislider'] = [
      'title' => t('BEF: library noUiSlider'),
      'value' => t('Better exposed filters library noUiSlider is not installed locally and will be loaded from CDN. Loading external files from a CDN may be a data protection violation.'),
      'description' => 'Please install the library. For more information see README.md',
      'severity' => REQUIREMENT_WARNING,
    ];
  }

  return $requirements;
}

/**
 * Implements hook_update_last_removed().
 */
function better_exposed_filters_update_last_removed(): int {
  return 8005;
}

/**
 * Set default opt-out of collapsible_disable_automatic_open.
 */
function better_exposed_filters_update_8006(): void {
  $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 = $exposed_form['options']['bef'];
          foreach ($bef_settings as $type => &$option) {

            // Collapsible disable automatic opening option is available for
            // the filter type only.
            if ($type === 'filter') {
              foreach ($option as &$field_settings) {

                // Final check to ensure that we are where we are expecting to
                // be in the configuration, otherwise leave untouched.
                if (!isset($field_settings['advanced']) || !isset($field_settings['advanced']['collapsible'])) {
                  continue;
                }

                // Update advanced settings.
                $field_settings['advanced']['collapsible_disable_automatic_open'] = FALSE;
              }
            }
          }

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

    $config->save(TRUE);
  }
}

/**
 * Set default value for new "hide_label" option.
 */
function better_exposed_filters_update_8007(): void {
  $config_factory = \Drupal::configFactory();

  foreach ($config_factory->listAll('views.view.') as $config_name) {
    $needs_update = FALSE;
    $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'])) {
        // This view display doesn't use an exposed form.
        continue;
      }

      $exposed_form = $display['display_options']['exposed_form'];
      if (!isset($exposed_form['type']) || $exposed_form['type'] !== 'bef') {
        // This exposed form is not managed by Better Exposed Filters.
        continue;
      }

      $bef_settings = $exposed_form['options']['bef'];
      foreach ($bef_settings as $type => &$option) {
        if ($type !== 'filter') {
          // "Hide label" option is available for the "filter" type only.
          continue;
        }

        foreach ($option as &$field_settings) {
          if (!isset($field_settings['advanced'])) {
            // No advanced options configured.
            continue;
          }
          if (isset($field_settings['advanced']['hide_label'])) {
            // "Hide label" option already configured.
            continue;
          }

          // Update advanced settings.
          $field_settings['advanced']['hide_label'] = FALSE;
          $needs_update = TRUE;
        }
      }

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

    if ($needs_update) {
      // Save configuration.
      $config->save(TRUE);
    }
  }
}

/**
 * Set default value for new "autosubmit_textfield_minimum_length" option.
 */
function better_exposed_filters_update_10001(): void {
  $config_factory = \Drupal::configFactory();

  foreach ($config_factory->listAll('views.view.') as $config_name) {
    $needs_update = FALSE;
    $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'])) {
        // This view display doesn't use an exposed form.
        continue;
      }

      $exposed_form = $display['display_options']['exposed_form'];
      if (!isset($exposed_form['type']) || $exposed_form['type'] !== 'bef') {
        // This exposed form is not managed by Better Exposed Filters.
        continue;
      }

      $bef_settings = $exposed_form['options']['bef'];
      if (isset($bef_settings['general']['autosubmit_textfield_minimum_length'])) {
        // "autosubmit_textfield_minimum_length" option already configured.
        continue;
      }

      // Update advanced settings.
      $bef_settings['general']['autosubmit_textfield_minimum_length'] = 3;
      $needs_update = TRUE;

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

    if ($needs_update) {
      // Save configuration.
      $config->save(TRUE);
    }
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc