diff --git a/CRM/Contact/BAO/Group.php b/CRM/Contact/BAO/Group.php index fae22f03b84459168faa82e47e6bf04c19058f53..5fe886756d202673a50cde90d09fc04f80f41555 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'; + } + elseif ($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 819b061f21d61e1694ab53e4624a00804c6fd5b5..a56623fefc016011195a13864e0c2a7a53e21a91 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 b314d5cb6168562eea15a26845ad82a07fd9318e..9e6d809f37302404a9dcf591bc0ba09471bcd801 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 a2019f4d1c2c09efcb75e1148237e49d5abe7ea7..e01ece5d192bc00b9c6940a3c5b49022824856bb 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 diff --git a/tests/phpunit/CRM/Group/Page/AjaxTest.php b/tests/phpunit/CRM/Group/Page/AjaxTest.php index 8a88946e4d34ad55b692255fb34a32ffc5a0141d..686e16fc9f3c12fe8e26d16ec20b90a4293ba440 100644 --- a/tests/phpunit/CRM/Group/Page/AjaxTest.php +++ b/tests/phpunit/CRM/Group/Page/AjaxTest.php @@ -553,6 +553,8 @@ class CRM_Group_Page_AjaxTest extends CiviUnitTestCase { // Load the Manage Group page code and we should get a count from our // group because the cache is fresh. $_GET = $this->_params; + // look for Smart Group only + $_GET['savedSearch'] = 1; try { CRM_Group_Page_AJAX::getGroupList(); }