E::ts('Categories'), 'name' => 'contact_categories', 'url' => 'civicrm/admin/contactcategory', 'permission' => 'edit all contacts', 'operator' => 'OR', 'separator' => 0, ]); _contactcats_civix_insert_navigation_menu($menu, 'Reports', [ 'label' => E::ts('Contact Category Flows'), 'name' => 'contact_category_flows', 'url' => 'civicrm/reports/contact-category-flows', 'permission' => 'access CiviCRM', 'operator' => 'OR', 'separator' => 0, ]); _contactcats_civix_navigationMenu($menu); } /** * Implements hook_civicrm_merge() * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_merge/ */ function contactcats_civicrm_merge($type, &$data, $mainId = NULL, $otherId = NULL, $tables = NULL) { if ($type === 'sqls' && $otherId) { // delete the 'other' contact's category; we cannot have two per contacts. \Civi\Api4\ContactCategory::delete(FALSE) ->addWhere('id', '=', $otherId) ->execute(); Civi::log()->debug("ContactCategory: deleted category for $otherId before merge into $mainId"); } }