dev/core#183 Convert Temporary Table creation in CRM_Dedupe_BAO_RuleGroup to CRM_Util...
[civicrm-core.git] / CRM / Import / Parser.php
index da2ff173971f27917140150004f9c863fc412180..1510b80db569adefdf957cb63c5eef5c19a09174 100644 (file)
@@ -3,7 +3,7 @@
  +--------------------------------------------------------------------+
  | CiviCRM version 5                                                  |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2019                                |
+ | Copyright CiviCRM LLC (c) 2004-2020                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -28,7 +28,7 @@
 /**
  *
  * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2019
+ * @copyright CiviCRM LLC (c) 2004-2020
  */
 abstract class CRM_Import_Parser {
   /**
@@ -550,7 +550,9 @@ abstract class CRM_Import_Parser {
   /**
    * Parse a field which could be represented by a label or name value rather than the DB value.
    *
-   * We will try to match name first but if not available then see if we have a label that can be converted to a name.
+   * We will try to match name first or (per https://lab.civicrm.org/dev/core/issues/1285 if we have an id.
+   *
+   * but if not available then see if we have a label that can be converted to a name.
    *
    * @param string|int|null $submittedValue
    * @param array $fieldSpec
@@ -567,11 +569,16 @@ abstract class CRM_Import_Parser {
     $bao = $fieldSpec['bao'];
     // For historical reasons use validate as context - ie disabled name matches ARE permitted.
     $nameOptions = $bao::buildOptions($fieldSpec['name'], 'validate');
-    if (!isset($nameOptions[$submittedValue])) {
-      $labelOptions = array_flip($bao::buildOptions($fieldSpec['name'], 'match'));
-      if (isset($labelOptions[$submittedValue])) {
-        return array_search($labelOptions[$submittedValue], $nameOptions, TRUE);
-      }
+    if (isset($nameOptions[$submittedValue])) {
+      return $submittedValue;
+    }
+    if (in_array($submittedValue, $nameOptions)) {
+      return array_search($submittedValue, $nameOptions, TRUE);
+    }
+
+    $labelOptions = array_flip($bao::buildOptions($fieldSpec['name'], 'match'));
+    if (isset($labelOptions[$submittedValue])) {
+      return array_search($labelOptions[$submittedValue], $nameOptions, TRUE);
     }
     return '';
   }