Commit | Line | Data |
---|---|---|
25523059 CW |
1 | (function(angular, $, _) { |
2 | "use strict"; | |
3 | ||
44402a2e | 4 | angular.module('crmSearchActions').controller('SaveSmartGroup', function ($scope, $element, $timeout, crmApi4, dialogService, searchMeta) { |
25523059 | 5 | var ts = $scope.ts = CRM.ts(), |
4b01551f | 6 | model = $scope.model; |
25523059 CW |
7 | $scope.groupEntityRefParams = { |
8 | entity: 'Group', | |
9 | api: { | |
73d7dbcd | 10 | params: {is_hidden: 0, is_active: 1, 'saved_search_id.api_entity': model.api_entity}, |
25523059 CW |
11 | extra: ['saved_search_id', 'description', 'visibility', 'group_type'] |
12 | }, | |
13 | select: { | |
14 | allowClear: true, | |
15 | minimumInputLength: 0, | |
16 | placeholder: ts('Select existing group') | |
17 | } | |
18 | }; | |
4b01551f | 19 | $scope.columns = searchMeta.getSmartGroupColumns(model.api_entity, model.api_params); |
73d7dbcd CW |
20 | |
21 | if (!$scope.columns.length) { | |
22 | CRM.alert(ts('Cannot create smart group; search does not include any contacts.'), ts('Error')); | |
23 | $timeout(function() { | |
24 | dialogService.cancel('saveSearchDialog'); | |
25 | }); | |
26 | return; | |
27 | } | |
28 | ||
29 | // Pick the first applicable column for contact id | |
23e56526 | 30 | model.api_params.select.unshift(_.intersection(model.api_params.select, _.pluck($scope.columns, 'id'))[0] || $scope.columns[0].id); |
73d7dbcd | 31 | |
25523059 CW |
32 | if (!CRM.checkPerm('administer reserved groups')) { |
33 | $scope.groupEntityRefParams.api.params.is_reserved = 0; | |
34 | } | |
35 | $scope.perm = { | |
36 | administerReservedGroups: CRM.checkPerm('administer reserved groups') | |
37 | }; | |
44402a2e | 38 | $scope.groupOptions = CRM.crmSearchActions.groupOptions; |
2c7e2f4b CW |
39 | $element.on('change', '#api-save-search-select-group', function() { |
40 | if ($(this).val()) { | |
41 | $scope.$apply(function() { | |
42 | var group = $('#api-save-search-select-group').select2('data').extra; | |
43 | model.saved_search_id = group.saved_search_id; | |
44 | model.description = group.description || ''; | |
45 | model.group_type = group.group_type || []; | |
46 | model.visibility = group.visibility; | |
47 | }); | |
25523059 CW |
48 | } |
49 | }); | |
50 | $scope.cancel = function () { | |
51 | dialogService.cancel('saveSearchDialog'); | |
52 | }; | |
53 | $scope.save = function () { | |
54 | $('.ui-dialog:visible').block(); | |
55 | var group = model.id ? {id: model.id} : {title: model.title}; | |
56 | group.description = model.description; | |
57 | group.visibility = model.visibility; | |
58 | group.group_type = model.group_type; | |
59 | group.saved_search_id = '$id'; | |
23e56526 | 60 | model.api_params.select = _.unique(model.api_params.select); |
25523059 | 61 | var savedSearch = { |
73d7dbcd CW |
62 | api_entity: model.api_entity, |
63 | api_params: model.api_params | |
25523059 CW |
64 | }; |
65 | if (group.id) { | |
66 | savedSearch.id = model.saved_search_id; | |
67 | } | |
68 | crmApi4('SavedSearch', 'save', {records: [savedSearch], chain: {group: ['Group', 'save', {'records': [group]}]}}) | |
69 | .then(function (result) { | |
70 | dialogService.close('saveSearchDialog', result[0]); | |
71 | }); | |
72 | }; | |
73 | }); | |
74 | })(angular, CRM.$, CRM._); |