Adjust contribution metadata to filter at display not load
authorEileen McNaughton <emcnaughton@wikimedia.org>
Tue, 6 Sep 2022 23:41:03 +0000 (11:41 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Tue, 6 Sep 2022 23:41:31 +0000 (11:41 +1200)
CRM/Contribute/Import/Form/MapField.php
CRM/Import/Forms.php
CRM/Import/Parser.php

index 8188e3cd5ab343beefe4d6a1d46420521092b4cd..4222dba20519f4a0ddb4d48152917aaff2093e7a 100644 (file)
@@ -71,6 +71,18 @@ class CRM_Contribute_Import_Form_MapField extends CRM_Import_Form_MapField {
     $this->assign('highlightedFields', $highlightedFields);
   }
 
+  /**
+   * Should contact fields be filtered which determining fields to show.
+   *
+   * This applies to Contribution import as we put all contact fields in the metadata
+   * but only present those used for a match - but will permit create via LeXIM.
+   *
+   * @return bool
+   */
+  protected function isFilterContactFields() : bool {
+    return TRUE;
+  }
+
   /**
    * Build the form object.
    *
index da50cf3f69968ce93513425172b583a8cecf5b5c..3fdea354504c514c4f88e351599b001f7871a4f8 100644 (file)
@@ -585,11 +585,28 @@ class CRM_Import_Forms extends CRM_Core_Form {
         // Duplicates are being skipped so id matching is not available.
         continue;
       }
+      if (($field['entity'] ?? '') === 'Contact' && $this->isFilterContactFields() && empty($field['match_rule'])) {
+        // Filter out metadata that is intended for create & update - this is not available in the quick-form
+        // but is now loaded in the Parser for the LexIM variant.
+        continue;
+      }
       $return[$name] = $field['html']['label'] ?? $field['title'];
     }
     return $return;
   }
 
+  /**
+   * Should contact fields be filtered which determining fields to show.
+   *
+   * This applies to Contribution import as we put all contact fields in the metadata
+   * but only present those used for a match - but will permit create via LeXIM.
+   *
+   * @return bool
+   */
+  protected function isFilterContactFields() : bool {
+    return FALSE;
+  }
+
   /**
    * Get the fields available for import selection.
    *
index 63127ac0739cfbcb1449ca3a6af3b955cf7a7059..1824f2501afa9ba067fb62d3563d464ccd15ba6a 100644 (file)
@@ -324,19 +324,17 @@ abstract class CRM_Import_Parser implements UserJobInterface {
     $contactFields = $this->getAllContactFields('');
     $dedupeFields = $this->getDedupeFields($contactType);
 
-    $contactFieldsForContactLookup = [];
     foreach ($dedupeFields as $fieldName => $dedupeField) {
       if (!isset($contactFields[$fieldName])) {
         continue;
       }
-      $contactFieldsForContactLookup[$fieldName] = $contactFields[$fieldName];
-      $contactFieldsForContactLookup[$fieldName]['title'] . ' ' . ts('(match to contact)');
-      $contactFieldsForContactLookup[$fieldName]['entity'] = 'Contact';
+      $contactFields[$fieldName]['title'] . ' ' . ts('(match to contact)');
+      $contactFields[$fieldName]['match_rule'] = $this->getDefaultRuleForContactType($contactType);
     }
 
-    $contactFieldsForContactLookup['external_identifier'] = $contactFields['external_identifier'];
-    $contactFieldsForContactLookup['external_identifier']['title'] = $contactFields['external_identifier']['title'] . ' ' . ts('(match to contact)');
-    return $contactFieldsForContactLookup;
+    $contactFields['external_identifier']['title'] .= ts('(match to contact)');
+    $contactFields['external_identifier']['match_rule'] = '*';
+    return $contactFields;
   }
 
   /**