[Import] [Activity] Fix fatal error regression
authorEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 27 May 2022 06:48:37 +0000 (18:48 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 27 May 2022 19:43:59 +0000 (07:43 +1200)
CRM/Activity/Import/Parser/Activity.php
tests/phpunit/CRM/Activity/Import/Parser/ActivityTest.php

index 5e95f929eeb393f43ac5ce37c3c1e97b823d38e1..e626abd0229fc2efa51316f96b840e46d1e78adf 100644 (file)
@@ -23,8 +23,6 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Import_Parser {
 
   protected $_mapperKeys;
 
-  private $_contactIdIndex;
-
   /**
    * Array of successfully imported activity id's
    *
@@ -103,20 +101,6 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Import_Parser {
     $this->_newActivity = [];
 
     $this->setActiveFields($this->_mapperKeys);
-
-    // FIXME: we should do this in one place together with Form/MapField.php
-    $this->_contactIdIndex = -1;
-
-    $index = 0;
-    foreach ($this->_mapperKeys as $key) {
-      switch ($key) {
-        case 'target_contact_id':
-        case 'external_identifier':
-          $this->_contactIdIndex = $index;
-          break;
-      }
-      $index++;
-    }
   }
 
   /**
@@ -186,16 +170,15 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Import_Parser {
       }
     }
 
-    if ($this->_contactIdIndex < 0) {
+    if (empty($params['external_identifier']) && empty($params['target_contact_id'])) {
 
       // Retrieve contact id using contact dedupe rule.
       // Since we are supporting only individual's activity import.
       $params['contact_type'] = 'Individual';
       $params['version'] = 3;
-      $error = _civicrm_api3_deprecated_duplicate_formatted_contact($params);
+      $matchedIDs = CRM_Contact_BAO_Contact::getDuplicateContacts($params, 'Individual');
 
-      if (CRM_Core_Error::isAPIError($error, CRM_Core_ERROR::DUPLICATE_CONTACT)) {
-        $matchedIDs = explode(',', $error['error_message']['params'][0]);
+      if (!empty($matchedIDs)) {
         if (count($matchedIDs) > 1) {
           array_unshift($values, 'Multiple matching contact records detected for this row. The activity was not imported');
           return CRM_Import_Parser::ERROR;
index de4d09b101d17522364aaceb6bc1217070ab7d95..39515dfd59aee6b1a9cb56cef9d73626ac1972e9 100644 (file)
@@ -296,10 +296,7 @@ class CRM_Activity_Import_Parser_ActivityTest extends CiviUnitTestCase {
         ],
         'expected_error' => '',
       ],
-
-      // @todo This is also inconsistent. The map UI requires target contact
-      // but import is fine leaving it blank. In general civi is fine with
-      // a blank target so possibly map UI should not require it.
+      // a way to find the contact id is required.
       15 => [
         'input' => [
           'target_contact_id' => '',
@@ -307,7 +304,7 @@ class CRM_Activity_Import_Parser_ActivityTest extends CiviUnitTestCase {
           'activity_date_time' => $some_date,
           'activity_subject' => 'asubj',
         ],
-        'expected_error' => '',
+        'expected_error' => 'No matching Contact found for ()',
       ],
 
     ];