3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2017 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2017
33 class CRM_Contact_Page_DedupeFind
extends CRM_Core_Page_Basic
{
34 protected $_cid = NULL;
36 protected $_mainContacts;
46 public function getBAOName() {
47 return 'CRM_Dedupe_BAO_RuleGroup';
53 public function &links() {
57 * Browse all rule groups.
59 public function run() {
60 $gid = CRM_Utils_Request
::retrieve('gid', 'Positive', $this, FALSE, 0);
61 $action = CRM_Utils_Request
::retrieve('action', 'String', $this, FALSE, 0);
62 $context = CRM_Utils_Request
::retrieve('context', 'String', $this);
63 $limit = CRM_Utils_Request
::retrieve('limit', 'Integer', $this);
64 $rgid = CRM_Utils_Request
::retrieve('rgid', 'Positive', $this);
65 $cid = CRM_Utils_Request
::retrieve('cid', 'Positive', $this, FALSE, 0);
66 // Using a placeholder for criteria as it is intended to be able to pass this later.
68 $isConflictMode = ($context == 'conflicts');
83 $this->assign('urlQuery', CRM_Utils_System
::makeQueryString($urlQry));
85 if ($context == 'search') {
87 $this->assign('backURL', CRM_Core_Session
::singleton()->readUserContext());
90 if ($action & CRM_Core_Action
::RENEW
) {
93 CRM_Core_BAO_PrevNextCache
::deleteItem(NULL, CRM_Dedupe_Merger
::getMergeCacheKeyString($rgid, $gid, $criteria));
95 $urlQry['action'] = 'update';
96 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/contact/dedupefind', $urlQry));
98 elseif ($action & CRM_Core_Action
::MAP
) {
99 // do a batch merge if requested
100 $result = CRM_Dedupe_Merger
::batchMerge($rgid, $gid, 'safe', 75, 2, $criteria);
102 $skippedCount = CRM_Utils_Request
::retrieve('skipped', 'Positive', $this, FALSE, 0);
103 $skippedCount = $skippedCount +
count($result['skipped']);
104 $mergedCount = CRM_Utils_Request
::retrieve('merged', 'Positive', $this, FALSE, 0);
105 $mergedCount = $mergedCount +
count($result['merged']);
107 if (empty($result['merged']) && empty($result['skipped'])) {
109 if ($mergedCount >= 1) {
110 $message = ts("%1 pairs of duplicates were merged", array(1 => $mergedCount));
112 if ($skippedCount >= 1) {
113 $message = $message ?
"{$message} and " : '';
114 $message .= ts("%1 pairs of duplicates were skipped due to conflict",
115 array(1 => $skippedCount)
118 $message .= ts(" during the batch merge process with safe mode.");
119 CRM_Core_Session
::setStatus($message, ts('Merge Complete'), 'success');
120 $urlQry['action'] = 'update';
121 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/contact/dedupefind', $urlQry));
124 $urlQry['action'] = 'map';
125 $urlQry['skipped'] = $skippedCount;
126 $urlQry['merged'] = $mergedCount;
127 CRM_Utils_System
::jsRedirect(
128 CRM_Utils_System
::url('civicrm/contact/dedupefind', $urlQry),
129 ts('Batch Merge Task in progress'),
130 ts('The batch merge task is still in progress. This page will be refreshed automatically.')
135 if ($action & CRM_Core_Action
::UPDATE ||
136 $action & CRM_Core_Action
::BROWSE
138 $this->action
= CRM_Core_Action
::UPDATE
;
140 $urlQry['snippet'] = 4;
141 if ($isConflictMode) {
142 $urlQry['selected'] = 1;
145 $this->assign('sourceUrl', CRM_Utils_System
::url('civicrm/ajax/dedupefind', $urlQry, FALSE, NULL, FALSE));
147 //reload from cache table
148 $cacheKeyString = CRM_Dedupe_Merger
::getMergeCacheKeyString($rgid, $gid, $criteria);
150 $stats = CRM_Dedupe_Merger
::getMergeStatsMsg($cacheKeyString);
152 CRM_Core_Session
::setStatus($stats);
153 // reset so we not displaying same message again
154 CRM_Dedupe_Merger
::resetMergeStats($cacheKeyString);
157 $this->_mainContacts
= CRM_Dedupe_Merger
::getDuplicatePairs($rgid, $gid, !$isConflictMode, 0, $isConflictMode, '', $isConflictMode, $criteria, TRUE);
159 if (empty($this->_mainContacts
)) {
160 if ($isConflictMode) {
161 // if the current screen was intended to list only selected contacts, move back to full dupe list
162 $urlQry['action'] = 'update';
163 unset($urlQry['snippet']);
164 CRM_Utils_System
::redirect(CRM_Utils_System
::url(CRM_Utils_System
::currentPath(), $urlQry));
166 $ruleGroupName = civicrm_api3('RuleGroup', 'getvalue', array('id' => $rgid, 'return' => 'name'));
167 CRM_Core_Session
::singleton()->setStatus(ts('No possible duplicates were found using %1 rule.', array(1 => $ruleGroupName)), ts('None Found'), 'info');
168 $url = CRM_Utils_System
::url('civicrm/contact/deduperules', 'reset=1');
169 if ($context == 'search') {
170 $url = CRM_Core_Session
::singleton()->readUserContext();
172 CRM_Utils_System
::redirect($url);
175 $urlQry['action'] = 'update';
177 $urlQry['cid'] = $this->_cid
;
178 CRM_Core_Session
::singleton()->pushUserContext(CRM_Utils_System
::url('civicrm/contact/deduperules',
183 CRM_Core_Session
::singleton()->pushUserContext(CRM_Utils_System
::url('civicrm/contact/dedupefind',
189 $this->assign('action', $this->action
);
193 $this->action
= CRM_Core_Action
::UPDATE
;
194 $this->edit($this->action
);
195 $this->assign('action', $this->action
);
197 $this->assign('context', $context);
199 return parent
::run();
203 * Browse all rule groups.
205 public function browse() {
206 $this->assign('main_contacts', $this->_mainContacts
);
209 $this->assign('cid', $this->_cid
);
211 if (isset($this->_gid
) ||
$this->_gid
) {
212 $this->assign('gid', $this->_gid
);
214 $this->assign('rgid', $this->_rgid
);
218 * Get name of edit form.
221 * classname of edit form
223 public function editForm() {
224 return 'CRM_Contact_Form_DedupeFind';
228 * Get edit form name.
233 public function editName() {
245 public function userContext($mode = NULL) {
246 return 'civicrm/contact/dedupefind';