From 7a5b11d73086b7e49c0a574bfdbe37934873128e Mon Sep 17 00:00:00 2001 From: Bradley Taylor Date: Tue, 4 Jan 2022 12:44:36 +0000 Subject: [PATCH] Add system status check for missing dedupe rules --- CRM/Utils/Check/Component/DedupeRules.php | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 CRM/Utils/Check/Component/DedupeRules.php diff --git a/CRM/Utils/Check/Component/DedupeRules.php b/CRM/Utils/Check/Component/DedupeRules.php new file mode 100644 index 0000000000..6cd6bf8a02 --- /dev/null +++ b/CRM/Utils/Check/Component/DedupeRules.php @@ -0,0 +1,81 @@ +addSelect('contact_type') + ->addGroupBy('contact_type') + ->addWhere('used', '=', $used) + ->execute(); + + $types = []; + foreach ($dedupeRules as $rule) { + if (!in_array($rule, $types)) { + $types[] = $rule['contact_type']; + } + } + return $types; + } + + /** + * Returns an array of missing expected contact types + * + * @param string[] $rules + * @return array + */ + private static function getMissingRules($rules) { + $types = array_column(CRM_Contact_BAO_ContactType::basicTypeInfo(), 'label', 'name'); + return array_diff_key($types, array_flip($rules)); + } + + /** + * @return CRM_Utils_Check_Message[] + */ + public static function checkDedupeRulesExist() { + $messages = []; + + $ruleTypes = ['Supervised' => ts('Supervised'), 'Unsupervised' => ts('Unsupervised')]; + foreach ($ruleTypes as $ruleType => $ruleLabel) { + $rules = self::getContactTypesForRule($ruleType); + $missingRules = self::getMissingRules($rules); + if ($missingRules) { + $message = new CRM_Utils_Check_Message( + __FUNCTION__ . $ruleType, + ts('For CiviCRM to function correctly you must have at least 2 dedupe rules configured for each contact type. You are missing a rule of type %1 for: %2', [1 => $ruleLabel, 2 => implode(', ', $missingRules)]), + ts('%1 dedupe rules missing', [1 => $ruleLabel]), + \Psr\Log\LogLevel::WARNING, + 'fa-server' + ); + $message->addAction( + ts('Configure dedupe rules'), + FALSE, + 'href', + ['path' => 'civicrm/contact/deduperules', 'query' => ['reset' => 1]] + ); + $messages[] = $message; + } + } + return $messages; + } + +} -- 2.25.1