From c318f0dd748c073b7e28786eec5933fe73551ef5 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sat, 13 Aug 2022 14:37:22 -0400 Subject: [PATCH] APIv4 - Support case_id param for Activity.create, add test This moves processCaseActivity call out of APIv3 and into the BAO where it can be re-used by APIv4. --- CRM/Activity/BAO/Activity.php | 9 +++++++++ api/v3/Activity.php | 9 --------- tests/phpunit/api/v4/Entity/CaseTest.php | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 1c80354a30..1f40d7b3e2 100644 --- a/CRM/Activity/BAO/Activity.php +++ b/CRM/Activity/BAO/Activity.php @@ -521,6 +521,15 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // Add to case + if (!empty($params['case_id']) && $action === 'create') { + // If this is a brand new case activity, add to case(s) + foreach ((array) $params['case_id'] as $singleCaseId) { + $caseActivityParams = ['activity_id' => $activity->id, 'case_id' => $singleCaseId]; + CRM_Case_BAO_Case::processCaseActivity($caseActivityParams); + } + } + CRM_Utils_Hook::post($action, 'Activity', $activity->id, $activity); return $result; } diff --git a/api/v3/Activity.php b/api/v3/Activity.php index 9d0a86bce4..a93c443ea8 100644 --- a/api/v3/Activity.php +++ b/api/v3/Activity.php @@ -67,15 +67,6 @@ function civicrm_api3_activity_create($params) { $activityBAO = CRM_Activity_BAO_Activity::create($params); if (isset($activityBAO->id)) { - // Fixme - Move business logic out of API - if (!empty($params['case_id']) && $isNew) { - // If this is a brand new case activity, add to case(s) - foreach ((array) $params['case_id'] as $singleCaseId) { - $caseActivityParams = ['activity_id' => $activityBAO->id, 'case_id' => $singleCaseId]; - CRM_Case_BAO_Case::processCaseActivity($caseActivityParams); - } - } - _civicrm_api3_object_to_array($activityBAO, $activityArray[$activityBAO->id]); return civicrm_api3_create_success($activityArray, $params, 'Activity', 'get', $activityBAO); } diff --git a/tests/phpunit/api/v4/Entity/CaseTest.php b/tests/phpunit/api/v4/Entity/CaseTest.php index 6bf8c07b3b..636e80ff8d 100644 --- a/tests/phpunit/api/v4/Entity/CaseTest.php +++ b/tests/phpunit/api/v4/Entity/CaseTest.php @@ -20,6 +20,7 @@ namespace api\v4\Entity; use api\v4\Api4TestBase; +use Civi\Api4\Activity; use Civi\Api4\Relationship; /** @@ -67,4 +68,25 @@ class CaseTest extends Api4TestBase { $this->assertContains('Test Case Type', $field['options']); } + public function testCaseActivity(): void { + $case1 = $this->createTestRecord('Case'); + $case2 = $this->createTestRecord('Case'); + + $activity1 = $this->createTestRecord('Activity', [ + 'case_id' => $case1['id'], + ]); + + $activity2 = $this->createTestRecord('Activity', [ + 'case_id' => $case2['id'], + ]); + + $get1 = Activity::get(FALSE) + ->addWhere('case_id', '=', $case1['id']) + ->execute() + ->column('id'); + + $this->assertContains($activity1['id'], $get1); + $this->assertNotContains($activity2['id'], $get1); + } + } -- 2.25.1