From a220b3572a68c41745980db0a47ef23cc8373047 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Thu, 17 May 2018 15:18:53 +0530 Subject: [PATCH] (dev/core/116) Search builder searches on primary addresses are producing unexpected results --- CRM/Contact/BAO/Query.php | 2 +- tests/phpunit/CRM/Contact/SelectorTest.php | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index 81a191cfa3..d25a91de4a 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -3736,7 +3736,7 @@ WHERE $smartGroupClause } $countryClause = $countryQill = NULL; - if ($values && !empty($value)) { + if (in_array($op, array('IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY')) || ($values && !empty($value))) { $this->_tables['civicrm_address'] = 1; $this->_whereTables['civicrm_address'] = 1; diff --git a/tests/phpunit/CRM/Contact/SelectorTest.php b/tests/phpunit/CRM/Contact/SelectorTest.php index a949df5420..b2ab9ae310 100644 --- a/tests/phpunit/CRM/Contact/SelectorTest.php +++ b/tests/phpunit/CRM/Contact/SelectorTest.php @@ -73,6 +73,12 @@ class CRM_Contact_Form_SelectorTest extends CiviUnitTestCase { // Ensure that search builder return individual contact as per criteria if (!empty($dataSet['context'] == 'builder')) { $contactID = $this->individualCreate(['first_name' => 'James', 'last_name' => 'Bond']); + $this->callAPISuccess('Address', 'create', [ + 'contact_id' => $contactID, + 'location_type_id' => "Home", + 'is_primary' => 1, + 'country_id' => "IN", + ]); $rows = $selector->getRows(CRM_Core_Action::VIEW, 0, 50, ''); $this->assertEquals(1, count($rows)); $sortChar = $selector->alphabetQuery()->fetchAll(); @@ -231,7 +237,7 @@ class CRM_Contact_Form_SelectorTest extends CiviUnitTestCase { 'description' => 'Normal search builder behaviour', 'class' => 'CRM_Contact_Selector', 'settings' => array(), - 'form_values' => array('contact_type' => 'Individual'), + 'form_values' => array('contact_type' => 'Individual', 'country' => array('IS NOT NULL' => 1)), 'params' => array(), 'return_properties' => array( 'contact_type' => 1, @@ -243,9 +249,9 @@ class CRM_Contact_Form_SelectorTest extends CiviUnitTestCase { 'includeContactIds' => NULL, 'searchDescendentGroups' => FALSE, 'expected_query' => array( - 0 => 'SELECT contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`', - 1 => ' FROM civicrm_contact contact_a', - 2 => 'WHERE ( contact_a.contact_type IN ("Individual") ) AND (contact_a.is_deleted = 0)', + 0 => 'SELECT contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, civicrm_address.id as address_id, civicrm_address.country_id as country_id', + 1 => ' FROM civicrm_contact contact_a LEFT JOIN civicrm_address ON ( contact_a.id = civicrm_address.contact_id AND civicrm_address.is_primary = 1 )', + 2 => 'WHERE ( contact_a.contact_type IN ("Individual") AND civicrm_address.country_id IS NOT NULL ) AND (contact_a.is_deleted = 0)', ), ), ), -- 2.25.1