You are here

function _apachesolr_reference_fetch_field_items in Apachesolr Reference 7

Fetch SOLR objects for a field from a list of SOLR ids.

Parameters

array $items: the items stored for a field

array $settings: field setting array

Return value

array An array of solr objects keyed on item delta.

2 calls to _apachesolr_reference_fetch_field_items()
apachesolr_reference_field_formatter_view in ./apachesolr_reference.module
Implements hook_formatter_view().
apachesolr_reference_field_widget_form in ./apachesolr_reference.module
Implements hook_field_widget_form().

File

./apachesolr_reference.module, line 663
functionality for creating reference fields to apache solr objects.

Code

function _apachesolr_reference_fetch_field_items($items, $settings) {
  $solr_env = _apachesolr_reference_default_solr_environment($settings);
  $field_query = array(
    $settings['field_query'],
  );
  $fields = array();
  foreach ($settings['search_fields'] as $field) {
    $fields[$field] = $field;
  }

  // If additional SOLR values to retrieve, add them to array.
  if (strlen($settings['field_list']) > 0) {
    $add_fields = explode(',', $settings['field_list']);
    foreach ($add_fields as $field) {
      $fields[$field] = $field;
    }
  }

  // Build an array of specific id's to retrieve.
  $ids = array();
  foreach ($items as $delta => $item) {
    $ids[$delta] = '"' . $item['target_id'] . '"';
  }
  if (count($ids) > 0) {
    $field_query[] = $settings['search_fields']['id'] . ': (' . implode(' OR ', $ids) . ')';

    // If the language is set add it as a query param.
    if (isset($settings['language'])) {
      $field_query[] = 'ss_language: ' . $settings['language'];
    }
    $solr_items = array();
    if ($results = _apachesolr_reference_solr_query($solr_env, $field_query, $fields)) {
      foreach ($results as $result) {
        $test_id = '"' . $result->{$settings}['search_fields']['id'] . '"';
        if (in_array($test_id, $ids)) {
          $delta = array_search($test_id, $ids);
          $solr_items[$delta] = $result;
        }
      }
    }
    $items = $solr_items;
  }

  // Call ksort here to restore delta order specified by Drupal.
  ksort($items);
  return $items;
}