From 170f25ff81be365c41ad7a18b637edbfaf24bbb1 Mon Sep 17 00:00:00 2001 From: Camilo Rodriguez Date: Mon, 4 Nov 2019 16:40:36 +0000 Subject: [PATCH] dev/core#1093: Fix Installation of Custom Fields with Option Values From XML --- CRM/Utils/Migrate/Import.php | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/CRM/Utils/Migrate/Import.php b/CRM/Utils/Migrate/Import.php index 00f5b115d110..d499e65e6434 100644 --- a/CRM/Utils/Migrate/Import.php +++ b/CRM/Utils/Migrate/Import.php @@ -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