You are here

function search_api_federated_solr_form_search_api_federated_solr_search_app_settings_alter in Search API Federated Solr 8

Implements hook_form_FORM_ID_alter() for search_api_federated_solr_search_settings_form.

Validates whether or not the search app's chosen index has a site_name property and alters the search app settings form accordingly.

See also

\Drupal\search_api_federated_solr\Form\SearchApiFederatedSolrSearchAppSettingsForm

File

./search_api_federated_solr.module, line 126
Contains hook implementations for the Federated Solr Search API Module.

Code

function search_api_federated_solr_form_search_api_federated_solr_search_app_settings_alter(&$form, FormStateInterface $form_state) {
  if ($search_index_id = $form['search_index']['#default_value']) {
    $config = \Drupal::configFactory()
      ->getEditable('search_api_federated_solr.search_app.settings');
    $index_config = \Drupal::config('search_api.index.' . $search_index_id);

    // Determine if the index has a site name property, which could have been
    // added / removed since last form load.
    $site_name_property = $index_config
      ->get('field_settings.site_name.configuration.site_name');
    $config
      ->set('index.has_site_name_property', $site_name_property ? TRUE : FALSE);

    // If the index doesn't have a site name property.
    if (!$site_name_property) {

      // Reset the search app config options.
      $form['site_name_property']['#value'] = '';
      $form['set_search_site']['#default_value'] = 0;
      $config
        ->set('facet.site_name.set_default', 0);
    }
    else {

      // Ensure the hidden form field reflects lack of site name property.
      $form['site_name_property']['#value'] = 'true';
    }
    $config
      ->save();
  }
}