From 83ab2ee1ddc103df1028d7a247208f19b049b9a2 Mon Sep 17 00:00:00 2001 From: eileen Date: Thu, 8 Feb 2018 23:20:22 +1300 Subject: [PATCH] CRM-21753 add pass-through support for criteria in urls on dedupe pages --- CRM/Contact/Form/Merge.php | 21 ++++++++++++++------- CRM/Contact/Page/AJAX.php | 10 +++++++--- CRM/Contact/Page/DedupeFind.php | 7 +++++-- CRM/Contact/Page/DedupeMerge.php | 8 ++++++-- templates/CRM/Contact/Page/DedupeFind.tpl | 5 ++++- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/CRM/Contact/Form/Merge.php b/CRM/Contact/Form/Merge.php index 9a567873eb07..6012d0ccbad2 100644 --- a/CRM/Contact/Form/Merge.php +++ b/CRM/Contact/Form/Merge.php @@ -44,6 +44,11 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { var $_contactType = NULL; + /** + * @var array + */ + public $criteria = array(); + /** * Query limit to be retained in the urls. * @@ -74,7 +79,9 @@ public function preProcess() { $this->_gid = $gid = CRM_Utils_Request::retrieve('gid', 'Positive', $this, FALSE); $this->_mergeId = CRM_Utils_Request::retrieve('mergeId', 'Positive', $this, FALSE); $this->limit = CRM_Utils_Request::retrieve('limit', 'Positive', $this, FALSE); - $urlParams = "reset=1&rgid={$this->_rgid}&gid={$this->_gid}&limit=" . $this->limit; + $this->criteria = CRM_Utils_Request::retrieve('criteria', 'String', $this, FALSE, '{}'); + + $urlParams = "reset=1&rgid={$this->_rgid}&gid={$this->_gid}&limit=" . $this->limit . '&criteria=' . $this->criteria; $this->bounceIfInvalid($this->_cid, $this->_oid); @@ -83,7 +90,7 @@ public function preProcess() { 'return' => 'contact_type', )); - $browseUrl = CRM_Utils_System::url('civicrm/contact/dedupefind', $urlParams . '&action=browse'); + $browseUrl = CRM_Utils_System::url('civicrm/contact/dedupefind', $urlParams . '&action=browse', FALSE, NULL, FALSE); if (!$this->_rgid) { // Unset browse URL as we have come from the search screen. @@ -99,7 +106,7 @@ public function preProcess() { CRM_Core_Session::singleton()->pushUserContext($browseUrl); } - $cacheKey = CRM_Dedupe_Merger::getMergeCacheKeyString($this->_rgid, $gid); + $cacheKey = CRM_Dedupe_Merger::getMergeCacheKeyString($this->_rgid, $gid, json_decode($this->criteria, TRUE)); $join = CRM_Dedupe_Merger::getJoinOnDedupeTable(); $where = "de.id IS NULL"; @@ -126,7 +133,7 @@ public function preProcess() { } $flipUrl = CRM_Utils_System::url('civicrm/contact/merge', - "reset=1&action=update&cid={$this->_oid}&oid={$this->_cid}&rgid={$this->_rgid}&gid={$gid}" + "reset=1&action=update&cid={$this->_oid}&oid={$this->_cid}&rgid={$this->_rgid}&gid={$gid}&criteria={$this->criteria}" ); if (!$flip) { $flipUrl .= '&flip=1'; @@ -295,7 +302,7 @@ public function postProcess() { CRM_Core_Session::setStatus($message, ts('Contacts Merged'), 'success'); $url = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$this->_cid}"); - $urlParams = "reset=1&gid={$this->_gid}&rgid={$this->_rgid}&limit={$this->limit}"; + $urlParams = "reset=1&rgid={$this->_rgid}&gid={$this->_gid}&limit=" . $this->limit . '&criteria=' . $this->criteria; if (!empty($formValues['_qf_Merge_submit'])) { $urlParams .= "&action=update"; @@ -309,7 +316,7 @@ public function postProcess() { } if ($this->next && $this->_mergeId) { - $cacheKey = CRM_Dedupe_Merger::getMergeCacheKeyString($this->_rgid, $this->_gid); + $cacheKey = CRM_Dedupe_Merger::getMergeCacheKeyString($this->_rgid, $this->_gid, json_decode($this->criteria, TRUE)); $join = CRM_Dedupe_Merger::getJoinOnDedupeTable(); $where = "de.id IS NULL"; @@ -322,7 +329,7 @@ public function postProcess() { ) { $urlParams .= "&cid={$pos['next']['id1']}&oid={$pos['next']['id2']}&mergeId={$pos['next']['mergeId']}&action=update"; - $url = CRM_Utils_System::url('civicrm/contact/merge', $urlParams); + $url = CRM_Utils_System::url('civicrm/contact/merge', $urlParams, FALSE, NULL, FALSE); } } diff --git a/CRM/Contact/Page/AJAX.php b/CRM/Contact/Page/AJAX.php index 6f9123fac68d..9cb4fbc66d36 100644 --- a/CRM/Contact/Page/AJAX.php +++ b/CRM/Contact/Page/AJAX.php @@ -646,13 +646,16 @@ public static function getDedupes() { $gid = CRM_Utils_Request::retrieve('gid', 'Positive'); $rgid = CRM_Utils_Request::retrieve('rgid', 'Positive'); + $null = NULL; + $criteria = CRM_Utils_Request::retrieve('criteria', 'String', $null, FALSE, '{}'); $selected = isset($_REQUEST['selected']) ? CRM_Utils_Type::escape($_REQUEST['selected'], 'Integer') : 0; if ($rowCount < 0) { $rowCount = 0; } $whereClause = $orderByClause = ''; - $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid); + $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, json_decode($criteria, TRUE)); + $searchRows = array(); $searchParams = self::getSearchOptionsFromRequest(); @@ -808,7 +811,7 @@ public static function getDedupes() { $searchRows[$count]['weight'] = CRM_Utils_Array::value('weight', $pair); if (!empty($pairInfo['data']['canMerge'])) { - $mergeParams = "reset=1&cid={$pairInfo['entity_id1']}&oid={$pairInfo['entity_id2']}&action=update&rgid={$rgid}&limit=" . CRM_Utils_Request::retrieve('limit', 'Integer'); + $mergeParams = "reset=1&cid={$pairInfo['entity_id1']}&oid={$pairInfo['entity_id2']}&action=update&rgid={$rgid}&criteria={$criteria}&limit=" . CRM_Utils_Request::retrieve('limit', 'Integer'); if ($gid) { $mergeParams .= "&gid={$gid}"; } @@ -1007,8 +1010,9 @@ public static function toggleDedupeSelect() { $gid = CRM_Utils_Type::escape($_REQUEST['gid'], 'Integer'); $pnid = $_REQUEST['pnid']; $isSelected = CRM_Utils_Type::escape($_REQUEST['is_selected'], 'Boolean'); + $criteria = CRM_Utils_Request::retrieve('criteria', 'String', $null, FALSE, '{}'); - $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid); + $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, json_decode($criteria, TRUE)); $params = array( 1 => array($isSelected, 'Boolean'), diff --git a/CRM/Contact/Page/DedupeFind.php b/CRM/Contact/Page/DedupeFind.php index 99a91201debd..3706d63987a5 100644 --- a/CRM/Contact/Page/DedupeFind.php +++ b/CRM/Contact/Page/DedupeFind.php @@ -63,8 +63,9 @@ public function run() { $limit = CRM_Utils_Request::retrieve('limit', 'Integer', $this); $rgid = CRM_Utils_Request::retrieve('rgid', 'Positive', $this); $cid = CRM_Utils_Request::retrieve('cid', 'Positive', $this, FALSE, 0); - // Using a placeholder for criteria as it is intended to be able to pass this later. - $criteria = array(); + $criteria = CRM_Utils_Request::retrieve('criteria', 'String', $this, FALSE, '{}'); + $this->assign('criteria', $criteria); + $isConflictMode = ($context == 'conflicts'); if ($cid) { $this->_cid = $cid; @@ -79,8 +80,10 @@ public function run() { 'rgid' => $rgid, 'gid' => $gid, 'limit' => $limit, + 'criteria' => $criteria, ); $this->assign('urlQuery', CRM_Utils_System::makeQueryString($urlQry)); + $criteria = json_decode($criteria, TRUE); if ($context == 'search') { $context = 'search'; diff --git a/CRM/Contact/Page/DedupeMerge.php b/CRM/Contact/Page/DedupeMerge.php index d3cc7998545e..370f768caedc 100644 --- a/CRM/Contact/Page/DedupeMerge.php +++ b/CRM/Contact/Page/DedupeMerge.php @@ -52,13 +52,13 @@ public function run() { * Build a queue of tasks by dividing dupe pairs in batches. */ public static function getRunner() { + $rgid = CRM_Utils_Request::retrieveValue('rgid', 'Positive'); $gid = CRM_Utils_Request::retrieveValue('gid', 'Positive'); $limit = CRM_Utils_Request::retrieveValue('limit', 'Positive'); $action = CRM_Utils_Request::retrieveValue('action', 'String'); $mode = CRM_Utils_Request::retrieveValue('mode', 'String', 'safe'); - - $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid); + $criteria = CRM_Utils_Request::retrieve('criteria', 'String', $null, FALSE, '{}'); $urlQry = array( 'reset' => 1, @@ -66,8 +66,12 @@ public static function getRunner() { 'rgid' => $rgid, 'gid' => $gid, 'limit' => $limit, + 'criteria' => $criteria, ); + $criteria = json_decode($criteria, TRUE); + $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, $criteria); + if ($mode == 'aggressive' && !CRM_Core_Permission::check('force merge duplicate contacts')) { CRM_Core_Session::setStatus(ts('You do not have permission to force merge duplicate contact records'), ts('Permission Denied'), 'error'); CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contact/dedupefind', $urlQry)); diff --git a/templates/CRM/Contact/Page/DedupeFind.tpl b/templates/CRM/Contact/Page/DedupeFind.tpl index 17e2edc09d51..6e1bec2ae66c 100644 --- a/templates/CRM/Contact/Page/DedupeFind.tpl +++ b/templates/CRM/Contact/Page/DedupeFind.tpl @@ -324,6 +324,9 @@ var is_selected = CRM.$('.crm-dedupe-select-all').prop('checked') ? 1 : 0; } + var criteria = {/literal}'{$criteria}'{literal}; + criteria = criteria.length > 0 ? criteria : 0; + var dataUrl = {/literal}"{crmURL p='civicrm/ajax/toggleDedupeSelect' h=0 q='snippet=4'}"{literal}; var rgid = {/literal}"{$rgid}"{literal}; var gid = {/literal}"{$gid}"{literal}; @@ -331,7 +334,7 @@ rgid = rgid.length > 0 ? rgid : 0; gid = gid.length > 0 ? gid : 0; - CRM.$.post(dataUrl, {pnid: id, rgid: rgid, gid: gid, is_selected: is_selected}, function (data) { + CRM.$.post(dataUrl, {pnid: id, rgid: rgid, gid: gid, is_selected: is_selected, criteria : criteria}, function (data) { // nothing to do for now }, 'json'); }