From eded26e42d2b7aff3cbab74f103f49b609760d61 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 27 Feb 2023 14:28:57 -0500 Subject: [PATCH] CaseContact - Switch BAO to standard create function with hook Uses new pattern for create mode, with other processing moved into a hook. The 'recent items' code now contains an extra guard to prevent undefined variable errors --- CRM/Case/BAO/CaseContact.php | 60 +++++++++++-------- CRM/Case/Form/Activity/OpenCase.php | 4 +- CRM/Case/Page/AJAX.php | 2 +- .../Action/CiviCase/CiviCaseSaveTrait.php | 2 +- api/v3/Case.php | 2 +- tests/phpunit/CRM/Case/BAO/CaseTest.php | 3 +- 6 files changed, 42 insertions(+), 31 deletions(-) diff --git a/CRM/Case/BAO/CaseContact.php b/CRM/Case/BAO/CaseContact.php index 3b409bb65c..32b6134a2c 100644 --- a/CRM/Case/BAO/CaseContact.php +++ b/CRM/Case/BAO/CaseContact.php @@ -18,45 +18,55 @@ /** * This class contains the functions for Case Contact management. */ -class CRM_Case_BAO_CaseContact extends CRM_Case_DAO_CaseContact { +class CRM_Case_BAO_CaseContact extends CRM_Case_DAO_CaseContact implements \Civi\Core\HookInterface { /** * Create case contact record. * * @param array $params - * case_id, contact_id * + * @deprecated * @return CRM_Case_BAO_CaseContact */ public static function create($params) { - $caseContact = self::writeRecord($params); + return self::writeRecord($params); + } - // add to recently viewed - $caseType = CRM_Case_BAO_Case::getCaseType($caseContact->case_id); - $url = CRM_Utils_System::url('civicrm/contact/view/case', - "action=view&reset=1&id={$caseContact->case_id}&cid={$caseContact->contact_id}&context=home" - ); + /** + * Callback for hook_civicrm_post(). + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action === 'create' || $event->action === 'edit') { + $caseContact = $event->object; - $title = CRM_Contact_BAO_Contact::displayName($caseContact->contact_id) . ' - ' . $caseType; + // Add case to recentl items for logged-in users + if ($caseContact->case_id && $caseContact->contact_id && CRM_Core_Session::getLoggedInContactID()) { + $caseType = CRM_Case_BAO_Case::getCaseType($caseContact->case_id); + $url = CRM_Utils_System::url('civicrm/contact/view/case', + "action=view&reset=1&id={$caseContact->case_id}&cid={$caseContact->contact_id}&context=home" + ); - $recentOther = []; - if (CRM_Core_Permission::checkActionPermission('CiviCase', CRM_Core_Action::DELETE)) { - $recentOther['deleteUrl'] = CRM_Utils_System::url('civicrm/contact/view/case', - "action=delete&reset=1&id={$caseContact->case_id}&cid={$caseContact->contact_id}&context=home" - ); - } + $title = CRM_Contact_BAO_Contact::displayName($caseContact->contact_id) . ' - ' . $caseType; - // add the recently created case - CRM_Utils_Recent::add($title, - $url, - $caseContact->case_id, - 'Case', - $caseContact->contact_id, - NULL, - $recentOther - ); + $recentOther = []; + if (CRM_Core_Permission::checkActionPermission('CiviCase', CRM_Core_Action::DELETE)) { + $recentOther['deleteUrl'] = CRM_Utils_System::url('civicrm/contact/view/case', + "action=delete&reset=1&id={$caseContact->case_id}&cid={$caseContact->contact_id}&context=home" + ); + } - return $caseContact; + // add the recently affected case + CRM_Utils_Recent::add($title, + $url, + $caseContact->case_id, + 'Case', + $caseContact->contact_id, + NULL, + $recentOther + ); + } + } } /** diff --git a/CRM/Case/Form/Activity/OpenCase.php b/CRM/Case/Form/Activity/OpenCase.php index 740e7cdb57..1c3092f0bc 100644 --- a/CRM/Case/Form/Activity/OpenCase.php +++ b/CRM/Case/Form/Activity/OpenCase.php @@ -276,7 +276,7 @@ class CRM_Case_Form_Activity_OpenCase { 'case_id' => $params['case_id'], 'contact_id' => $cliId, ]; - CRM_Case_BAO_CaseContact::create($contactParams); + CRM_Case_BAO_CaseContact::writeRecord($contactParams); } } else { @@ -284,7 +284,7 @@ class CRM_Case_Form_Activity_OpenCase { 'case_id' => $params['case_id'], 'contact_id' => $form->_currentlyViewedContactId, ]; - CRM_Case_BAO_CaseContact::create($contactParams); + CRM_Case_BAO_CaseContact::writeRecord($contactParams); } // 2. initiate xml processor diff --git a/CRM/Case/Page/AJAX.php b/CRM/Case/Page/AJAX.php index ba333b9e73..a309da8b2d 100644 --- a/CRM/Case/Page/AJAX.php +++ b/CRM/Case/Page/AJAX.php @@ -117,7 +117,7 @@ class CRM_Case_Page_AJAX { 'contact_id' => $contactId, ]; - CRM_Case_BAO_CaseContact::create($params); + CRM_Case_BAO_CaseContact::writeRecord($params); // add case relationships CRM_Case_BAO_Case::addCaseRelationships($caseId, $contactId); diff --git a/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php b/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php index 6b50e75936..5bc187f46c 100644 --- a/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php +++ b/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php @@ -42,7 +42,7 @@ trait CiviCaseSaveTrait { // Add case contacts (clients) foreach ((array) $case['contact_id'] as $cid) { $contactParams = ['case_id' => $id, 'contact_id' => $cid]; - \CRM_Case_BAO_CaseContact::create($contactParams); + \CRM_Case_BAO_CaseContact::writeRecord($contactParams); } $caseType = \CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $case['case_type_id'], 'name'); diff --git a/api/v3/Case.php b/api/v3/Case.php index 4651f5c87b..3a95057326 100644 --- a/api/v3/Case.php +++ b/api/v3/Case.php @@ -110,7 +110,7 @@ function civicrm_api3_case_create($params) { if (isset($params['contact_id']) && !isset($params['id'])) { foreach ((array) $params['contact_id'] as $cid) { $contactParams = ['case_id' => $caseBAO->id, 'contact_id' => $cid]; - CRM_Case_BAO_CaseContact::create($contactParams); + CRM_Case_BAO_CaseContact::writeRecord($contactParams); } } diff --git a/tests/phpunit/CRM/Case/BAO/CaseTest.php b/tests/phpunit/CRM/Case/BAO/CaseTest.php index 835fdc77ca..a9ba35550c 100644 --- a/tests/phpunit/CRM/Case/BAO/CaseTest.php +++ b/tests/phpunit/CRM/Case/BAO/CaseTest.php @@ -65,11 +65,12 @@ class CRM_Case_BAO_CaseTest extends CiviUnitTestCase { } public function testAddCaseToContact() { + $this->createLoggedInUser(); $params = [ 'case_id' => 1, 'contact_id' => 17, ]; - CRM_Case_BAO_CaseContact::create($params); + CRM_Case_BAO_CaseContact::writeRecord($params); $recent = CRM_Utils_Recent::get(); $this->assertEquals('Test Contact - Housing Support', $recent[0]['title']); -- 2.25.1