From ea28e84d768ce0beb80d3292ad7decf90cf8a4b8 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Tue, 23 Aug 2022 16:49:57 +1200 Subject: [PATCH] Deprecated Membership::importableFields --- CRM/Member/BAO/Membership.php | 3 ++ CRM/Member/Import/Parser/Membership.php | 50 +++++++++++++++++++- CRM/Upgrade/Incremental/php/FiveFiftyOne.php | 50 +++++++++++++++++++- 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index 7daf555876..40e6d0a5f0 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -915,8 +915,11 @@ INNER JOIN civicrm_membership_type type ON ( type.id = membership.membership_ty * @return array * array of importable Fields * @throws \CRM_Core_Exception + * + * @deprecated */ public static function importableFields($contactType = 'Individual', $status = TRUE) { + CRM_Core_Error::deprecatedFunctionWarning('api'); $fields = Civi::cache('fields')->get('membership_importable_fields' . $contactType . $status); if (!$fields) { if (!$status) { diff --git a/CRM/Member/Import/Parser/Membership.php b/CRM/Member/Import/Parser/Membership.php index ea91a27673..6ee7ce8076 100644 --- a/CRM/Member/Import/Parser/Membership.php +++ b/CRM/Member/Import/Parser/Membership.php @@ -416,12 +416,60 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { */ protected function setFieldMetadata(): void { if (empty($this->importableFieldsMetadata)) { - $metadata = CRM_Member_BAO_Membership::importableFields($this->getContactType(), FALSE); + $metadata = $this->getImportableFields($this->getContactType()); // We are consolidating on `importableFieldsMetadata` - but both still used. $this->importableFieldsMetadata = $this->fieldMetadata = $metadata; } } + /** + * @param string $contactType + * + * @return array|mixed + * @throws \CRM_Core_Exception + */ + protected function getImportableFields($contactType = 'Individual') { + $fields = Civi::cache('fields')->get('membership_importable_fields' . $contactType); + if (!$fields) { + $fields = ['' => ['title' => '- ' . ts('do not import') . ' -']]; + + $tmpFields = CRM_Member_DAO_Membership::import(); + $contactFields = CRM_Contact_BAO_Contact::importableFields($contactType, NULL); + + // Using new Dedupe rule. + $ruleParams = [ + 'contact_type' => $contactType, + 'used' => 'Unsupervised', + ]; + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); + + $tmpContactField = []; + if (is_array($fieldsArray)) { + foreach ($fieldsArray as $value) { + $customFieldId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', + $value, + 'id', + 'column_name' + ); + $value = trim($customFieldId ? 'custom_' . $customFieldId : $value); + $tmpContactField[$value] = $contactFields[$value] ?? NULL; + $title = $tmpContactField[$value]['title'] . ' ' . ts('(match to contact)'); + $tmpContactField[$value]['title'] = $title; + } + } + $tmpContactField['external_identifier'] = $contactFields['external_identifier']; + $tmpContactField['external_identifier']['title'] = $contactFields['external_identifier']['title'] . ' ' . ts('(match to contact)'); + + $tmpFields['membership_contact_id']['title'] .= ' ' . ts('(match to contact)'); + + $fields = array_merge($fields, $tmpContactField); + $fields = array_merge($fields, $tmpFields); + $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport('Membership')); + Civi::cache('fields')->set('membership_importable_fields' . $contactType, $fields); + } + return $fields; + } + /** * Get the metadata field for which importable fields does not key the actual field name. * diff --git a/CRM/Upgrade/Incremental/php/FiveFiftyOne.php b/CRM/Upgrade/Incremental/php/FiveFiftyOne.php index f271809cf4..abff73daa5 100644 --- a/CRM/Upgrade/Incremental/php/FiveFiftyOne.php +++ b/CRM/Upgrade/Incremental/php/FiveFiftyOne.php @@ -127,7 +127,7 @@ class CRM_Upgrade_Incremental_php_FiveFiftyOne extends CRM_Upgrade_Incremental_B ->setSelect(['id', 'name']) ->addWhere('mapping_id.mapping_type_id:name', '=', 'Import Membership') ->execute(); - $fields = CRM_Member_BAO_Membership::importableFields('All', FALSE);; + $fields = self::getImportableMembershipFields('All');; $fieldMap = []; foreach ($fields as $fieldName => $field) { $fieldMap[$field['title']] = $fieldName; @@ -245,6 +245,54 @@ class CRM_Upgrade_Incremental_php_FiveFiftyOne extends CRM_Upgrade_Incremental_B return TRUE; } + /** + * @param string $contactType + * + * @return array|mixed + * @throws \CRM_Core_Exception + */ + protected static function getImportableMembershipFields($contactType = 'Individual') { + $fields = Civi::cache('fields')->get('upgrade_membership_importable_fields' . $contactType); + if (!$fields) { + $fields = ['' => ['title' => '- ' . ts('do not import') . ' -']]; + + $tmpFields = CRM_Member_DAO_Membership::import(); + $contactFields = CRM_Contact_BAO_Contact::importableFields($contactType, NULL); + + // Using new Dedupe rule. + $ruleParams = [ + 'contact_type' => $contactType, + 'used' => 'Unsupervised', + ]; + $fieldsArray = CRM_Dedupe_BAO_DedupeRule::dedupeRuleFields($ruleParams); + + $tmpContactField = []; + if (is_array($fieldsArray)) { + foreach ($fieldsArray as $value) { + $customFieldId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', + $value, + 'id', + 'column_name' + ); + $value = trim($customFieldId ? 'custom_' . $customFieldId : $value); + $tmpContactField[trim($value)] = $contactFields[$value] ?? NULL; + $title = $tmpContactField[trim($value)]['title'] . ' ' . ts('(match to contact)'); + $tmpContactField[trim($value)]['title'] = $title; + } + } + $tmpContactField['external_identifier'] = $contactFields['external_identifier']; + $tmpContactField['external_identifier']['title'] = $contactFields['external_identifier']['title'] . ' ' . ts('(match to contact)'); + + $tmpFields['membership_contact_id']['title'] .= ' ' . ts('(match to contact)'); + + $fields = array_merge($fields, $tmpContactField); + $fields = array_merge($fields, $tmpFields); + $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport('Membership')); + Civi::cache('fields')->set('upgrade_membership_importable_fields' . $contactType, $fields); + } + return $fields; + } + /** * Update user job table to use a text job_type not an integer type_id. * -- 2.25.1