From 6437dda5e7e0acac8f6d200b7d7e2e05bbad76d4 Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" Date: Fri, 28 Dec 2018 20:19:12 +0000 Subject: [PATCH] Format details for case custom data in a human readable format --- CRM/Case/Form/CustomData.php | 45 +++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/CRM/Case/Form/CustomData.php b/CRM/Case/Form/CustomData.php index 46f3754149..04723f6609 100644 --- a/CRM/Case/Form/CustomData.php +++ b/CRM/Case/Form/CustomData.php @@ -136,7 +136,7 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { 'subject' => $this->_customTitle . " : change data", 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'), 'target_contact_id' => $this->_contactID, - 'details' => json_encode($this->_defaults), + 'details' => $this->formatCustomDataChangesForDetail($params), 'activity_date_time' => date('YmdHis'), ]; $activity = CRM_Activity_BAO_Activity::create($activityParams); @@ -150,4 +150,47 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { $transaction->commit(); } + /** + * Format the custom data changes as [label]: [old value] => [new value] + * + * @param array $params New custom field values from form + * + * @return string + * @throws \CiviCRM_API3_Exception + */ + public function formatCustomDataChangesForDetail($params) { + $formattedDetails = []; + foreach ($params as $customField => $newCustomValue) { + if (substr($customField, 0, 7) == 'custom_') { + if ($this->_defaults[$customField] == $newCustomValue) { + // Don't show values that did not change + continue; + } + // We need custom field ID from custom_XX_1 + list($_, $customFieldId, $_) = explode('_', $customField); + + if (!empty($customFieldId) && is_numeric($customFieldId)) { + // Got a custom field ID + $label = civicrm_api3('CustomField', 'getvalue', ['id' => $customFieldId, 'return' => 'label']); + $oldValue = civicrm_api3('CustomValue', 'getdisplayvalue', [ + 'custom_field_id' => $customFieldId, + 'entity_id' => $this->_entityID, + 'custom_field_value' => $this->_defaults[$customField], + ]); + $oldValue = $oldValue['values'][$customFieldId]['display']; + $newValue = civicrm_api3('CustomValue', 'getdisplayvalue', [ + 'custom_field_id' => $customFieldId, + 'entity_id' => $this->_entityID, + 'custom_field_value' => $newCustomValue, + ]); + $newValue = $newValue['values'][$customFieldId]['display']; + $formattedDetails[] = $label . ': ' . $oldValue . ' => ' . $newValue; + } + + } + } + + return implode('
', $formattedDetails); + } + } -- 2.25.1