Allow admin to change the names of filtered groups
authorAndrew Engelbrecht <andrew@fsf.org>
Mon, 18 Sep 2017 22:19:40 +0000 (18:19 -0400)
committerMichael McMahon <michael@fsf.org>
Tue, 27 Sep 2022 21:05:22 +0000 (17:05 -0400)
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

index 5b567a695f9acb68632b0040676eca69212bcf57..191e6fd1f64ad90403794560bfa4a58ff73bce4f 100644 (file)
@@ -130,21 +130,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;
@@ -155,10 +161,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 &&
@@ -171,8 +177,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
           }
         }
 
@@ -301,7 +321,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) {
 
@@ -312,7 +332,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;
         }