dev/core#2047 [REF] Move calculation of 'type' to copyDataToNewBlockDAO
authoreileen <emcnaughton@wikimedia.org>
Thu, 17 Sep 2020 04:34:10 +0000 (16:34 +1200)
committereileen <emcnaughton@wikimedia.org>
Tue, 22 Sep 2020 21:40:05 +0000 (09:40 +1200)
CRM/Dedupe/MergeHandler.php

index 77d112b8ea4ba0efb8a41d0d91793920d49f5d59..654e87c20930b6cd6aed0960a4e92fea3417244c 100644 (file)
@@ -205,20 +205,11 @@ class CRM_Dedupe_MergeHandler {
    * @throws \CRM_Core_Exception
    */
   public function copyDataToNewBlockDAO($otherBlockId, $name, $blkCount) {
-    $locationBlocks = CRM_Dedupe_Merger::getLocationBlockInfo();
-    $migrationInfo = $this->getMigrationInfo();
     // For the block which belongs to other-contact, link the location block to main-contact
-    $otherBlockDAO = $this->getDAOForLocationEntity($name, $this->getSelectedLocationType($name, $blkCount));
+    $otherBlockDAO = $this->getDAOForLocationEntity($name, $this->getSelectedLocationType($name, $blkCount), $this->getSelectedType($name, $blkCount));
     $otherBlockDAO->contact_id = $this->getToKeepID();
-
     // Get the ID of this block on the 'other' contact, otherwise skip
     $otherBlockDAO->id = $otherBlockId;
-
-    // Add/update location and type information from the form, if applicable
-    if ($locationBlocks[$name]['hasType']) {
-      $typeTypeId = $migrationInfo['location_blocks'][$name][$blkCount]['typeTypeId'] ?? NULL;
-      $otherBlockDAO->{$locationBlocks[$name]['hasType']} = $typeTypeId;
-    }
     return $otherBlockDAO;
   }
 
@@ -227,12 +218,13 @@ class CRM_Dedupe_MergeHandler {
    *
    * @param string $entity
    *
-   * @param null $locationTypeID
+   * @param int|null $locationTypeID
+   * @param int|null $typeID
    *
    * @return CRM_Core_DAO_Address|CRM_Core_DAO_Email|CRM_Core_DAO_IM|CRM_Core_DAO_Phone|CRM_Core_DAO_Website
    * @throws \CRM_Core_Exception
    */
-  public function getDAOForLocationEntity($entity, $locationTypeID = NULL) {
+  public function getDAOForLocationEntity($entity, $locationTypeID = NULL, $typeID = NULL) {
     switch ($entity) {
       case 'email':
         $dao = new CRM_Core_DAO_Email();
@@ -247,10 +239,13 @@ class CRM_Dedupe_MergeHandler {
       case 'phone':
         $dao = new CRM_Core_DAO_Phone();
         $dao->location_type_id = $locationTypeID;
+        $dao->phone_type_id = $typeID;
         return $dao;
 
       case 'website':
-        return new CRM_Core_DAO_Website();
+        $dao = new CRM_Core_DAO_Website();
+        $dao->website_type_id = $typeID;
+        return $dao;
 
       case 'im':
         $dao = new CRM_Core_DAO_IM();
@@ -277,4 +272,18 @@ class CRM_Dedupe_MergeHandler {
     return $this->getMigrationInfo()['location_blocks'][$entity][$blockIndex]['locTypeId'] ?? NULL;
   }
 
+  /**
+   * Get the selected type for the given location block.
+   *
+   * This will retrieve any user selection if they specified which type to move a block to (e.g 'Mobile' for phone).
+   *
+   * @param string $entity
+   * @param int $blockIndex
+   *
+   * @return int|null
+   */
+  protected function getSelectedType($entity, $blockIndex) {
+    return $this->getMigrationInfo()['location_blocks'][$entity][$blockIndex]['typeTypeId'] ?? NULL;
+  }
+
 }