From 232d712f57a17ab50ec79e1b5ff78df723fa1d92 Mon Sep 17 00:00:00 2001 From: Bradley Taylor Date: Sun, 20 Feb 2022 14:52:51 +0000 Subject: [PATCH] Core#2918 Implement new UI for configuring dedupe rule usage. --- CRM/Contact/Form/DedupeRules.php | 12 +++++- css/civicrm.css | 20 +++++++++ js/crm.dedupeRules.js | 48 ++++++++++++++++++++++ templates/CRM/Contact/Form/DedupeRules.tpl | 36 +++++++++++++++- 4 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 js/crm.dedupeRules.js diff --git a/CRM/Contact/Form/DedupeRules.php b/CRM/Contact/Form/DedupeRules.php index 6539126565..c63935739c 100644 --- a/CRM/Contact/Form/DedupeRules.php +++ b/CRM/Contact/Form/DedupeRules.php @@ -40,6 +40,9 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { CRM_Utils_System::permissionDenied(); CRM_Utils_System::civiExit(); } + + Civi::resources()->addScriptFile('civicrm', 'js/crm.dedupeRules.js'); + $this->_options = CRM_Core_SelectValues::getDedupeRuleTypes(); $this->_rgid = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE, 0); @@ -65,6 +68,8 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { $this->_defaults['is_reserved'] = $rgDao->is_reserved; $this->assign('isReserved', $rgDao->is_reserved); $this->assign('ruleName', $rgDao->name); + $this->assign('ruleUsed', CRM_Core_SelectValues::getDedupeRuleTypes()[$rgDao->used]); + $this->assign('canChangeUsage', $rgDao->used === 'General'); $ruleDao = new CRM_Dedupe_DAO_DedupeRule(); $ruleDao->dedupe_rule_group_id = $this->_rgid; $ruleDao->find(); @@ -76,6 +81,11 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { $count++; } } + else { + $this->_defaults['used'] = 'General'; + $this->assign('ruleUsed', CRM_Core_SelectValues::getDedupeRuleTypes()['General']); + $this->assign('canChangeUsage', TRUE); + } $supported = CRM_Dedupe_BAO_DedupeRuleGroup::supportedFields($this->_contactType); if (is_array($supported)) { foreach ($supported as $table => $fields) { @@ -96,7 +106,7 @@ class CRM_Contact_Form_DedupeRules extends CRM_Admin_Form { 'objectExists', ['CRM_Dedupe_DAO_DedupeRuleGroup', $this->_rgid, 'title'] ); - $this->addField('used', ['label' => ts('Usage')], TRUE); + $this->add('hidden', 'used'); $reserved = $this->addField('is_reserved', ['label' => ts('Reserved?')]); if (!empty($this->_defaults['is_reserved'])) { $reserved->freeze(); diff --git a/css/civicrm.css b/css/civicrm.css index 3216339b5c..73dd08a7c5 100644 --- a/css/civicrm.css +++ b/css/civicrm.css @@ -3926,3 +3926,23 @@ span.crm-status-icon { .crm-search-display-grid-layout-5 { grid-template-columns: repeat(5, 1fr); } + +/* Dedupe rules */ +.crm-dedupe-rules-form-block-used div { + max-width: 800px; +} +.crm-dedupe-rules-form-block-used p:first-child { + margin-top: 0; +} +.dedupe-rules-dialog [type=radio] { + margin-top: 4px; +} +.dedupe-rules-dialog p:first-child { + margin-top: 0; +} +.dedupe-rules-dialog input[type=radio] { + float: left; +} +.dedupe-rules-dialog label > * { + margin-left: 30px; +} diff --git a/js/crm.dedupeRules.js b/js/crm.dedupeRules.js new file mode 100644 index 0000000000..1407ae7396 --- /dev/null +++ b/js/crm.dedupeRules.js @@ -0,0 +1,48 @@ +// https://civicrm.org/licensing + +CRM.$(function($) { + function updateDisplay() { + var used = $('[name=used]').val(); + var inputParent = $('[name=usedDialog][value=' + used + ']').closest('div'); + var title = inputParent.find('.dedupe-rules-dialog-title').text(); + var desc = inputParent.find('.dedupe-rules-dialog-desc').text(); + $('.js-dedupe-rules-current').text(title); + $('.js-dedupe-rules-desc').text(desc); + } + function setInitial() { + var used = $('[name=used]').val(); + $('[name=usedDialog][value=' + used + ']').prop('checked', true); + updateDisplay(); + } + function setSaveValue() { + var dialogVal = $('[name=usedDialog]:checked').val(); + $('[name=used]').val(dialogVal); + updateDisplay(); + } + function openDialog() { + var dialog = $('.dedupe-rules-dialog'); + dialog.dialog({ + title: dialog.attr('data-title'), + width: 800, + buttons: [ + { + text: dialog.attr('data-button-close'), + icon: 'fa-close', + click: function() { + dialog.dialog('close'); + } + }, + { + text: dialog.attr('data-button-update'), + icon: 'fa-check', + click: function() { + setSaveValue(); + dialog.dialog('close'); + } + } + ] + }); + } + setInitial(); + $('.js-dedupe-rules-change').on('click', openDialog); +}); diff --git a/templates/CRM/Contact/Form/DedupeRules.tpl b/templates/CRM/Contact/Form/DedupeRules.tpl index b16fc71643..e302fa6048 100644 --- a/templates/CRM/Contact/Form/DedupeRules.tpl +++ b/templates/CRM/Contact/Form/DedupeRules.tpl @@ -25,8 +25,14 @@ - {$form.used.label} - {$form.used.html} {help id="id-rule-used"} + {ts}Usage{/ts} + +
+

{ts}Currently set to: {/ts}

+

+

+
+ {$form.is_reserved.label} @@ -97,3 +103,29 @@
{include file="CRM/common/formButtons.tpl" location="bottom"}
+ + -- 2.25.1