From e8c05a8ba167ce6b076f1400fec4fcc6080bd804 Mon Sep 17 00:00:00 2001 From: colemanw Date: Wed, 21 Jun 2023 15:18:35 -0700 Subject: [PATCH] CiviCase - Move more activity logic into case BAO via hook --- CRM/Activity/BAO/Activity.php | 7 +------ CRM/Case/BAO/Case.php | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 13d59afe00..d6cba12795 100644 --- a/CRM/Activity/BAO/Activity.php +++ b/CRM/Activity/BAO/Activity.php @@ -515,12 +515,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); - // Add to case - if (isset($params['case_id'])) { - CRM_Case_BAO_Case::updateCaseActivity($activity->id, $params['case_id']); - } - - CRM_Utils_Hook::post($action, 'Activity', $activity->id, $activity); + CRM_Utils_Hook::post($action, 'Activity', $activity->id, $activity, $params); return $result; } diff --git a/CRM/Case/BAO/Case.php b/CRM/Case/BAO/Case.php index cad24a4b9d..f140906a31 100644 --- a/CRM/Case/BAO/Case.php +++ b/CRM/Case/BAO/Case.php @@ -71,30 +71,30 @@ class CRM_Case_BAO_Case extends CRM_Case_DAO_Case implements \Civi\Core\HookInte if ($e->entity === 'Activity' && in_array($e->action, ['create', 'edit'])) { /** @var CRM_Activity_DAO_Activity $activity */ $activity = $e->object; + $params = $e->params; // If subject contains a ‘[case #…]’ string, file activity on the related case (CRM-5916) $matches = []; - $subjectToMatch = $activity->subject ?? ''; - if (preg_match('/\[case #([0-9a-h]{7})\]/', $subjectToMatch, $matches)) { - $key = CRM_Core_DAO::escapeString(CIVICRM_SITE_KEY); - $hash = $matches[1]; - $query = "SELECT id FROM civicrm_case WHERE SUBSTR(SHA1(CONCAT('$key', id)), 1, 7) = '" . CRM_Core_DAO::escapeString($hash) . "'"; - } - elseif (preg_match('/\[case #(\d+)\]/', $subjectToMatch, $matches)) { - $query = "SELECT id FROM civicrm_case WHERE id = '" . CRM_Core_DAO::escapeString($matches[1]) . "'"; + if (!isset($params['case_id'])) { + $subjectToMatch = $activity->subject ?? ''; + if (preg_match('/\[case #([0-9a-h]{7})\]/', $subjectToMatch, $matches)) { + $key = CRM_Core_DAO::escapeString(CIVICRM_SITE_KEY); + $query = "SELECT id FROM civicrm_case WHERE SUBSTR(SHA1(CONCAT('$key', id)), 1, 7) = %1"; + } + elseif (preg_match('/\[case #(\d+)\]/', $subjectToMatch, $matches)) { + $query = "SELECT id FROM civicrm_case WHERE id = %1"; + } } if (!empty($matches)) { - $caseParams = [ - 'activity_id' => $activity->id, - 'case_id' => CRM_Core_DAO::singleValueQuery($query), - ]; - if ($caseParams['case_id']) { - CRM_Case_BAO_Case::processCaseActivity($caseParams); - } - else { + $params['case_id'] = CRM_Core_DAO::singleValueQuery($query, [1 => [$matches[1], 'String']]) ?: NULL; + if (!$params['case_id']) { CRM_Activity_BAO_Activity::logActivityAction($activity, "Case details for {$matches[1]} not found while recording an activity on case."); } } + // Add CaseActivity record (or remove if $params['case_id'] is falsey) + if (isset($params['case_id'])) { + CRM_Case_BAO_Case::updateCaseActivity($activity->id, $params['case_id']); + } } if ($e->entity === 'RelationshipType') { CRM_Case_XMLProcessor::flushStaticCaches(); -- 2.25.1