Merge pull request #17981 from eileenmcnaughton/merge_form
[civicrm-core.git] / templates / CRM / Campaign / Form / Search / Survey.tpl
1 {*
2 +--------------------------------------------------------------------+
3 | Copyright CiviCRM LLC. All rights reserved. |
4 | |
5 | This work is published under the GNU AGPLv3 license with some |
6 | permitted exceptions and without any warranty. For full license |
7 | and copyright information, see https://civicrm.org/licensing |
8 +--------------------------------------------------------------------+
9 *}
10
11 {if !$hasSurveys}
12 <div class="messages status no-popup">
13 {icon icon="fa-info-circle"}{/icon}
14 {ts}None found.{/ts}
15 </div>
16
17 <div class="action-link">
18 {crmButton p='civicrm/survey/add' q='reset=1' h=0 icon="plus-circle"}{ts}Add Survey{/ts}{/crmButton}
19 </div>
20
21 {elseif $buildSelector}
22
23 {* use to display result set of survey *}
24 <div id="survey-result-set-dialog" class="hiddenElement"></div>
25
26 {* load survey selector *}
27 {include file="CRM/common/enableDisableApi.tpl"}
28
29 {literal}
30 <script type="text/javascript">
31 CRM.$(function($) {
32 loadSurveyList( );
33 });
34 </script>
35 {/literal}
36
37 <table class="surveys">
38 <thead>
39 <tr class="columnheader">
40 <th class="hiddenElement">{ts}Survey ID{/ts}</th>
41 <th>{ts}Title{/ts}</th>
42 <th class="hiddenElement">{ts}Campaign ID{/ts}</th>
43 <th>{ts}Campaign{/ts}</th>
44 <th class="hiddenElement">{ts}Survey Type ID{/ts}</th>
45 <th>{ts}Survey Type{/ts}</th>
46 <th>{ts}Release Frequency{/ts}</th>
47 <th>{ts}Reserve Each Time{/ts}</th>
48 <th>{ts}Total Reserve{/ts}</th>
49 <th>{ts}Default?{/ts}</th>
50 <th class="hiddenElement">{ts}Is Active?{/ts}</th>
51 <th>{ts}Active?{/ts}</th>
52 <th></th>
53 <th></th>
54 <th></th>
55 </tr>
56 </thead>
57 <tbody></tbody>
58 </table>
59
60 {else}
61
62 <div class="action-link">
63 {crmButton p='civicrm/survey/add' q='reset=1' h=0 icon="plus-circle"}{ts}Add Survey{/ts}{/crmButton}
64 </div>
65
66 {* build search form here *}
67
68 {* Search form and results for surveys *}
69 <div class="crm-block crm-form-block crm-search-form-block">
70 {assign var='searchForm' value="search_form_$searchFor"}
71
72 <div id="{$searchForm}" class="crm-accordion-wrapper crm-survey_search_form-accordion{if $force and !$buildSelector} collapsed{/if}">
73 <div class="crm-accordion-header">
74 {ts}Search Surveys{/ts}
75 </div><!-- /.crm-accordion-header -->
76
77 <div class="crm-accordion-body">
78 {strip}
79 <table class="form-layout-compressed">
80 <tr>
81 <td>{$form.survey_title.label}<br />
82 {$form.survey_title.html}
83 </td>
84 </tr>
85 <tr>
86 <td>{$form.activity_type_id.label}<br />
87 {$form.activity_type_id.html}
88 </td>
89 <td>{$form.survey_campaign_id.label}<br />
90 {$form.survey_campaign_id.html}
91 </td>
92 </tr>
93 <tr>
94 <td colspan="2">
95 {if $context eq 'search'}
96 {$form.buttons.html}
97 {else}
98 <a class="searchSurvey button" style="float:left;" href="#" title="{ts}Search{/ts}" onClick="searchSurveys( '{$qfKey}' );return false;">{ts}Search{/ts}</a>
99 {/if}
100 </td>
101 </tr>
102 </table>
103 {/strip}
104 </div>
105 </div>
106 </div>
107 {* search form ends here *}
108
109 <div id='surveyList'></div>
110
111 {/if} {* end of search form build *}
112
113
114 {literal}
115 <script type="text/javascript">
116
117 {/literal}
118 {* load selector when force *}
119 {if $force and !$buildSelector}
120 {literal}
121 CRM.$(function($) {
122 searchSurveys( {/literal}'{$qfKey}'{literal} );
123 });
124
125 {/literal}
126 {/if}
127 {literal}
128
129 function searchSurveys( qfKey )
130 {
131 var dataUrl = {/literal}"{crmURL h=0 q='search=1&snippet=4&type=survey'}"{literal};
132
133 //lets carry qfKey to retain form session.
134 if ( qfKey ) dataUrl = dataUrl + '&qfKey=' + qfKey;
135
136 CRM.$.get( dataUrl, null, function( surveyList ) {
137 CRM.$( '#surveyList' ).html( surveyList ).trigger('crmLoad');
138
139 //collapse the search form.
140 var searchFormName = '#search_form_' + {/literal}'{$searchFor}'{literal};
141 CRM.$( searchFormName + '.crm-accordion-wrapper:not(.collapsed)').crmAccordionToggle();
142 }, 'html' );
143 }
144
145 function loadSurveyList( )
146 {
147 var sourceUrl = {/literal}"{crmURL p='civicrm/ajax/rest' h=0 q='snippet=4&className=CRM_Campaign_Page_AJAX&fnName=surveyList' }"{literal};
148
149 //build the search qill.
150 //get the search criteria.
151 var searchParams = {/literal}{$searchParams}{literal};
152 var surveyTypes = {/literal}{$surveyTypes}{literal};
153 var surveyCampaigns = {/literal}{$surveyCampaigns}{literal};
154
155 var noRecordFoundMsg = "{/literal}{ts escape='js'}No matches found for:{/ts}{literal}";
156 noRecordFoundMsg += '<div class="qill">';
157
158 var count = 0;
159 var searchQill = [];
160 for ( param in searchParams ) {
161 if ( val = CRM.$( '#' + param ).val( ) ) {
162 if ( param == 'activity_type_id' ) val = surveyTypes[val];
163 if ( param == 'survey_campaign_id' ) val = surveyCampaigns[val];
164 searchQill[count++] = searchParams[param] + ' : ' + val;
165 }
166 }
167 noRecordFoundMsg += searchQill.join( '<span class="font-italic"> ...AND... </span></div><div class="qill">' );
168 CRM.$( 'table.surveys', '#surveyList').dataTable({
169 "bFilter" : false,
170 "bAutoWidth" : false,
171 "bProcessing": false,
172 "bLengthChange": false,
173 "aaSorting": [],
174 "aoColumns":[{sClass:'crm-survey-id hiddenElement' },
175 {sClass:'crmf-title' },
176 {sClass:'crm-survey-campaign_id hiddenElement' },
177 {sClass:'crm-survey-campaign' },
178 {sClass:'crm-survey-activity_type_id hiddenElement' },
179 {sClass:'crm-survey-activity_type' },
180 {sClass:'crm-survey-release_frequency' },
181 {sClass:'crm-survey-default_number_of_contacts' },
182 {sClass:'crm-survey-max_number_of_contacts' },
183 {sClass:'crm-survey-is_default' },
184 {sClass:'crm-survey-is_active hiddenElement' },
185 {sClass:'crm-survey-isActive' },
186 {sClass:'crm-survey-result_id', bSortable:false},
187 {sClass:'crm-survey-action', bSortable:false},
188 {sClass:'crm-campaign-voterLinks', bSortable:false}
189 ],
190 "sPaginationType": "full_numbers",
191 "sDom" : 'rt<"crm-datatable-pager-bottom"ip>',
192 "bServerSide": true,
193 "bJQueryUI": true,
194 "sAjaxSource": sourceUrl,
195 "asStripClasses" : [ "odd-row", "even-row" ],
196 "oLanguage":{"sEmptyTable" : noRecordFoundMsg,
197 "sZeroRecords" : noRecordFoundMsg },
198 "fnDrawCallback": function() {
199 CRM.$(this).trigger('crmLoad');
200 },
201 "fnRowCallback": function( nRow, aData, iDisplayIndex ) {
202 // Crm-editable
203 CRM.$(nRow).children().eq(1).addClass('crm-editable');
204 //insert the id for each row for enable/disable.
205 var rowId = 'survey-' + aData[0];
206 CRM.$(nRow).attr( 'id', rowId).addClass('crm-entity');
207 //handled disabled rows.
208 var isActive = Boolean(Number(aData[10]));
209 if ( !isActive ) CRM.$(nRow).addClass( 'disabled' );
210
211 //add id for yes/no column.
212 CRM.$(nRow).children().eq(11).attr( 'id', rowId + '_status' );
213 CRM.$(nRow).children().eq(9).html(CRM.utils.formatIcon('fa-check', ts('Default'), nRow.cells[9].innerText));
214
215 return nRow;
216 },
217
218 "fnServerData": function ( sSource, aoData, fnCallback ) {
219 var dataLength = aoData.length;
220
221 var count = 1;
222 var searchCriteria = [];
223
224 //get the search criteria.
225 var searchParams = {/literal}{$searchParams}{literal};
226 for ( param in searchParams ) {
227 fldName = param;
228 if ( param == 'survey_title' ) fldName = 'title';
229 if ( param == 'survey_campaign_id' ) fldName = 'campaign_id';
230 if ( val = CRM.$( '#' + param ).val( ) ) {
231 aoData[dataLength++] = {name: fldName, value: val};
232 }
233 searchCriteria[count++] = fldName;
234 }
235
236 //do search for surveys.
237 aoData[dataLength++] = {name: 'search_for', value: 'survey'};
238
239 //lets transfer search criteria.
240 aoData[dataLength++] = {name: 'searchCriteria', value:searchCriteria.join(',')};
241
242 CRM.$.ajax( {
243 "dataType": 'json',
244 "type": "POST",
245 "url": sSource,
246 "data": aoData,
247 "success": fnCallback
248 } ); }
249 });
250 }
251
252 function displayResultSet( surveyId, surveyTitle, OptionGroupId ) {
253 var data = new Object;
254 data['option_group_id'] = OptionGroupId;
255 data['survey_id'] = surveyId;
256
257 var dataUrl = {/literal}"{crmURL p='civicrm/ajax/rest' h=0 q='className=CRM_Campaign_Page_AJAX&fnName=loadOptionGroupDetails' }"{literal};
258 var content = '<tr><th>{/literal}{ts escape='js'}Label{/ts}{literal}</th><th>{/literal}{ts escape='js'}Value{/ts}{literal}</th><th>{/literal}{ts escape='js'}Recontact Interval{/ts}{literal}</th><th>{/literal}{ts escape='js'}Order{/ts}{literal}</th></tr>';
259 var setTitle = '{/literal}{ts escape='js'}Result Set for{/ts} {literal}' + surveyTitle;
260
261 CRM.$.post( dataUrl, data, function( opGroup ) {
262 if ( opGroup.status == 'success' ) {
263 var result = opGroup.result;
264 for( key in result ) {
265 var interval = '';
266 if ( result[key].interval && result[key].interval != 'undefined' ) {
267 interval = result[key].interval;
268 }
269 content += '<tr><td>'+ result[key].label +'</td><td>'+ result[key].value +'</td><td>'+ interval +'</td><td>'+ result[key].weight +'</td></tr>';
270 }
271
272 CRM.$("#survey-result-set-dialog").show( ).html('<table>'+content+'</table>').dialog({
273 title: setTitle,
274 modal: true,
275 width: 480,
276 overlay: {
277 opacity: 0.5,
278 background: "black"
279 },
280 beforeclose: function(event, ui) {
281 CRM.$(this).dialog("destroy");
282 }
283 });
284 }
285 }, "json" );
286
287 }
288
289 </script>
290 {/literal}