From d4b1cdb11c8f66c3904473eea74aa48eedc2d5e3 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Thu, 7 Sep 2023 11:53:19 +1200 Subject: [PATCH] Fold deprecated function back into the caller We have a situation where the first function called (parseMailingObject) formats stuff weirdly just to be undone by the second. Moving the handling to a single place (the calling function) will allow us to unravel this --- CRM/Utils/Mail/EmailProcessor.php | 88 +++++++++++++------------------ 1 file changed, 38 insertions(+), 50 deletions(-) diff --git a/CRM/Utils/Mail/EmailProcessor.php b/CRM/Utils/Mail/EmailProcessor.php index 98f68bb9a9..33d324a4ca 100644 --- a/CRM/Utils/Mail/EmailProcessor.php +++ b/CRM/Utils/Mail/EmailProcessor.php @@ -118,7 +118,44 @@ class CRM_Utils_Mail_EmailProcessor { // if its the activities that needs to be processed .. try { $mailParams = CRM_Utils_Mail_Incoming::parseMailingObject($mail, $createContact, FALSE, $emailFields); - $params = self::deprecated_activity_buildmailparams($mailParams, $dao); + $params = []; + + // if we don't cast to int (the dao gives a string), then the Inbound Email Activity 1.0 extension won't work, will be fixed in next version to use a non-strict comparison + $params['activity_type_id'] = (int) $dao->activity_type_id; + $params['campaign_id'] = $dao->campaign_id; + $params['status_id'] = $dao->activity_status; + $params['source_contact_id'] = $mailParams[$dao->activity_source][0]['id']; + + $activityContacts = ['target_contact_id' => 'activity_targets', 'assignee_contact_id' => 'activity_assignees']; + foreach ($activityContacts as $activityContact => $daoName) { + $params[$activityContact] = []; + $keys = array_filter(explode(",", $dao->$daoName)); + foreach ($keys as $key) { + if (is_array($mailParams[$key])) { + foreach ($mailParams[$key] as $key => $keyValue) { + if (!empty($keyValue['id'])) { + $params[$activityContact][] = $keyValue['id']; + } + } + } + } + } + + $params['subject'] = $mailParams['subject']; + $params['activity_date_time'] = $mailParams['date']; + $params['details'] = $mailParams['body']; + + $numAttachments = Civi::settings()->get('max_attachments_backend') ?? CRM_Core_BAO_File::DEFAULT_MAX_ATTACHMENTS_BACKEND; + for ($i = 1; $i <= $numAttachments; $i++) { + if (isset($mailParams["attachFile_$i"])) { + $params["attachFile_$i"] = $mailParams["attachFile_$i"]; + } + else { + // No point looping 100 times if there's only one attachment + break; + } + } + $result = civicrm_api3('Activity', 'create', $params); } catch (Exception $e) { @@ -392,53 +429,4 @@ class CRM_Utils_Mail_EmailProcessor { return $text; } - /** - * @param array $result - * @param CRM_Core_DAO_MailSettings $dao - * - * @return array - * $params - */ - protected static function deprecated_activity_buildmailparams($result, $dao) { - $params = []; - - // if we don't cast to int (the dao gives a string), then the Inbound Email Activity 1.0 extension won't work, will be fixed in next version to use a non-strict comparison - $params['activity_type_id'] = (int) $dao->activity_type_id; - $params['campaign_id'] = $dao->campaign_id; - $params['status_id'] = $dao->activity_status; - $params['source_contact_id'] = $result[$dao->activity_source][0]['id']; - - $activityContacts = ['target_contact_id' => 'activity_targets', 'assignee_contact_id' => 'activity_assignees']; - foreach ($activityContacts as $activityContact => $daoName) { - $params[$activityContact] = []; - $keys = array_filter(explode(",", $dao->$daoName)); - foreach ($keys as $key) { - if (is_array($result[$key])) { - foreach ($result[$key] as $key => $keyValue) { - if (!empty($keyValue['id'])) { - $params[$activityContact][] = $keyValue['id']; - } - } - } - } - } - - $params['subject'] = $result['subject']; - $params['activity_date_time'] = $result['date']; - $params['details'] = $result['body']; - - $numAttachments = Civi::settings()->get('max_attachments_backend') ?? CRM_Core_BAO_File::DEFAULT_MAX_ATTACHMENTS_BACKEND; - for ($i = 1; $i <= $numAttachments; $i++) { - if (isset($result["attachFile_$i"])) { - $params["attachFile_$i"] = $result["attachFile_$i"]; - } - else { - // No point looping 100 times if there's only one attachment - break; - } - } - - return $params; - } - } -- 2.25.1