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>
Mon, 4 Mar 2024 20:06:42 +0000 (15:06 -0500)
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 41c2f19f698dfbb931dcb72f3e19217eb03857e9..470519a7b465814aa519a5d21b8d06bac0e53c28 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 &&
@@ -173,6 +179,8 @@ class CRM_Contact_Form_Edit_TagsAndGroups {
           else {
             $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
           }
         }
 
@@ -302,7 +310,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) {
 
@@ -313,7 +321,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;
         }