X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FDedupe%2FMergeHandler.php;h=b6a58b886a70e0fb1ec5883e832819fb0ede7e5a;hb=2de9577d6f10ae85ef3b3f77c4c8561c3a729bc1;hp=5c40923ed979d5ac8479c6d3a98c09e02a2c4ec3;hpb=33ce2de7697083327dd0e0bb553cafe7a5e78176;p=civicrm-core.git diff --git a/CRM/Dedupe/MergeHandler.php b/CRM/Dedupe/MergeHandler.php index 5c40923ed9..b6a58b886a 100644 --- a/CRM/Dedupe/MergeHandler.php +++ b/CRM/Dedupe/MergeHandler.php @@ -377,6 +377,7 @@ class CRM_Dedupe_MergeHandler { * The use of the new hook is tested, including the fact it is called before contributions are merged, as this * is likely to be significant data in merge hooks. * + * @throws \API_Exception * @throws \CRM_Core_Exception */ public function mergeLocations(): void { @@ -410,12 +411,6 @@ class CRM_Dedupe_MergeHandler { $set_primary = $migrationInfo['location_blocks'][$name][$blkCount]['set_other_primary'] ?? NULL; if (!$changePrimary && $set_primary == "1") { $otherBlockDAO->is_primary = 1; - if ($primaryDAOId) { - $removePrimaryDAO = $this->getDAOForLocationEntity($name); - $removePrimaryDAO->id = $primaryDAOId; - $removePrimaryDAO->is_primary = 0; - $blocksDAO[$name]['update'][$primaryDAOId] = $removePrimaryDAO; - } $changePrimary = TRUE; } // Otherwise, if main contact already has primary, set it to 0. @@ -454,12 +449,20 @@ class CRM_Dedupe_MergeHandler { foreach ($blocksDAO as $blockDAOs) { if (!empty($blockDAOs['update'])) { foreach ($blockDAOs['update'] as $blockDAO) { - $blockDAO->save(); + $entity = CRM_Core_DAO_AllCoreTables::getBriefName(get_class($blockDAO)); + $values = ['checkPermissions' => FALSE]; + foreach ($blockDAO->fields() as $field) { + if (isset($blockDAO->{$field['name']})) { + $values['values'][$field['name']] = $blockDAO->{$field['name']}; + } + } + civicrm_api4($entity, 'update', $values); } } if (!empty($blockDAOs['delete'])) { foreach ($blockDAOs['delete'] as $blockDAO) { - $blockDAO->delete(); + $entity = CRM_Core_DAO_AllCoreTables::getBriefName(get_class($blockDAO)); + civicrm_api4($entity, 'delete', ['where' => [['id', '=', $blockDAO->id]], 'checkPermissions' => FALSE]); } } }