public function EmailMatchField::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 DefaultMatchingEngineFieldType::fieldQuery
File
- modules/
crm_core_default_matching_engine/ includes/ EmailMatchField.inc, line 124 - Implementation of DefaultMatchingEngineFieldTypeInterface for email fields.
Class
- EmailMatchField
- Class for evaluating email fields.
Code
public function fieldQuery($contact, $rule) {
$results = array();
$contact_wrapper = entity_metadata_wrapper('crm_core_contact', $contact);
$needle = '';
$field_item = '';
if (isset($contact_wrapper->{$rule->field_name}->{$rule->field_item})) {
$needle = $contact_wrapper->{$rule->field_name}->{$rule->field_item}
->value();
}
else {
$needle = $contact_wrapper->{$rule->field_name}
->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':
$field_item = 'email';
$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;
}