Merge pull request #23707 from eileenmcnaughton/import_activity
[civicrm-core.git] / CRM / Contact / Page / DedupeRules.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
bc77d7c0 4 | Copyright CiviCRM LLC. All rights reserved. |
6a488035 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 |
6a488035 9 +--------------------------------------------------------------------+
d25dd0ee 10 */
6a488035
TO
11
12/**
13 *
14 * @package CRM
ca5cec67 15 * @copyright CiviCRM LLC https://civicrm.org/licensing
6a488035
TO
16 */
17class CRM_Contact_Page_DedupeRules extends CRM_Core_Page_Basic {
18
19 /**
fe482240 20 * The action links that we need to display for the browse screen.
6a488035
TO
21 *
22 * @var array
6a488035 23 */
69078420 24 public static $_links = NULL;
6a488035
TO
25
26 /**
fe482240 27 * Get BAO Name.
6a488035 28 *
a6c01b45
CW
29 * @return string
30 * Classname of BAO.
6a488035 31 */
00be9182 32 public function getBAOName() {
61194d45 33 return 'CRM_Dedupe_BAO_DedupeRuleGroup';
6a488035
TO
34 }
35
36 /**
fe482240 37 * Get action Links.
6a488035 38 *
a6c01b45
CW
39 * @return array
40 * (reference) of action links
6a488035 41 */
00be9182 42 public function &links() {
6a488035
TO
43 if (!(self::$_links)) {
44 $deleteExtra = ts('Are you sure you want to delete this Rule?');
45
46 // helper variable for nicer formatting
be2fb01f 47 $links = [];
6a488035
TO
48
49 if (CRM_Core_Permission::check('merge duplicate contacts')) {
be2fb01f 50 $links[CRM_Core_Action::VIEW] = [
6a488035
TO
51 'name' => ts('Use Rule'),
52 'url' => 'civicrm/contact/dedupefind',
53 'qs' => 'reset=1&rgid=%%id%%&action=preview',
54 'title' => ts('Use DedupeRule'),
be2fb01f 55 ];
6a488035
TO
56 }
57 if (CRM_Core_Permission::check('administer dedupe rules')) {
be2fb01f 58 $links[CRM_Core_Action::UPDATE] = [
6a488035
TO
59 'name' => ts('Edit Rule'),
60 'url' => 'civicrm/contact/deduperules',
61 'qs' => 'action=update&id=%%id%%',
62 'title' => ts('Edit DedupeRule'),
be2fb01f
CW
63 ];
64 $links[CRM_Core_Action::DELETE] = [
6a488035
TO
65 'name' => ts('Delete'),
66 'url' => 'civicrm/contact/deduperules',
67 'qs' => 'action=delete&id=%%id%%',
68 'extra' => 'onclick = "return confirm(\'' . $deleteExtra . '\');"',
69 'title' => ts('Delete DedupeRule'),
be2fb01f 70 ];
6a488035
TO
71 }
72
73 self::$_links = $links;
74 }
75 return self::$_links;
76 }
77
78 /**
fe482240 79 * Run the page.
6a488035
TO
80 *
81 * This method is called after the page is created. It checks for the type
82 * of action and executes that action. Finally it calls the parent's run
83 * method.
6a488035 84 */
00be9182 85 public function run() {
5d6d0104 86 $id = $this->getIdAndAction();
6a488035 87
edc80cda 88 $context = CRM_Utils_Request::retrieve('context', 'Alphanumeric', $this, FALSE);
6a488035
TO
89 if ($context == 'nonDupe') {
90 CRM_Core_Session::setStatus(ts('Selected contacts have been marked as not duplicates'), ts('Changes Saved'), 'success');
91 }
92
93 // assign permissions vars to template
94 $this->assign('hasperm_administer_dedupe_rules', CRM_Core_Permission::check('administer dedupe rules'));
95 $this->assign('hasperm_merge_duplicate_contacts', CRM_Core_Permission::check('merge duplicate contacts'));
96
97 // which action to take?
5d6d0104
AH
98 if ($this->_action & (CRM_Core_Action::UPDATE | CRM_Core_Action::ADD)) {
99 $this->edit($this->_action, $id);
6a488035 100 }
5d6d0104 101 if ($this->_action & CRM_Core_Action::DELETE) {
6a488035
TO
102 $this->delete($id);
103 }
104
105 // browse the rules
106 $this->browse();
107
5d6d0104
AH
108 // This replaces parent run, but do parent's parent run
109 return CRM_Core_Page::run();
6a488035
TO
110 }
111
112 /**
fe482240 113 * Browse all rule groups.
6a488035 114 */
00be9182 115 public function browse() {
8a7a4586
CW
116 $contactTypes = array_column(CRM_Contact_BAO_ContactType::basicTypeInfo(), 'label', 'name');
117 $dedupeRuleTypes = CRM_Core_SelectValues::getDedupeRuleTypes();
118 $ruleGroups = array_fill_keys(array_keys($contactTypes), []);
119
120 // Get rule groups for enabled contact types
61194d45 121 $dao = new CRM_Dedupe_DAO_DedupeRuleGroup();
8a7a4586
CW
122 $dao->orderBy('used ASC, title ASC');
123 $dao->whereAdd('contact_type IN ("' . implode('","', array_keys($contactTypes)) . '")');
6a488035
TO
124 $dao->find();
125
126 while ($dao->fetch()) {
be2fb01f 127 $ruleGroups[$dao->contact_type][$dao->id] = [];
6a488035
TO
128 CRM_Core_DAO::storeValues($dao, $ruleGroups[$dao->contact_type][$dao->id]);
129
130 // form all action links
131 $action = array_sum(array_keys($this->links()));
132 $links = self::links();
6a488035
TO
133
134 if ($dao->is_reserved) {
135 unset($links[CRM_Core_Action::DELETE]);
136 }
137
87dab4a4
AH
138 $ruleGroups[$dao->contact_type][$dao->id]['action'] = CRM_Core_Action::formLink(
139 $links,
140 $action,
be2fb01f 141 ['id' => $dao->id],
87dab4a4
AH
142 ts('more'),
143 FALSE,
144 'dedupeRule.manage.action',
145 'DedupeRule',
146 $dao->id
147 );
6a488035 148
77d0b1f8 149 $ruleGroups[$dao->contact_type][$dao->id]['used_display'] = $dedupeRuleTypes[$ruleGroups[$dao->contact_type][$dao->id]['used']];
150 }
6a488035 151 $this->assign('brows', $ruleGroups);
8a7a4586 152 $this->assign('contactTypes', $contactTypes);
6a488035
TO
153 }
154
155 /**
fe482240 156 * Get name of edit form.
6a488035 157 *
a6c01b45
CW
158 * @return string
159 * classname of edit form
6a488035 160 */
00be9182 161 public function editForm() {
6a488035
TO
162 return 'CRM_Contact_Form_DedupeRules';
163 }
164
165 /**
fe482240 166 * Get edit form name.
6a488035 167 *
a6c01b45
CW
168 * @return string
169 * name of this page
6a488035 170 */
00be9182 171 public function editName() {
6a488035
TO
172 return 'DedupeRules';
173 }
174
175 /**
fe482240 176 * Get user context.
6a488035 177 *
da6b46f4
EM
178 * @param null $mode
179 *
a6c01b45
CW
180 * @return string
181 * user context
6a488035 182 */
00be9182 183 public function userContext($mode = NULL) {
6a488035
TO
184 return 'civicrm/contact/deduperules';
185 }
186
4319322b 187 /**
100fef9d 188 * @param int $id
4319322b 189 */
00be9182 190 public function delete($id) {
61194d45 191 $ruleDao = new CRM_Dedupe_DAO_DedupeRule();
6a488035
TO
192 $ruleDao->dedupe_rule_group_id = $id;
193 $ruleDao->delete();
194
61194d45 195 $rgDao = new CRM_Dedupe_DAO_DedupeRuleGroup();
6a488035 196 $rgDao->id = $id;
cbd404b9 197 if ($rgDao->find(TRUE)) {
198 $rgDao->delete();
be2fb01f 199 CRM_Core_Session::setStatus(ts("The rule '%1' has been deleted.", [1 => $rgDao->title]), ts('Rule Deleted'), 'success');
cbd404b9 200 CRM_Utils_System::redirect(CRM_Utils_System::url($this->userContext(), 'reset=1'));
201 }
6a488035 202 }
96025800 203
6a488035 204}