From 18e0f096069eda179b7134fe696f9ed77fca6160 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 1 May 2017 14:35:03 -0400 Subject: [PATCH] CRM-20102 - Activity case_id can be multivalued --- Civi/CCase/Events.php | 22 +++++++++++++--------- api/v3/Activity.php | 10 ++++++---- tests/phpunit/api/v3/CaseTest.php | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Civi/CCase/Events.php b/Civi/CCase/Events.php index fcf8bf0b00..557c8c0893 100644 --- a/Civi/CCase/Events.php +++ b/Civi/CCase/Events.php @@ -80,16 +80,20 @@ class Events { } /** - * @param $caseId + * Fire case change hook + * + * @param int|array $caseIds */ - public static function fireCaseChangeForRealz($caseId) { - if (!isset(self::$isActive[$caseId])) { - $tx = new \CRM_Core_Transaction(); - self::$isActive[$caseId] = 1; - $analyzer = new \Civi\CCase\Analyzer($caseId); - \CRM_Utils_Hook::caseChange($analyzer); - unset(self::$isActive[$caseId]); - unset($tx); + public static function fireCaseChangeForRealz($caseIds) { + foreach ((array) $caseIds as $caseId) { + if (!isset(self::$isActive[$caseId])) { + $tx = new \CRM_Core_Transaction(); + self::$isActive[$caseId] = 1; + $analyzer = new \Civi\CCase\Analyzer($caseId); + \CRM_Utils_Hook::caseChange($analyzer); + unset(self::$isActive[$caseId]); + unset($tx); + } } } diff --git a/api/v3/Activity.php b/api/v3/Activity.php index 0d6a85de41..58ce003203 100644 --- a/api/v3/Activity.php +++ b/api/v3/Activity.php @@ -159,9 +159,11 @@ function civicrm_api3_activity_create($params) { if (isset($activityBAO->id)) { if ($case_id && !$createRevision) { - // If this is a brand new case activity we need to add this - $caseActivityParams = array('activity_id' => $activityBAO->id, 'case_id' => $case_id); - CRM_Case_BAO_Case::processCaseActivity($caseActivityParams); + // If this is a brand new case activity, add to case(s) + foreach ((array) $case_id as $singleCaseId) { + $caseActivityParams = array('activity_id' => $activityBAO->id, 'case_id' => $singleCaseId); + CRM_Case_BAO_Case::processCaseActivity($caseActivityParams); + } } _civicrm_api3_object_to_array($activityBAO, $activityArray[$activityBAO->id]); @@ -471,7 +473,7 @@ function _civicrm_api3_activity_get_formatResult($params, $activities, $options) $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; + $activities[$dao->activity_id]['case_id'][] = $dao->case_id; } break; diff --git a/tests/phpunit/api/v3/CaseTest.php b/tests/phpunit/api/v3/CaseTest.php index c4ce84537b..4e2e48e917 100644 --- a/tests/phpunit/api/v3/CaseTest.php +++ b/tests/phpunit/api/v3/CaseTest.php @@ -327,7 +327,7 @@ class api_v3_CaseTest extends CiviCaseTestCase { 'subject' => 'Test followup 123', 'return' => array('case_id'), )); - $this->assertEquals($case['id'], $result['case_id']); + $this->assertContains($case['id'], $result['case_id']); } /** -- 2.25.1