From effbcf8507b70128d3bc0b4a33428180f5a6682a Mon Sep 17 00:00:00 2001
From: Sunil Pawar <sunil@skvare.com>
Date: Mon, 24 Aug 2020 16:44:23 +0530
Subject: [PATCH] report#45 Ability Search Smart or Normal Group using
 additional filter on Manage Group page

---
 CRM/Contact/BAO/Group.php           | 8 ++++++++
 CRM/Group/Form/Search.php           | 8 ++++++++
 CRM/Group/Page/AJAX.php             | 1 +
 templates/CRM/Group/Form/Search.tpl | 8 ++++++++
 4 files changed, 25 insertions(+)

diff --git a/CRM/Contact/BAO/Group.php b/CRM/Contact/BAO/Group.php
index fae22f03b84..cff22581828 100644
--- a/CRM/Contact/BAO/Group.php
+++ b/CRM/Contact/BAO/Group.php
@@ -1223,6 +1223,14 @@ WHERE {$whereClause}";
       $clauses[] = '`groups`.parents IS NULL';
     }
 
+    $savedSearch = CRM_Utils_Array::value('savedSearch', $params);
+    if ($savedSearch == 1) {
+      $clauses[] = 'groups.saved_search_id IS NOT NULL';
+    }
+    else if ($savedSearch == 2) {
+      $clauses[] = 'groups.saved_search_id IS NULL';
+    }
+
     // only show child groups of a specific parent group
     $parent_id = $params['parent_id'] ?? NULL;
     if ($parent_id) {
diff --git a/CRM/Group/Form/Search.php b/CRM/Group/Form/Search.php
index 819b061f21d..a56623fefc0 100644
--- a/CRM/Group/Form/Search.php
+++ b/CRM/Group/Form/Search.php
@@ -40,6 +40,14 @@ class CRM_Group_Form_Search extends CRM_Core_Form {
       CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Group', 'title')
     );
 
+    $optionTypes = [
+      '1' => ts('Smart Group'),
+      '2' => ts('Normal Group'),
+    ];
+    $this->add('select', 'saved_search', ts('Group Type'),
+      ['' => ts('- any -')] + $optionTypes
+    );
+
     $groupTypes = CRM_Core_OptionGroup::values('group_type', TRUE);
     $config = CRM_Core_Config::singleton();
     if ($config->userFramework == 'Joomla') {
diff --git a/CRM/Group/Page/AJAX.php b/CRM/Group/Page/AJAX.php
index b314d5cb616..9e6d809f373 100644
--- a/CRM/Group/Page/AJAX.php
+++ b/CRM/Group/Page/AJAX.php
@@ -42,6 +42,7 @@ class CRM_Group_Page_AJAX {
         'status' => 'Integer',
         'parentsOnly' => 'Integer',
         'showOrgInfo' => 'Boolean',
+        'savedSearch' => 'Integer',
         // Ignore 'parent_id' as that case is handled above
       ];
       $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
diff --git a/templates/CRM/Group/Form/Search.tpl b/templates/CRM/Group/Form/Search.tpl
index a2019f4d1c2..e01ece5d192 100644
--- a/templates/CRM/Group/Form/Search.tpl
+++ b/templates/CRM/Group/Form/Search.tpl
@@ -55,6 +55,13 @@
               {$form.component_mode.html}
             </td>
           </tr>
+          <tr>
+            <td>
+              {$form.saved_search.label} <br/>{$form.saved_search.html}
+            </td>
+            <td colspan="2">
+            </td>
+          </tr>
         </table>
       </div>
     </div>
@@ -116,6 +123,7 @@
           d.group_type = groupTypes,
           d.visibility = $(".crm-group-search-form-block select#visibility").val(),
           d.status = groupStatus,
+          d.savedSearch = $('.crm-group-search-form-block select#saved_search').val(),
           d.component_mode = $(".crm-group-search-form-block select#component_mode").val(),
           d.showOrgInfo = {/literal}"{$showOrgInfo}"{literal},
           d.parentsOnly = parentsOnly
-- 
GitLab