modules/custom/deims_variable_search/deims_variable_search.pages.inc

Summary

Maintainability
Test Coverage
<?php

/**
 * @file
 * Page callbacks for the DEIMS Variable Field Search module.
 */

function deims_variable_search_autocomplete($field_name, $entity_type) {
  $term = $_GET['term'];
  $limit = 10;
  $matches = array();
  $field = field_info_field($field_name);
  $table = _field_sql_storage_tablename($field);
  $id_column = db_escape_field(_field_sql_storage_columnname($field_name, 'id'));

  // Build matching conditions
  $query = db_select('search_index', 'i', array('target' => 'slave'))->extend('SearchQuery')->extend('PagerDefault');
  $query->join($table, 'v', 'v.' . $id_column . ' = i.sid');
  $query->condition('v.deleted', 0);
  $query->condition('v.language', array(LANGUAGE_NONE, $GLOBALS['language']->language), 'IN');
  $query->searchExpression($term, $field_name);

  // Only continue if the first pass query matches.
  if ($query->executeFirstPass()) {
    $results = $query->limit($limit)->execute()->fetchAllAssoc('sid');
    $matches = array_keys($results);
  }

  //if (empty($matches) || count($matches) < $limit) {
  //  $query = db_select($table, 'v');
  //  $query->addField('v', $id_column);
  //  if (!empty($matches)) {
  //    $query->condition($id_column, $matches, 'NOT IN');
  //  }
  //  $or = db_or();
  //  $or->condition(_field_sql_storage_columnname($field_name, 'label'), '%' . db_like($term) . '%', 'LIKE');
  //  $or->condition(_field_sql_storage_columnname($field_name, 'name'), '%' . db_like($term) . '%', 'LIKE');
  //  $or->condition(_field_sql_storage_columnname($field_name, 'definition'), '%' . db_like($term) . '%', 'LIKE');
  //  $query->condition($or);
  //  $results = $query->execute()->fetchCol();
  //  $matches = array_merge($matches, $results);
  //}

  // Load and output results.
  $items = deims_variable_load_multiple($field_name, $matches);
  array_walk($items, '_deims_variable_search_prepare_summary');
  drupal_json_output(array_values($items));
}

function _deims_variable_search_prepare_summary(&$item) {
  $summary = check_plain($item['name']);
  if ($item['name'] != $item['label']) {
    $summary .= ' (' . check_plain($item['label']) . ')';
  }
  $summary .= ' - ' . deims_variable_type_label($item['type']);
  switch ($item['type']) {
    case DEIMS_VARIABLE_TYPE_NOMINAL:
      break;
    case DEIMS_VARIABLE_TYPE_PHYSICAL:
      $summary .= ' (' . check_plain($item['data']['unit']) . ')';
      break;
    case DEIMS_VARIABLE_TYPE_DATE:
      $summary .= ' (' . check_plain($item['data']['pattern']) . ')';
      break;
    case DEIMS_VARIABLE_TYPE_CODES:
      //$item['data']['codes'] = list_allowed_values_string($item['data']['codes']);
      $summary .= ' (' . implode(', ', array_slice(array_keys($item['data']['codes']), 0, 3));
      if (count($item['data']['codes']) > 3) {
        $summary .= ', ...';
      }
      $summary .= ')';
      $item['data']['codes_text'] = list_allowed_values_string($item['data']['codes']);
      break;
  }
  $item['missing_values_text'] = list_allowed_values_string($item['missing_values']);
  if (!empty($item['definition'])) {
    $summary .= ' - ' . truncate_utf8($item['definition'], 48, TRUE, TRUE);
  }
  $item['summary'] = $summary;
}