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);
71 $this->assign('urlQuery', CRM_Utils_System
::makeQueryString($urlQry));
73 if ($context == 'search') {
75 $this->assign('backURL', CRM_Core_Session
::singleton()->readUserContext());
78 if ($action & CRM_Core_Action
::RENEW
) {
81 CRM_Core_BAO_PrevNextCache
::deleteItem(NULL, CRM_Dedupe_Merger
::getMergeCacheKeyString($rgid, $gid));
83 $urlQry['action'] = 'update';
84 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/contact/dedupefind', $urlQry));
86 elseif ($action & CRM_Core_Action
::MAP
) {
87 // do a batch merge if requested
88 $result = CRM_Dedupe_Merger
::batchMerge($rgid, $gid, 'safe', 75);
90 $skippedCount = CRM_Utils_Request
::retrieve('skipped', 'Positive', $this, FALSE, 0);
91 $skippedCount = $skippedCount +
count($result['skipped']);
92 $mergedCount = CRM_Utils_Request
::retrieve('merged', 'Positive', $this, FALSE, 0);
93 $mergedCount = $mergedCount +
count($result['merged']);
95 if (empty($result['merged']) && empty($result['skipped'])) {
97 if ($mergedCount >= 1) {
98 $message = ts("%1 pairs of duplicates were merged", array(1 => $mergedCount));
100 if ($skippedCount >= 1) {
101 $message = $message ?
"{$message} and " : '';
102 $message .= ts("%1 pairs of duplicates were skipped due to conflict",
103 array(1 => $skippedCount)
106 $message .= ts(" during the batch merge process with safe mode.");
107 CRM_Core_Session
::setStatus($message, ts('Merge Complete'), 'success');
108 $urlQry['action'] = 'update';
109 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/contact/dedupefind', $urlQry));
112 $urlQry['action'] = 'map';
113 $urlQry['skipped'] = $skippedCount;
114 $urlQry['merged'] = $mergedCount;
115 CRM_Utils_System
::jsRedirect(
116 CRM_Utils_System
::url('civicrm/contact/dedupefind', $urlQry),
117 ts('Batch Merge Task in progress'),
118 ts('The batch merge task is still in progress. This page will be refreshed automatically.')
123 if ($action & CRM_Core_Action
::UPDATE ||
124 $action & CRM_Core_Action
::BROWSE
126 $cid = CRM_Utils_Request
::retrieve('cid', 'Positive', $this, FALSE, 0);
127 $this->action
= CRM_Core_Action
::UPDATE
;
129 $urlQry['snippet'] = 4;
130 if ($context == 'conflicts') {
131 $urlQry['selected'] = 1;
134 $this->assign('sourceUrl', CRM_Utils_System
::url('civicrm/ajax/dedupefind', $urlQry, FALSE, NULL, FALSE));
136 //reload from cache table
137 $cacheKeyString = CRM_Dedupe_Merger
::getMergeCacheKeyString($rgid, $gid);
139 $stats = CRM_Dedupe_Merger
::getMergeStatsMsg($cacheKeyString);
141 CRM_Core_Session
::setStatus($stats);
142 // reset so we not displaying same message again
143 CRM_Dedupe_Merger
::resetMergeStats($cacheKeyString);
145 $join = CRM_Dedupe_Merger
::getJoinOnDedupeTable();
146 $where = "de.id IS NULL";
147 if ($context == 'conflicts') {
148 $where .= " AND pn.is_selected = 1";
150 $this->_mainContacts
= CRM_Core_BAO_PrevNextCache
::retrieve($cacheKeyString, $join, $where);
151 if (empty($this->_mainContacts
)) {
152 if ($context == 'conflicts') {
153 // if the current screen was intended to list only selected contacts, move back to full dupe list
154 $urlQry['action'] = 'update';
155 unset($urlQry['snippet']);
156 CRM_Utils_System
::redirect(CRM_Utils_System
::url(CRM_Utils_System
::currentPath(), $urlQry));
159 $foundDupes = $this->get("dedupe_dupes_$gid");
161 $foundDupes = CRM_Dedupe_Finder
::dupesInGroup($rgid, $gid, $limit);
163 $this->set("dedupe_dupes_$gid", $foundDupes);
166 $foundDupes = $this->get('dedupe_dupes');
168 $foundDupes = CRM_Dedupe_Finder
::dupes($rgid, array(), TRUE, $limit);
170 $this->set('dedupe_dupes', $foundDupes);
173 $ruleGroup = new CRM_Dedupe_BAO_RuleGroup();
174 $ruleGroup->id
= $rgid;
175 $ruleGroup->find(TRUE);
177 $session = CRM_Core_Session
::singleton();
178 $session->setStatus(ts('No possible duplicates were found using %1 rule.', array(1 => $ruleGroup->name
)), ts('None Found'), 'info');
179 $url = CRM_Utils_System
::url('civicrm/contact/deduperules', 'reset=1');
180 if ($context == 'search') {
181 $url = $session->readUserContext();
183 CRM_Utils_System
::redirect($url);
186 $mainContacts = CRM_Dedupe_Finder
::parseAndStoreDupePairs($foundDupes, $cacheKeyString);
194 $this->_rgid
= $rgid;
195 $this->_mainContacts
= $mainContacts;
197 $urlQry['action'] = 'update';
199 $urlQry['cid'] = $this->_cid
;
200 CRM_Core_Session
::singleton()->pushUserContext(CRM_Utils_System
::url('civicrm/contact/deduperules',
205 CRM_Core_Session
::singleton()->pushUserContext(CRM_Utils_System
::url('civicrm/contact/dedupefind',
218 $this->_rgid
= $rgid;
221 $this->assign('action', $this->action
);
225 $this->action
= CRM_Core_Action
::UPDATE
;
226 $this->edit($this->action
);
227 $this->assign('action', $this->action
);
229 $this->assign('context', $context);
231 return parent
::run();
235 * Browse all rule groups.
237 public function browse() {
238 $this->assign('main_contacts', $this->_mainContacts
);
241 $this->assign('cid', $this->_cid
);
243 if (isset($this->_gid
) ||
$this->_gid
) {
244 $this->assign('gid', $this->_gid
);
246 $this->assign('rgid', $this->_rgid
);
250 * Get name of edit form.
253 * classname of edit form
255 public function editForm() {
256 return 'CRM_Contact_Form_DedupeFind';
260 * Get edit form name.
265 public function editName() {
277 public function userContext($mode = NULL) {
278 return 'civicrm/contact/dedupefind';