Commit | Line | Data |
---|---|---|
4b513f23 | 1 | (function($, _) { |
6a488035 TO |
2 | var ufGroupCollection = new CRM.UF.UFGroupCollection(_.sortBy(CRM.initialProfileList.values, 'title')); |
3 | //var ufGroupCollection = new CRM.UF.UFGroupCollection(CRM.initialProfileList.values, { | |
4 | // comparator: 'title' // no point, this doesn't work with subcollections | |
5 | //}); | |
6 | ufGroupCollection.unshift(new CRM.UF.UFGroupModel({ | |
7 | id: '', | |
8 | title: ts('- select -') | |
9 | })); | |
10 | ||
11 | /** | |
12 | * Example: | |
13 | * <input type="text" value="{$profileId}" class="crm-profile-selector" /> | |
14 | * ... | |
15 | * cj('.crm-profile-selector').crmProfileSelector({ | |
16 | * groupTypeFilter: "Contact,Individual,Activity;;ActivityType:7", | |
17 | * entities: "contact_1:IndividualModel,activity_1:ActivityModel" | |
18 | * }); | |
19 | * | |
20 | * Note: The system does not currently support dynamic entities -- it only supports | |
21 | * a couple of entities named "contact_1" and "activity_1". See also | |
22 | * CRM.UF.guessEntityName(). | |
23 | */ | |
24 | $.fn.crmProfileSelector = function(options) { | |
25 | return this.each(function() { | |
26 | // Hide the existing <SELECT> and instead construct a ProfileSelector view. | |
27 | // Keep them synchronized. | |
8e515d57 CW |
28 | var matchingUfGroups, |
29 | $select = $(this).hide().addClass('rendered'); | |
6a488035 | 30 | |
99e239bc | 31 | var validTypesId = []; |
37375016 | 32 | var usedByFilter = null; |
6a488035 TO |
33 | if (options.groupTypeFilter) { |
34 | matchingUfGroups = ufGroupCollection.subcollection({ | |
35 | filter: function(ufGroupModel) { | |
58770077 | 36 | //CRM-16915 - filter with module used by the profile |
37 | if (!$.isEmptyObject(options.usedByFilter)) { | |
37375016 | 38 | usedByFilter = options.usedByFilter; |
39 | } | |
40 | return ufGroupModel.checkGroupType(options.groupTypeFilter, options.allowAllSubtypes, usedByFilter); | |
6a488035 TO |
41 | } |
42 | }); | |
43 | } else { | |
44 | matchingUfGroups = ufGroupCollection; | |
45 | } | |
46 | ||
99e239bc | 47 | //CRM-15427 check for valid subtypes raise a warning if not valid |
48 | if (options.allowAllSubtypes && $.isEmptyObject(validTypesId)) { | |
49 | validTypes = ufGroupCollection.subcollection({ | |
50 | filter: function(ufGroupModel) { | |
51 | return ufGroupModel.checkGroupType(options.groupTypeFilter); | |
52 | } | |
53 | }); | |
54 | _.each(validTypes.models, function(validTypesattr) { | |
55 | validTypesId.push(validTypesattr.id); | |
56 | }); | |
57 | } | |
58 | if (!$.isEmptyObject(validTypesId) && $.inArray($select.val(), validTypesId) == -1) { | |
59 | var civiComponent; | |
60 | if (options.groupTypeFilter.indexOf('Membership') !== -1) { | |
61 | civiComponent = 'Membership'; | |
62 | } | |
63 | else if (options.groupTypeFilter.indexOf('Participant') !== -1) { | |
64 | civiComponent = 'Event'; | |
65 | } | |
66 | else { | |
67 | civiComponent = 'Contribution'; | |
68 | } | |
0c3fb122 | 69 | CRM.alert(ts('The selected profile is using a custom field which is not assigned to the "%1" being configured.', {1: civiComponent}), ts('Warning')); |
99e239bc | 70 | } |
6a488035 | 71 | var view = new CRM.ProfileSelector.View({ |
8e515d57 | 72 | ufGroupId: $select.val(), |
6a488035 TO |
73 | ufGroupCollection: matchingUfGroups, |
74 | ufEntities: options.entities | |
75 | }); | |
76 | view.on('change:ufGroupId', function() { | |
8e515d57 | 77 | $select.val(view.getUfGroupId()).change(); |
a572de36 | 78 | }); |
6a488035 | 79 | view.render(); |
8e515d57 | 80 | $select.after(view.el); |
6a488035 TO |
81 | setTimeout(function() { |
82 | view.doPreview(); | |
83 | }, 100); | |
84 | }); | |
85 | }; | |
86 | ||
8547369d | 87 | $('#crm-container').on('crmLoad', function() { |
8e515d57 | 88 | $('.crm-profile-selector:not(.rendered)', this).each(function() { |
6a488035 | 89 | $(this).crmProfileSelector({ |
8e515d57 | 90 | groupTypeFilter: $(this).data('groupType'), |
99e239bc | 91 | entities: $(this).data('entities'), |
92 | //CRM-15427 | |
37375016 | 93 | allowAllSubtypes: $(this).data('default'), |
94 | usedByFilter: $(this).data('usedfor') | |
6a488035 TO |
95 | }); |
96 | }); | |
8547369d | 97 | }); |
6a488035 | 98 | |
4b513f23 | 99 | })(CRM.$, CRM._); |