Merge pull request #17782 from civicrm/5.28
[civicrm-core.git] / CRM / Dedupe / BAO / Exception.php
CommitLineData
f1a0eb0a 1<?php
2/*
3 +--------------------------------------------------------------------+
bc77d7c0 4 | Copyright CiviCRM LLC. All rights reserved. |
f1a0eb0a 5 | |
bc77d7c0
TO
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
f1a0eb0a 9 +--------------------------------------------------------------------+
10 */
11
12/**
13 *
14 * @package CRM
ca5cec67 15 * @copyright CiviCRM LLC https://civicrm.org/licensing
f1a0eb0a 16 */
17
18/**
19 * Manages dedupe exceptions - ie pairs marked as non-duplicates.
20 */
21class CRM_Dedupe_BAO_Exception extends CRM_Dedupe_DAO_Exception {
22
23 /**
24 * Create a dedupe exception record.
25 *
26 * @param array $params
27 *
28 * @return \CRM_Dedupe_BAO_Exception
29 */
30 public static function create($params) {
31 $hook = empty($params['id']) ? 'create' : 'edit';
32 CRM_Utils_Hook::pre($hook, 'Exception', CRM_Utils_Array::value('id', $params), $params);
9c1bc317
CW
33 $contact1 = $params['contact_id1'] ?? NULL;
34 $contact2 = $params['contact_id2'] ?? NULL;
f1a0eb0a 35 $dao = new CRM_Dedupe_BAO_Exception();
36 $dao->copyValues($params);
ac2751b3 37 if ($contact1 && $contact2) {
f1a0eb0a 38 CRM_Core_DAO::singleValueQuery("
9c1bc317 39 DELETE FROM civicrm_prevnext_cache
f1a0eb0a 40 WHERE (entity_id1 = %1 AND entity_id2 = %2)
41 OR (entity_id1 = %2 AND entity_id2 = %2)",
ac2751b3 42 [1 => [$contact1, 'Integer'], 2 => [$contact2, 'Integer']]
f1a0eb0a 43 );
ac2751b3 44 if ($contact2 < $contact1) {
45 // These are expected to be saved lowest first.
46 $dao->contact_id1 = $contact2;
47 $dao->contact_id2 = $contact1;
48 }
f1a0eb0a 49 }
ac2751b3 50 $dao->save();
f1a0eb0a 51
52 CRM_Utils_Hook::post($hook, 'Exception', $dao->id, $dao);
53 return $dao;
54 }
55
56}