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); } } }