You are here

public function DefaultMatchingEngineFieldType::fieldQuery in CRM Core 7

Field query to search matches.

Parameters

object $contact: CRM Core contact entity.

object $rule: Matching rule object.

Return value

array Founded matches.

Overrides DefaultMatchingEngineFieldTypeInterface::fieldQuery

2 methods override DefaultMatchingEngineFieldType::fieldQuery()
DateMatchField::fieldQuery in modules/crm_core_default_matching_engine/includes/DateMatchField.inc
Field query to search matches.
EmailMatchField::fieldQuery in modules/crm_core_default_matching_engine/includes/EmailMatchField.inc
Field query to search matches.

File

modules/crm_core_default_matching_engine/includes/DefaultMatchingEngine.inc, line 190

Class

DefaultMatchingEngineFieldType

Code

public function fieldQuery($contact, $rule) {
  $results = array();
  $contact_wrapper = entity_metadata_wrapper('crm_core_contact', $contact);
  $needle = '';
  $field_item = '';
  if (empty($rule->field_item)) {
    $needle = $contact_wrapper->{$rule->field_name}
      ->value();
    $field_item = 'value';
  }
  else {
    $field_value = $contact_wrapper->{$rule->field_name}
      ->value();
    if (isset($field_value)) {
      $needle = $contact_wrapper->{$rule->field_name}->{$rule->field_item}
        ->value();
      $field_item = $rule->field_item;
    }
  }
  if (!empty($needle)) {
    $query = new EntityFieldQuery();
    $query
      ->entityCondition('entity_type', 'crm_core_contact')
      ->entityCondition('bundle', $contact->type);
    $query
      ->entityCondition('entity_id', $contact->contact_id, '<>');
    switch ($rule->operator) {
      case 'equals':
        $query
          ->fieldCondition($rule->field_name, $field_item, $needle);
        break;
      case 'starts':
        $needle = db_like(substr($needle, 0, MATCH_DEFAULT_CHARS)) . '%';
        $query
          ->fieldCondition($rule->field_name, $field_item, $needle, 'LIKE');
        break;
      case 'ends':
        $needle = '%' . db_like(substr($needle, -1, MATCH_DEFAULT_CHARS));
        $query
          ->fieldCondition($rule->field_name, $field_item, $needle, 'LIKE');
        break;
      case 'contains':
        $needle = '%' . db_like($needle) . '%';
        $query
          ->fieldCondition($rule->field_name, $field_item, $needle, 'LIKE');
        break;
    }
    $results = $query
      ->execute();
  }
  return isset($results['crm_core_contact']) ? array_keys($results['crm_core_contact']) : $results;
}