diff --git a/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js b/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js index 977e965f6940..dcb23b75c3dc 100644 --- a/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js @@ -14,6 +14,7 @@ ctrl = angular.extend(this, _.cloneDeep(searchDisplayBaseTrait), _.cloneDeep(searchDisplaySortableTrait)), afformLoad; + $scope.crmUrl = CRM.url; this.searchDisplayPath = CRM.url('civicrm/search'); this.afformPath = CRM.url('civicrm/admin/afform'); this.afformEnabled = 'org.civicrm.afform' in CRM.crmSearchAdmin.modules; @@ -45,18 +46,25 @@ 'DATE(created_date) AS date_created', 'DATE(modified_date) AS date_modified', 'DATE(expires_date) AS expires', - 'GROUP_CONCAT(display.name ORDER BY display.id) AS display_name', - 'GROUP_CONCAT(display.label ORDER BY display.id) AS display_label', - 'GROUP_CONCAT(display.type:icon ORDER BY display.id) AS display_icon', - 'GROUP_CONCAT(display.acl_bypass ORDER BY display.id) AS display_acl_bypass', + // Get all search displays + 'GROUP_CONCAT(UNIQUE display.name ORDER BY display.label) AS display_name', + 'GROUP_CONCAT(UNIQUE display.label ORDER BY display.label) AS display_label', + 'GROUP_CONCAT(UNIQUE display.type:icon ORDER BY display.label) AS display_icon', + 'GROUP_CONCAT(UNIQUE display.acl_bypass ORDER BY display.label) AS display_acl_bypass', + // Scheduled reminders + 'GROUP_CONCAT(UNIQUE schedule.id ORDER BY schedule.title) AS schedule_id', + 'GROUP_CONCAT(UNIQUE schedule.title ORDER BY schedule.title) AS schedule_title', 'tags', // Not a selectable field but this hacks around the requirement that filters be in the select clause - 'GROUP_CONCAT(DISTINCT entity_tag.tag_id) AS tag_id', - 'GROUP_CONCAT(DISTINCT group.title) AS groups' + 'GROUP_CONCAT(UNIQUE entity_tag.tag_id) AS tag_id', + // Really there can only be 1 smart group per saved-search; aggregation is just for the sake of the query + 'GROUP_CONCAT(UNIQUE group.id) AS group_id', + 'GROUP_CONCAT(UNIQUE group.title) AS groups' ], join: [ ['SearchDisplay AS display', 'LEFT', ['id', '=', 'display.saved_search_id']], ['Group AS group', 'LEFT', ['id', '=', 'group.saved_search_id']], ['EntityTag AS entity_tag', 'LEFT', ['entity_tag.entity_table', '=', '"civicrm_saved_search"'], ['id', '=', 'entity_tag.entity_id']], + ['ActionSchedule AS schedule', 'LEFT', ['schedule.mapping_id', '=', '"saved_search"'], ['id', '=', 'schedule.entity_value']], ], where: [['api_entity', 'IS NOT NULL'], ['is_current', '=', true]], groupBy: ['id'] @@ -228,8 +236,13 @@ path: '~/crmSearchAdmin/searchListing/afforms.html' }); } + ctrl.display.settings.columns.push({ + type: 'include', + label: ts('Scheduled Reminders'), + path: '~/crmSearchAdmin/searchListing/schedule.html' + }); ctrl.display.settings.columns.push( - searchMeta.fieldToColumn('GROUP_CONCAT(DISTINCT group.title) AS groups', { + searchMeta.fieldToColumn('GROUP_CONCAT(UNIQUE group.title) AS groups', { label: ts('Smart Group') }) ); diff --git a/ext/search_kit/ang/crmSearchAdmin/searchListing/schedule.html b/ext/search_kit/ang/crmSearchAdmin/searchListing/schedule.html new file mode 100644 index 000000000000..da73d968cfc2 --- /dev/null +++ b/ext/search_kit/ang/crmSearchAdmin/searchListing/schedule.html @@ -0,0 +1,20 @@ +
+ + +