You are here

public function BoundaryFilter::buildExposeForm in Geolocation Field 8.3

Same name and namespace in other branches
  1. 8 src/Plugin/views/filter/BoundaryFilter.php \Drupal\geolocation\Plugin\views\filter\BoundaryFilter::buildExposeForm()
  2. 8.2 src/Plugin/views/filter/BoundaryFilter.php \Drupal\geolocation\Plugin\views\filter\BoundaryFilter::buildExposeForm()

Options form subform for exposed filter options.

Overrides FilterPluginBase::buildExposeForm

See also

buildOptionsForm()

File

src/Plugin/views/filter/BoundaryFilter.php, line 107

Class

BoundaryFilter
Filter handler for search keywords.

Namespace

Drupal\geolocation\Plugin\views\filter

Code

public function buildExposeForm(&$form, FormStateInterface $form_state) {
  $geocoder_settings = NestedArray::getValue($form_state
    ->getUserInput(), [
    'options',
    'expose',
    'geocoder_plugin_settings',
  ]);
  if (empty($geocoder_settings)) {
    $geocoder_settings = $this->options['expose']['geocoder_plugin_settings'];
  }
  if (empty($geocoder_settings)) {
    $geocoder_settings = [];
  }
  $geocoder_options = [];
  foreach ($this->geocoderManager
    ->getDefinitions() as $id => $definition) {
    if (empty($definition['frontendCapable'])) {
      continue;
    }
    $geocoder_options[$id] = $definition['name'];
  }
  if ($geocoder_options) {
    $form['expose']['input_by_geocoding_widget'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Use geocoding widget to retrieve boundary values'),
      '#default_value' => $this->options['expose']['input_by_geocoding_widget'],
    ];
    $form['expose']['geocoder_plugin_settings'] = [
      '#type' => 'container',
      '#states' => [
        'visible' => [
          'input[name="options[expose][input_by_geocoding_widget]"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    $geocoder_container =& $form['expose']['geocoder_plugin_settings'];
    $geocoder_container['plugin_id'] = [
      '#type' => 'select',
      '#options' => $geocoder_options,
      '#title' => $this
        ->t('Geocoder plugin'),
      '#default_value' => $geocoder_settings['plugin_id'],
      '#ajax' => [
        'callback' => [
          get_class($this->geocoderManager),
          'addGeocoderSettingsFormAjax',
        ],
        'wrapper' => 'boundary-geocoder-plugin-settings',
        'effect' => 'fade',
      ],
    ];
    if (!empty($geocoder_settings['plugin_id'])) {
      $geocoder_plugin = $this->geocoderManager
        ->getGeocoder($geocoder_settings['plugin_id'], $geocoder_settings['settings']);
    }
    elseif (current(array_keys($geocoder_options))) {
      $geocoder_plugin = $this->geocoderManager
        ->getGeocoder(current(array_keys($geocoder_options)));
    }
    if (!empty($geocoder_plugin)) {
      $geocoder_settings_form = $geocoder_plugin
        ->getOptionsForm();
      if ($geocoder_settings_form) {
        $geocoder_container['settings'] = $geocoder_settings_form;
      }
    }
    if (empty($geocoder_container['settings'])) {
      $geocoder_container['settings'] = [
        '#type' => 'html_tag',
        '#tag' => 'span',
        '#value' => $this
          ->t("No settings available."),
      ];
    }
    $geocoder_container['settings'] = array_replace_recursive($geocoder_container['settings'], [
      '#flatten' => TRUE,
      '#prefix' => '<div id="boundary-geocoder-plugin-settings">',
      '#suffix' => '</div>',
    ]);
  }
  parent::buildExposeForm($form, $form_state);
}