Skip to content

Instantly share code, notes, and snippets.

@lcdservices
Created April 12, 2019 16:55
Show Gist options
  • Save lcdservices/af828079c676c761b54ea6b9d4f953bf to your computer and use it in GitHub Desktop.
Save lcdservices/af828079c676c761b54ea6b9d4f953bf to your computer and use it in GitHub Desktop.
updateMultiRecordValuesWithLatest
public static function updateMultiRecordValuesWithLatest($gid, $cid, $fields, &$values) {
CRM_Core_Error::debug_var('4907 $gid', $gid, TRUE, TRUE, '4907');
CRM_Core_Error::debug_var('4907 $cid', $cid, TRUE, TRUE, '4907');
CRM_Core_Error::debug_var('4907 $fields', $fields, TRUE, TRUE, '4907');
CRM_Core_Error::debug_var('4907 $values', $values, TRUE, TRUE, '4907');
$updated = FALSE;
if (CRM_Core_BAO_UFField::checkMultiRecordFieldExists($gid)) {
// to make sure we get the latest record set the limit 1 and order by id desc
$DTparams = array(
'rowCount' => 1,
'offset' => 0,
'sort' => 'id desc'
);
//get field IDs
$fieldIDs = NULL;
$fieldLabels = [];
foreach ($fields as $k => $details) {
if (strpos($k, 'custom_') !== FALSE) {
$fId = str_replace('custom_', '', $k);
$fieldIDs[] = $fId;
$fieldLabels[$fId] = $details['title'];
}
}
$result = CRM_Core_BAO_CustomValueTable::getEntityValues($cid, NULL, $fieldIDs, TRUE, $DTparams);
CRM_Core_Error::debug_var('4907 $result', $result, TRUE, TRUE, '4907');
$ctIds = array_keys($result['sortedResult']);
$latestId = max($ctIds);
CRM_Core_Error::debug_var('4907 $latestId', $latestId, TRUE, TRUE, '4907');
foreach ($fields as $fkey => $fval) {
if (strpos($fkey, 'custom_') !== FALSE) {
$fkeyId = str_replace('custom_', '', $fkey);
if (CRM_Core_BAO_CustomField::isMultiRecordField($fkey)) {
$mcfid = CRM_Core_BAO_CustomField::getKeyID($fkey);
CRM_Core_Error::debug_var('4907 $mcfid', $mcfid, TRUE, TRUE, '4907');
if ($mcfid && CRM_Utils_Array::value($mcfid, $result[$latestId])) {
$display = CRM_Core_BAO_CustomField::displayValue($result[$latestId][$mcfid], $fkey);
CRM_Core_Error::debug_var('4907 $display', $display, TRUE, TRUE, '4907');
$label = $fieldLabels[$mcfid];
CRM_Core_Error::debug_var('4907 $label', $label, TRUE, TRUE, '4907');
if (array_key_exists($label, $values)) {
$values[$label] = $display;
$updated = TRUE;
}
}
}
}
}
}
CRM_Core_Error::debug_var('4907 $updated', $updated, TRUE, TRUE, '4907');
CRM_Core_Error::debug_var('4907 $values', $values, TRUE, TRUE, '4907');
return $updated;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment