Merge branch 4.5 into master
[civicrm-core.git] / CRM / Dedupe / BAO / QueryBuilder / IndividualSupervised.php
1 <?php
2
3 // TODO: How to handle NULL values/records?
4 /**
5 * Class CRM_Dedupe_BAO_QueryBuilder_IndividualSupervised
6 */
7 class CRM_Dedupe_BAO_QueryBuilder_IndividualSupervised extends CRM_Dedupe_BAO_QueryBuilder {
8
9 /**
10 * @param $rg
11 *
12 * @return array
13 */
14 public static function record($rg) {
15
16 $civicrm_contact = CRM_Utils_Array::value('civicrm_contact', $rg->params, array());
17 $civicrm_email = CRM_Utils_Array::value('civicrm_email', $rg->params, array());
18
19 $params = array(
20 1 => array(CRM_Utils_Array::value('first_name', $civicrm_contact, ''), 'String'),
21 2 => array(CRM_Utils_Array::value('last_name', $civicrm_contact, ''), 'String'),
22 3 => array(CRM_Utils_Array::value('email', $civicrm_email, ''), 'String'),
23 );
24
25 return array(
26 "civicrm_contact.{$rg->name}.{$rg->threshold}" => CRM_Core_DAO::composeQuery("
27 SELECT contact.id as id1, {$rg->threshold} as weight
28 FROM civicrm_contact as contact
29 JOIN civicrm_email as email ON email.contact_id=contact.id
30 WHERE contact_type = 'Individual'
31 AND first_name = %1
32 AND last_name = %2
33 AND email = %3", $params, TRUE),
34 );
35 }
36
37 /**
38 * @param $rg
39 *
40 * @return array
41 */
42 public static function internal($rg) {
43 $query = "
44 SELECT contact1.id as id1, contact2.id as id2, {$rg->threshold} as weight
45 FROM civicrm_contact as contact1
46 JOIN civicrm_email as email1 ON email1.contact_id=contact1.id
47 JOIN civicrm_contact as contact2 ON
48 contact1.first_name = contact2.first_name AND
49 contact1.last_name = contact2.last_name
50 JOIN civicrm_email as email2 ON
51 email2.contact_id=contact2.id AND
52 email1.email=email2.email
53 WHERE contact1.contact_type = 'Individual'
54 AND " . self::internalFilters($rg);
55 return array("civicrm_contact.{$rg->name}.{$rg->threshold}" => $query);
56 }
57 };