From a2458f1b880e0c3285322397455175fe609d1d11 Mon Sep 17 00:00:00 2001 From: Andrew Engelbrecht Date: Mon, 18 Sep 2017 18:19:40 -0400 Subject: [PATCH] Allow admin to change the names of filtered groups This feature lets one mimic a custom field by allowing admins to change the text that appears next to each group's check box, via drush. The json format is a bit more nested, but indented json can be used. An exmple is included in CRM/Contact/Form/Edit/TagsAndGroups.php. --- CRM/Contact/Form/Edit/TagsAndGroups.php | 34 ++++++++++++++++++++----- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/CRM/Contact/Form/Edit/TagsAndGroups.php b/CRM/Contact/Form/Edit/TagsAndGroups.php index ffbd24c860..bf08491645 100644 --- a/CRM/Contact/Form/Edit/TagsAndGroups.php +++ b/CRM/Contact/Form/Edit/TagsAndGroups.php @@ -129,21 +129,27 @@ class CRM_Contact_Form_Edit_TagsAndGroups { case 'CRM_Profile_Form_Edit': $page_id = $form->get('gid'); // gid, not id - $filter = $groups_field_filters['profile'][strval($page_id)]; + $filter_config = $groups_field_filters['profile'][strval($page_id)]; break; case 'CRM_Contribute_Form_Contribution_Main': case 'CRM_Contribute_Form_Contribution_Confirm': case 'CRM_Contribute_Form_Contribution_ThankYou': $page_id = $form->get('id'); // id, not gid - $filter = $groups_field_filters['contribution'][strval($page_id)]; + $filter_config = $groups_field_filters['contribution'][strval($page_id)]; break; case 'CRM_Event_Form_Registration_Register': $page_id = $form->get('id'); // id, not gid - $filter = $groups_field_filters['event'][strval($page_id)]; + $filter_config = $groups_field_filters['event'][strval($page_id)]; break; } + + if (isset($filter_config)) { + + $filter_ids = $filter_config['groups']; + $filter_titles = $filter_config['titles']; + } // sudoman hack continues further below $attributes['skiplabel'] = TRUE; @@ -154,10 +160,10 @@ class CRM_Contact_Form_Edit_TagsAndGroups { // sudoman hack continues // filter groups if a filter is set - if (isset($filter) and !in_array($id, $filter)) { + if (isset($filter_ids) and !in_array($id, $filter_ids)) { continue; } - // sudoman hack continues with calls to CRM_Contact_Form_Edit_TagsAndGroups::reInsertFilteredGroupMemberships + // sudoman hack continues further below // make sure that this group has public visibility if ($visibility && @@ -170,8 +176,22 @@ class CRM_Contact_Form_Edit_TagsAndGroups { $groupsOptions[$key] = $group; } else { + + // sudoman hack continues + if (isset($filter_titles)) { + $custom_group_title = $filter_titles[array_search($id, $filter_ids)]; + } + if (isset($custom_group_title)) { + $group_title = $custom_group_title; + } else { + $group_title = $group['title']; + } + + // only slight modification here $form->_tagGroup[$fName][$id]['description'] = $group['description']; $elements[] = &$form->addElement('advcheckbox', $id, NULL, $group['text'], $attributes); + + // sudoman hack continues with calls to CRM_Contact_Form_Edit_TagsAndGroups::reInsertFilteredGroupMemberships } } @@ -300,7 +320,7 @@ class CRM_Contact_Form_Edit_TagsAndGroups { $contactID, $ignorePermission, $params) { $groups_field_filters = json_decode(variable_get('groups_field_filters', NULL), $assoc = TRUE); - $filter = $groups_field_filters[$page_type][strval($page_id)]; + $filter_ids = $groups_field_filters[$page_type][strval($page_id)]['groups']; if ($contactID !== NULL) { @@ -311,7 +331,7 @@ class CRM_Contact_Form_Edit_TagsAndGroups { foreach ($contactGroupList as $value) { $groupId = $value['group_id']; - if (!empty($filter) && !in_array($groupId, $filter)) { + if (!empty($filter_ids) && !in_array($groupId, $filter_ids)) { $params['group'][strval($groupId)] = 1; } -- 2.25.1