You are here

function acquia_search_add_apachesolr_overrides in Acquia Connector 7.3

Same name and namespace in other branches
  1. 7.2 acquia_search/acquia_search.module \acquia_search_add_apachesolr_overrides()

Overrides apachesolr configs to talk to the proper Acquia search core.

It determines proper (preferred) Acquia search core to which the site should be connected and overrides the apachesolr config accordingly. If a proper search core is not found, it enables the read-only mode so that the site does not unintentionally connect to the wrong core and corrupts its index.

Parameters

Drupal\acquia_search\PreferredSearchCoreService $core_service: Core service.

array $environments: The apachesolr environments.

Return value

bool|null True if preferred core has been found in the list of available cores and it was used to override the search settings.

4 calls to acquia_search_add_apachesolr_overrides()
AcquiaSearchUnitTestCase::testApacheSolrOverride in acquia_search/tests/acquia_search.test
Tests that Acquia Search properly overrides the Apachesolr connection.
AcquiaSearchUnitTestCase::testApacheSolrOverrideAllAcquiaEnvironments in acquia_search/tests/acquia_search.test
Tests that existing apachesolr Acquia Search environments get overridden.
AcquiaSearchUnitTestCase::testApacheSolrOverrideWhenCoreWithDbNameNotAvailable in acquia_search/tests/acquia_search.test
Test override.
acquia_search_init in acquia_search/acquia_search.module
Implements hook_init().

File

acquia_search/acquia_search.module, line 77
Integration between Acquia Drupal and Acquia's hosted solr search service.

Code

function acquia_search_add_apachesolr_overrides(PreferredSearchCoreService $core_service, array $environments) {
  global $conf;
  $overrode = FALSE;
  foreach ($environments as $acquia_env_id => $environment) {

    // Override Acquia search environments only.
    if ($environment['service_class'] != 'AcquiaSearchService') {
      continue;
    }

    // Skip if the Acquia search environment has already been overridden.
    if (!empty($conf['apachesolr_environments'][$acquia_env_id])) {
      continue;
    }
    $conf['apachesolr_environments'][$acquia_env_id]['acquia_search_possible_cores'] = $core_service
      ->getListOfPossibleCores();
    if ($core_service
      ->isPreferredCoreAvailable()) {
      $derived_key = acquia_search_get_derived_key_for_core($core_service
        ->getPreferredCoreId());
      $conf['apachesolr_environments'][$acquia_env_id]['url'] = $core_service
        ->getPreferredCoreUrl();
      $conf['apachesolr_environments'][$acquia_env_id]['conf'] = array(
        'acquia_search_key' => $derived_key,
      );
      $conf['apachesolr_environments'][$acquia_env_id]['overridden_by_acquia_search'] = ACQUIA_SEARCH_OVERRIDE_AUTO_SET;
      drupal_static_reset('apachesolr_load_all_environments');
      $overrode = TRUE;
      continue;
    }

    // At this point none of the available search cores match to what is
    // expected. Switch the search into read-only mode.
    if (!variable_get('acquia_search_disable_auto_read_only', 0)) {
      $conf['apachesolr_environments'][$acquia_env_id]['conf'] = array(
        'apachesolr_read_only' => 1,
      );
      $conf['apachesolr_environments'][$acquia_env_id]['overridden_by_acquia_search'] = ACQUIA_SEARCH_AUTO_OVERRIDE_READ_ONLY;
      drupal_static_reset('apachesolr_load_all_environments');
      $overrode = TRUE;
    }
  }
  return $overrode;
}