You are here

function apachesolr_environment_load_subrecords in Apache Solr Search 6.3

Same name and namespace in other branches
  1. 8 apachesolr.module \apachesolr_environment_load_subrecords()
  2. 7 apachesolr.module \apachesolr_environment_load_subrecords()

Export callback to load the view subrecords, which are the index bundles.

1 call to apachesolr_environment_load_subrecords()
apachesolr_load_all_environments in ./apachesolr.module
Function that loads all the environments

File

./apachesolr.module, line 2736
Integration with the Apache Solr search application.

Code

function apachesolr_environment_load_subrecords(&$environments) {
  if (empty($environments)) {

    // Nothing to do.
    return;
  }
  $query = "SELECT env_id, entity_type, bundle\n    FROM {apachesolr_index_bundles}\n    WHERE env_id IN (" . db_placeholders($environments, 'varchar') . ")\n    ORDER BY env_id, entity_type, bundle";
  $all_index_bundles_results = db_query($query, array_keys($environments));
  $all_index_bundles_keyed = array();
  while ($all_index_bundles_result = db_fetch_array($all_index_bundles_results)) {

    // bundle variable comes from the extract
    extract($all_index_bundles_result);
    $all_index_bundles_keyed[$env_id][$entity_type][] = $bundle;
  }
  $query = "SELECT env_id, name, value\n    FROM {apachesolr_environment_variable}\n    WHERE env_id IN (" . db_placeholders($environments, 'varchar') . ")\n    ORDER BY env_id, name, value";
  $all_variables_results = db_query($query, array_keys($environments));
  $variables = array();
  while ($all_variables_result = db_fetch_array($all_variables_results)) {
    extract($all_variables_result);
    $variables[$env_id][$name] = unserialize($value);
  }
  foreach ($environments as $env_id => &$environment) {
    $index_bundles = !empty($all_index_bundles_keyed[$env_id]) ? $all_index_bundles_keyed[$env_id] : array();
    $conf = !empty($variables[$env_id]) ? $variables[$env_id] : array();
    if (is_array($environment)) {

      // Environment is an array.
      // If we have different values in the database compared with what we
      // have in the given environment argument we allow the admin to revert
      // the db values so we can stick with a consistent system
      if (!empty($environment['index_bundles']) && !empty($index_bundles) && $environment['index_bundles'] !== $index_bundles) {
        unset($environment['in_code_only']);
        $environment['type'] = 'Overridden';
      }
      if (!empty($environment['conf']) && !empty($conf) && $environment['conf'] !== $conf) {
        unset($environment['in_code_only']);
        $environment['type'] = 'Overridden';
      }
      $environment['index_bundles'] = empty($environment['index_bundles']) || !empty($index_bundles) ? $index_bundles : $environment['index_bundles'];
      $environment['conf'] = empty($environment['conf']) || !empty($conf) ? $conf : $environment['conf'];
    }
    elseif (is_object($environment)) {

      // Environment is an object.
      if ($environment->index_bundles !== $index_bundles && !empty($index_bundles)) {
        unset($environment->in_code_only);
        $environment->type = 'Overridden';
      }
      if ($environment->conf !== $conf && !empty($conf)) {
        unset($environment->in_code_only);
        $environment->type = 'Overridden';
      }
      $environment->index_bundles = empty($environment->index_bundles) || !empty($index_bundles) ? $index_bundles : $environment->index_bundles;
      $environment->conf = empty($environment->conf) || !empty($conf) ? $conf : $environment->conf;
    }
  }
}