From 04ccd3db35cc32f8b2f14e502db6b8768ae7556a Mon Sep 17 00:00:00 2001 From: Jitendra Purohit Date: Mon, 15 May 2017 19:24:08 +0530 Subject: [PATCH] CRM-20578: Empty update of Activity assignee/target results into DB error --- api/v3/Activity.php | 2 +- tests/phpunit/api/v3/ActivityTest.php | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/api/v3/Activity.php b/api/v3/Activity.php index 0d6a85de41..66d1544b7d 100644 --- a/api/v3/Activity.php +++ b/api/v3/Activity.php @@ -571,7 +571,7 @@ function _civicrm_api3_activity_check_params(&$params) { SELECT count(*) FROM civicrm_contact WHERE id IN (' . implode(', ', $contactIds) . ' )'; - if (count($contactIds) != CRM_Core_DAO::singleValueQuery($sql)) { + if (!empty($contactIds) && count($contactIds) != CRM_Core_DAO::singleValueQuery($sql)) { throw new API_Exception('Invalid Contact Id'); } } diff --git a/tests/phpunit/api/v3/ActivityTest.php b/tests/phpunit/api/v3/ActivityTest.php index c9f3ae9f78..c35fd143e8 100644 --- a/tests/phpunit/api/v3/ActivityTest.php +++ b/tests/phpunit/api/v3/ActivityTest.php @@ -1014,6 +1014,7 @@ class api_v3_ActivityTest extends CiviUnitTestCase { */ public function testActivityUpdate() { $result = $this->callAPISuccess('activity', 'create', $this->_params); + $this->_contactID2 = $this->individualCreate(); $params = array( 'id' => $result['id'], @@ -1024,6 +1025,7 @@ class api_v3_ActivityTest extends CiviUnitTestCase { 'details' => 'Lets update Meeting', 'status_id' => 1, 'source_contact_id' => $this->_contactID, + 'assignee_contact_id' => $this->_contactID2, 'priority_id' => 1, ); @@ -1032,6 +1034,26 @@ class api_v3_ActivityTest extends CiviUnitTestCase { $params['activity_date_time'] = '2009-10-11 12:34:56'; // we also unset source_contact_id since it is stored in an aux table unset($params['source_contact_id']); + //Check if assignee created. + $assignee = $this->callAPISuccess('ActivityContact', 'get', array( + 'activity_id' => $result['id'], + 'return' => array("contact_id"), + 'record_type_id' => "Activity Assignees", + )); + $this->assertNotEmpty($assignee['values']); + + //clear assignee contacts. + $updateParams = array( + 'id' => $result['id'], + 'assignee_contact_id' => array(), + ); + $activity = $this->callAPISuccess('activity', 'create', $updateParams); + $assignee = $this->callAPISuccess('ActivityContact', 'get', array( + 'activity_id' => $activity['id'], + 'return' => array("contact_id"), + 'record_type_id' => "Activity Assignees", + )); + $this->assertEmpty($assignee['values']); $this->getAndCheck($params, $result['id'], 'activity'); } -- 2.25.1