You are here

function acquia_search_add_apachesolr_overrides in Acquia Connector 7.2

Same name and namespace in other branches
  1. 7.3 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:

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 details to avoid unintended writing to a wrong search index.
AcquiaSearchUnitTestCase::testApacheSolrOverrideAllAcquiaEnvironments in acquia_search/tests/acquia_search.test
Tests that all existing Acquia Search environments for apachesolr get overridden.
AcquiaSearchUnitTestCase::testApacheSolrOverrideWhenCoreWithDbNameNotAvailable in acquia_search/tests/acquia_search.test
Tests that it selects the correct preferred search core ID for the override URL when limited number of core ID is available.
acquia_search_init in acquia_search/acquia_search.module
Implements hook_init().

File

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

Code

function acquia_search_add_apachesolr_overrides($core_service, $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;
}