Improve comparison for options
authorEileen McNaughton <emcnaughton@wikimedia.org>
Tue, 24 May 2022 00:58:09 +0000 (12:58 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 27 May 2022 08:09:15 +0000 (20:09 +1200)
CRM/Import/Parser.php

index 415644dba5f0444dbe5cd247603f0a2200f020cc..8d9742b7ce595a0e71cfea511db2e4cb78b1d191 100644 (file)
@@ -1233,7 +1233,7 @@ abstract class CRM_Import_Parser {
       $value = CRM_Utils_Date::formatDate($importedValue, $this->getSubmittedValue('dateFormats'));
       return ($value) ?: 'invalid_import_value';
     }
-    return $this->getFieldOptions($fieldName)[$importedValue] ?? 'invalid_import_value';
+    return $this->getFieldOptions($fieldName)[is_numeric($importedValue) ? $importedValue : mb_strtolower($importedValue)] ?? 'invalid_import_value';
   }
 
   /**
@@ -1274,16 +1274,12 @@ abstract class CRM_Import_Parser {
           'select' => ['options'],
         ])->first()['options'];
         // We create an array of the possible variants - notably including
-        // name AND label as either might be used, and capitalisation variants.
+        // name AND label as either might be used. We also lower case before checking
         $values = [];
         foreach ($options as $option) {
           $values[$option['id']] = $option['id'];
-          $values[$option['label']] = $option['id'];
-          $values[$option['name']] = $option['id'];
-          $values[strtoupper($option['name'])] = $option['id'];
-          $values[strtolower($option['name'])] = $option['id'];
-          $values[strtoupper($option['label'])] = $option['id'];
-          $values[strtolower($option['label'])] = $option['id'];
+          $values[mb_strtolower($option['name'])] = $option['id'];
+          $values[mb_strtolower($option['label'])] = $option['id'];
         }
         $this->importableFieldsMetadata[$fieldName]['options'] = $values;
       }