Skip to content

Commit

Permalink
dev/core#1093: Fix Installation of Custom Fields with Option Values F…
Browse files Browse the repository at this point in the history
…rom XML
  • Loading branch information
MiyaNoctem committed Nov 4, 2019
1 parent b066a67 commit 170f25f
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion CRM/Utils/Migrate/Import.php
Original file line number Diff line number Diff line change
Expand Up @@ -358,15 +358,45 @@ public function customFields(&$xml, &$idMap) {
foreach ($xml->CustomFields as $customFieldsXML) {
$total = count($customFieldsXML->CustomField);
foreach ($customFieldsXML->CustomField as $customFieldXML) {
if (empty($customFieldXML->option_group_id) && isset($customFieldXML->option_group_name)) {
$customFieldXML->option_group_id = $this->getOptionGroupIDFromName((string) $customFieldXML->option_group_name, $idMap);
}

$id = $idMap['custom_group'][(string ) $customFieldXML->custom_group_name];
$fields_indexed_by_group_id[$id][] = $customFieldXML;
}
}

foreach ($fields_indexed_by_group_id as $group_id => $fields) {
CRM_Core_BAO_CustomField::bulkSave(json_decode(json_encode($fields), TRUE), ['custom_group_id' => $group_id]);
\Civi\Api4\CustomField::save()
->setDefaults(['custom_group_id' => $group_id])
->setRecords(json_decode(json_encode($fields), TRUE))
->execute();
}
}

/**
* Get Option Group ID.
*
* Returns an option group's ID, given its name.
*
* @param $groupName
* @param $idMap
*
* @return int|null
*/
private function getOptionGroupIDFromName($groupName, &$idMap) {
if (empty($groupName)) {
return NULL;
}

if (!isset($idMap['option_group'][$groupName])) {
$idMap['option_group'][$groupName] = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', $groupName, 'id', 'name');
}

return $idMap['option_group'][$groupName];
}

/**
* @param $xml
* @param $idMap
Expand Down

0 comments on commit 170f25f

Please sign in to comment.