From bc4b6f0f5694d1a5b8e2151e6dcf9a394c300df4 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 6 Mar 2017 22:49:00 -0500 Subject: [PATCH] CRM-20102 - Return case_id from activity api --- api/v3/Activity.php | 30 ++++++++++++++++-------------- tests/phpunit/api/v3/CaseTest.php | 17 ++++++++++++----- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/api/v3/Activity.php b/api/v3/Activity.php index ba87a024a0..0838fa9d83 100644 --- a/api/v3/Activity.php +++ b/api/v3/Activity.php @@ -318,13 +318,13 @@ function civicrm_api3_activity_get($params) { // Support search by activity_contact $extraFieldSpecs = array(); _civicrm_api3_activity_create_spec($extraFieldSpecs); - $options = civicrm_api3('ActivityContact', 'getoptions', array('field' => 'record_type_id')); - $options = $options['values']; + $recordTypes = civicrm_api3('ActivityContact', 'getoptions', array('field' => 'record_type_id')); + $recordTypes = $recordTypes['values']; $activityContactOptions = array( 'contact_id' => NULL, - 'target_contact_id' => array_search('Activity Targets', $options), - 'source_contact_id' => array_search('Activity Source', $options), - 'assignee_contact_id' => array_search('Activity Assignees', $options), + 'target_contact_id' => array_search('Activity Targets', $recordTypes), + 'source_contact_id' => array_search('Activity Source', $recordTypes), + 'assignee_contact_id' => array_search('Activity Assignees', $recordTypes), ); foreach ($activityContactOptions as $activityContactName => $activityContactValue) { if (!empty($params[$activityContactName])) { @@ -375,7 +375,7 @@ function civicrm_api3_activity_get($params) { return civicrm_api3_create_success($activities, $params, 'Activity', 'get'); } - $activities = _civicrm_api3_activity_get_formatResult($params, $activities); + $activities = _civicrm_api3_activity_get_formatResult($params, $activities, $options); //legacy custom data get - so previous formatted response is still returned too return civicrm_api3_create_success($activities, $params, 'Activity', 'get'); } @@ -392,18 +392,12 @@ function civicrm_api3_activity_get($params) { * @return array * new activities list */ -function _civicrm_api3_activity_get_formatResult($params, $activities) { +function _civicrm_api3_activity_get_formatResult($params, $activities, $options) { if (!$activities) { return $activities; } - $returns = CRM_Utils_Array::value('return', $params, array()); - if (!is_array($returns)) { - $returns = str_replace(' ', '', $returns); - $returns = explode(',', $returns); - } - $returns = array_fill_keys($returns, 1); - + $returns = $options['return']; foreach ($params as $n => $v) { if (substr($n, 0, 7) == 'return.') { $returnkey = substr($n, 7); @@ -482,6 +476,14 @@ function _civicrm_api3_activity_get_formatResult($params, $activities) { } break; + case 'case_id': + $dao = CRM_Core_DAO::executeQuery("SELECT activity_id, case_id FROM civicrm_case_activity WHERE activity_id IN (%1)", + array(1 => array(implode(',', array_keys($activities)), 'String', CRM_Core_DAO::QUERY_FORMAT_NO_QUOTES))); + while ($dao->fetch()) { + $activities[$dao->activity_id]['case_id'] = $dao->case_id; + } + break; + default: if (substr($n, 0, 6) == 'custom') { $returnProperties[$n] = $v; diff --git a/tests/phpunit/api/v3/CaseTest.php b/tests/phpunit/api/v3/CaseTest.php index 61558e5f06..7504a95cf8 100644 --- a/tests/phpunit/api/v3/CaseTest.php +++ b/tests/phpunit/api/v3/CaseTest.php @@ -284,12 +284,12 @@ class api_v3_CaseTest extends CiviCaseTestCase { */ public function testCaseActivityCreate() { $params = $this->_params; - $this->callAPISuccess('case', 'create', $params); + $case = $this->callAPISuccess('case', 'create', $params); $params = array( - 'case_id' => 1, + 'case_id' => $case['id'], // follow up 'activity_type_id' => $this->followup_activity_type_value, - 'subject' => 'Test followup', + 'subject' => 'Test followup 123', 'source_contact_id' => $this->_loggedInUser, 'target_contact_id' => $this->_params['contact_id'], ); @@ -301,7 +301,7 @@ class api_v3_CaseTest extends CiviCaseTestCase { // Check other DB tables populated properly - is there a better way to do this? assertDBState() requires that we know the id already. $dao = new CRM_Case_DAO_CaseActivity(); - $dao->case_id = 1; + $dao->case_id = $case['id']; $dao->activity_id = $this->_caseActivityId; $this->assertEquals($dao->find(), 1, 'case_activity table not populated correctly in line ' . __LINE__); $dao->free(); @@ -313,7 +313,14 @@ class api_v3_CaseTest extends CiviCaseTestCase { $this->assertEquals($dao->find(), 1, 'activity_contact table not populated correctly in line ' . __LINE__); $dao->free(); - // TODO: There's more things we could check + // Check that fetching an activity by case id works, as well as returning case_id + $result = $this->callAPISuccessGetSingle('Activity', array( + 'case_id' => $case['id'], + 'activity_type_id' => $this->followup_activity_type_value, + 'subject' => 'Test followup 123', + 'return' => array('case_id'), + )); + $this->assertEquals($case['id'], $result['case_id']); } /** -- 2.25.1