Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | {* |
2 | +--------------------------------------------------------------------+ | |
39de6fd5 | 3 | | CiviCRM version 4.6 | |
6a488035 | 4 | +--------------------------------------------------------------------+ |
e7112fa7 | 5 | | Copyright CiviCRM LLC (c) 2004-2015 | |
6a488035 TO |
6 | +--------------------------------------------------------------------+ |
7 | | This file is a part of CiviCRM. | | |
8 | | | | |
9 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
10 | | under the terms of the GNU Affero General Public License | | |
11 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | | |
12 | | | | |
13 | | CiviCRM is distributed in the hope that it will be useful, but | | |
14 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
15 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
16 | | See the GNU Affero General Public License for more details. | | |
17 | | | | |
18 | | You should have received a copy of the GNU Affero General Public | | |
19 | | License and the CiviCRM Licensing Exception along | | |
20 | | with this program; if not, contact CiviCRM LLC | | |
21 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
22 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
23 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
24 | +--------------------------------------------------------------------+ | |
25 | *} | |
26 | {if $action eq 2 || $action eq 16} | |
27 | <div class="form-item"> | |
63ef778e | 28 | <div class="crm-accordion-wrapper crm-search_filters-accordion"> |
29 | <div class="crm-accordion-header"> | |
30 | {ts}Filter Contacts{/ts}</a> | |
31 | </div><!-- /.crm-accordion-header --> | |
32 | <div class="crm-accordion-body"> | |
33 | <table class="no-border form-layout-compressed" id="searchOptions" style="width:100%;"> | |
34 | <tr> | |
35 | <td class="crm-contact-form-block-contact1"> | |
36 | <label for="contact1">{ts}Contact 1{/ts}</label><br /> | |
37 | <input type="text" placeholder="Search Contact1" search-column="2" /> | |
38 | </td> | |
39 | <td class="crm-contact-form-block-contact2"> | |
40 | <label for="contact2">{ts}Contact 2{/ts}</label><br /> | |
41 | <input type="text" placeholder="Search Contact2" search-column="5" /> | |
42 | </td> | |
43 | <td class="crm-contact-form-block-email1"> | |
44 | <label for="email1">{ts}Email 1{/ts}</label><br /> | |
45 | <input type="text" placeholder="Search Email1" search-column="3" /> | |
46 | </td> | |
47 | <td class="crm-contact-form-block-email2"> | |
48 | <label for="email2">{ts}Email 2{/ts}</label><br /> | |
49 | <input type="text" placeholder="Search Email2" search-column="6" /> | |
50 | </td> | |
51 | </tr> | |
52 | <tr> | |
53 | <td class="crm-contact-form-block-street-address1"> | |
54 | <label for="street-adddress1">{ts}Street Address 1{/ts}</label><br /> | |
55 | <input type="text" placeholder="Search Street Address1" search-column="7" /> | |
56 | </td> | |
57 | <td class="crm-contact-form-block-street-address2"> | |
58 | <label for="street-adddress2">{ts}Street Address 2{/ts}</label><br /> | |
59 | <input type="text" placeholder="Search Street Address2" search-column="8" /> | |
60 | </td> | |
61 | <td class="crm-contact-form-block-postcode1"> | |
62 | <label for="postcode1">{ts}Postcode 1{/ts}</label><br /> | |
63 | <input type="text" placeholder="Search Postcode1" search-column="9" /> | |
64 | </td> | |
65 | <td class="crm-contact-form-block-postcode2"> | |
66 | <label for="postcode2">{ts}Postcode 2{/ts}</label><br /> | |
67 | <input type="text" placeholder="Search Postcode2" search-column="10" /> | |
68 | </td> | |
69 | </tr> | |
70 | </table> | |
71 | </div><!-- /.crm-accordion-body --> | |
72 | </div><!-- /.crm-accordion-wrapper --> | |
73 | <div> | |
74 | Show / Hide columns: | |
75 | <input type='checkbox' id ='steet-address' class='toggle-vis' data-column-main="7" data-column-dupe="8" > | |
76 | <label for="steet-address">{ts}Street Address{/ts} </label> | |
77 | <input type='checkbox' id ='post-code' class='toggle-vis' data-column-main="9" data-column-dupe="10" > | |
78 | <label for="post-code">{ts}Post Code{/ts} </label> | |
79 | <input type='checkbox' id ='conflicts' class='toggle-vis' data-column-main="11" > | |
80 | <label for="conflicts">{ts}Conflicts{/ts} </label> | |
81 | <input type='checkbox' id ='threshold' class='toggle-vis' data-column-main="12" > | |
82 | <label for="threshold">{ts}Threshold{/ts} </label> | |
83 | </div><br/> | |
84 | <span id="dupePairs_length_selection"> | |
85 | <input type='checkbox' id ='crm-dedupe-display-selection' name="display-selection"> | |
86 | <label for="display-selection">{ts}Within Selections{/ts} </label> | |
87 | </span> | |
88 | <table id="dupePairs" class="nestedActivitySelector form-layout-compressed" cellspacing="0" width="100%"> | |
6a488035 | 89 | <thead> |
63ef778e | 90 | <tr class="columnheader"> |
91 | <th class="crm-dedupe-selection"><input type="checkbox" value="0" name="pnid_all" class="crm-dedupe-select-all"></th> | |
92 | <th class="crm-empty"> </th> | |
93 | <th class="crm-contact">{ts}Contact{/ts} 1</th> | |
94 | <th class="crm-empty"> </th> | |
95 | <th class="crm-contact-duplicate">{ts}Contact{/ts} 2 ({ts}Duplicate{/ts})</th> | |
96 | <th class="crm-contact">{ts}Email{/ts} 1</th> | |
97 | <th class="crm-contact-duplicate">{ts}Email{/ts} 2 ({ts}Duplicate{/ts})</th> | |
98 | <th class="crm-contact">{ts}Street Address{/ts} 1</th> | |
99 | <th class="crm-contact-duplicate">{ts}Street Address{/ts} 2 ({ts}Duplicate{/ts})</th> | |
100 | <th class="crm-contact">{ts}Postcode{/ts} 1</th> | |
101 | <th class="crm-contact-duplicate">{ts}Postcode{/ts} 2 ({ts}Duplicate{/ts})</th> | |
102 | <th class="crm-contact-conflicts">{ts}Conflicts{/ts}</th> | |
103 | <th class="crm-threshold">{ts}Threshold{/ts}</th> | |
104 | <th class="crm-empty"> </th> | |
105 | </tr> | |
6a488035 | 106 | </thead> |
63ef778e | 107 | <tbody> |
108 | </tbody> | |
6a488035 | 109 | </table> |
6a488035 TO |
110 | {if $cid} |
111 | <table style="width: 45%; float: left; margin: 10px;"> | |
112 | <tr class="columnheader"><th colspan="2">{ts 1=$main_contacts[$cid]}Merge %1 with{/ts}</th></tr> | |
113 | {foreach from=$dupe_contacts[$cid] item=dupe_name key=dupe_id} | |
114 | {if $dupe_name} | |
115 | {capture assign=link}<a href="{crmURL p='civicrm/contact/view' q="reset=1&cid=$dupe_id"}">{$dupe_name}</a>{/capture} | |
116 | {capture assign=merge}<a href="{crmURL p='civicrm/contact/merge' q="reset=1&cid=$cid&oid=$dupe_id"}">{ts}merge{/ts}</a>{/capture} | |
117 | <tr class="{cycle values="odd-row,even-row"}"> | |
118 | <td>{$link}</td> | |
119 | <td style="text-align: right">{$merge}</td> | |
aeb97cc1 | 120 | <td style="text-align: right"><a class='crm-notDuplicate' href="#" title={ts}not a duplicate{/ts} onClick="processDupes( {$main.srcID}, {$main.dstID}, 'dupe-nondupe' );return false;">{ts}not a duplicate{/ts}</a></td> |
6a488035 TO |
121 | </tr> |
122 | {/if} | |
123 | {/foreach} | |
124 | </table> | |
125 | {/if} | |
126 | </div> | |
127 | ||
128 | {if $context eq 'search'} | |
aeb97cc1 | 129 | {crmButton href=$backURL icon="close"}{ts}Done{/ts}{/crmButton} |
63ef778e | 130 | {elseif $context eq 'conflicts'} |
fd630ef9 | 131 | {if call_user_func(array('CRM_Core_Permission','check'), 'force merge duplicate contacts')} |
132 | {if $gid} | |
133 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&gid=`$gid`&action=map&mode=aggressive" a=1}{/capture} | |
134 | {else} | |
135 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&action=map&mode=aggressive" a=1}{/capture} | |
136 | {/if} | |
137 | <a href="{$backURL}" title="{ts}Batch Merge Duplicate Contacts{/ts}" onclick="return confirm('{ts escape="js"}This will run the batch merge process on the selected duplicates. The operation will run in force merge mode - all selected duplicates will be merged into main contacts even in case of any conflicts. Click OK to proceed if you are sure you wish to run this operation.{/ts}');" class="button"><span>{ts}Force Merge Selected Duplicates{/ts}</span></a> | |
63ef778e | 138 | |
fd630ef9 | 139 | {if $gid} |
140 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&gid=`$gid`&action=map" a=1}{/capture} | |
141 | {else} | |
142 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&action=map" a=1}{/capture} | |
143 | {/if} | |
144 | <a href="{$backURL}" title="{ts}Batch Merge Duplicate Contacts{/ts}" onclick="return confirm('{ts escape="js"}This will run the batch merge process on the selected duplicates. The operation will run in safe mode - only records with no direct data conflicts will be merged. Click OK to proceed if you are sure you wish to run this operation.{/ts}');" class="button"><span>{ts}Safe Merge Selected Duplicates{/ts}</span></a> | |
63ef778e | 145 | {/if} |
63ef778e | 146 | |
147 | {if $gid} | |
148 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupefind" q="reset=1&action=update&rgid=`$rgid`&gid=`$gid`" a=1}{/capture} | |
149 | {else} | |
150 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupefind" q="reset=1&action=update&rgid=`$rgid`" a=1}{/capture} | |
151 | {/if} | |
152 | <a href="{$backURL}" title="{ts}List All Duplicates{/ts}" class="button"><span>{ts}List All Duplicates{/ts}</span></a> | |
6a488035 TO |
153 | {else} |
154 | {if $gid} | |
155 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupefind" q="reset=1&rgid=`$rgid`&gid=`$gid`&action=renew" a=1}{/capture} | |
156 | {else} | |
157 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupefind" q="reset=1&rgid=`$rgid`&action=renew" a=1}{/capture} | |
158 | {/if} | |
fd66df85 | 159 | <a href="{$backURL}" title="{ts}Refresh List of Duplicates{/ts}" onclick="return confirm('{ts escape="js"}This will refresh the duplicates list. Click OK to proceed.{/ts}');" class="button"> |
aeb97cc1 | 160 | <span><span class="icon ui-icon-refresh"></span> {ts}Refresh Duplicates{/ts}</span> |
fd66df85 | 161 | </a> |
6a488035 TO |
162 | |
163 | {if $gid} | |
63ef778e | 164 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&gid=`$gid`&action=map" a=1}{/capture} |
6a488035 | 165 | {else} |
63ef778e | 166 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&action=map" a=1}{/capture} |
6a488035 | 167 | {/if} |
63ef778e | 168 | <a href="{$backURL}" title="{ts}Batch Merge Duplicate Contacts{/ts}" onclick="return confirm('{ts escape="js"}This will run the batch merge process on the selected duplicates. The operation will run in safe mode - only records with no direct data conflicts will be merged. Click OK to proceed if you are sure you wish to run this operation.{/ts}');" class="button"><span><div class="icon ui-icon-script"></div>{ts}Batch Merge Selected Duplicates{/ts}</span></a> |
169 | ||
170 | {if $gid} | |
171 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`&gid=`$gid`" a=1}{/capture} | |
172 | {else} | |
173 | {capture assign=backURL}{crmURL p="civicrm/contact/dedupemerge" q="reset=1&rgid=`$rgid`" a=1}{/capture} | |
174 | {/if} | |
175 | <a href="{$backURL}" title="{ts}Batch Merge Duplicate Contacts{/ts}" onclick="return confirm('{ts escape="js"}This will run the batch merge process on the listed duplicates. The operation will run in safe mode - only records with no direct data conflicts will be merged. Click OK to proceed if you are sure you wish to run this operation.{/ts}');" class="button"><span><div class="icon ui-icon-script"></div>{ts}Batch Merge All Duplicates{/ts}</span></a> | |
6a488035 | 176 | |
fd630ef9 | 177 | <a href='#' title="{ts}Flip Selected Duplicates{/ts}" class="crm-dedupe-flip-selections button"><span>{ts}Flip Selected Duplicates{/ts}</span></a> |
178 | ||
6a488035 | 179 | {capture assign=backURL}{crmURL p="civicrm/contact/deduperules" q="reset=1" a=1}{/capture} |
fd66df85 CW |
180 | <a href="{$backURL}" class="button crm-button-type-cancel"> |
181 | <span><div class="icon ui-icon-close"></div> {ts}Done{/ts}</span> | |
182 | </a> | |
6a488035 TO |
183 | {/if} |
184 | <div style="clear: both;"></div> | |
185 | {else} | |
186 | {include file="CRM/Contact/Form/DedupeFind.tpl"} | |
187 | {/if} | |
188 | ||
189 | {* process the dupe contacts *} | |
190 | {include file='CRM/common/dedupe.tpl'} | |
191 | {literal} | |
192 | <script type="text/javascript"> | |
63ef778e | 193 | CRM.$(function($) { |
194 | var sourceUrl = {/literal}'{$sourceUrl}'{literal}; | |
195 | var context = {/literal}'{$context}'{literal}; | |
196 | $('#dupePairs').DataTable({ | |
197 | //"scrollX": true, // doesn't work with hover popup for for icons | |
198 | "lengthMenu": [[10, 25, 50, 100, 1000, 2000, -1], [10, 25, 50, 100, 1000, 2000, "All"]], | |
da3afd4a | 199 | "searching" : true, |
63ef778e | 200 | "dom": 'flrtip', |
201 | "processing": true, | |
202 | "serverSide": true, | |
203 | "ajax": sourceUrl, | |
204 | "columns" : [ | |
205 | {data: "is_selected_input"}, | |
206 | {data: "src_image"}, | |
207 | {data: "src"}, | |
208 | {data: "dst_image"}, | |
209 | {data: "dst"}, | |
210 | {data: "src_email"}, | |
211 | {data: "dst_email"}, | |
212 | {data: "src_street"}, | |
213 | {data: "dst_street"}, | |
214 | {data: "src_postcode"}, | |
215 | {data: "dst_postcode"}, | |
fd630ef9 | 216 | { |
217 | data: "conflicts", | |
218 | className: "crm-pair-conflict" | |
219 | }, | |
63ef778e | 220 | {data: "weight"}, |
221 | {data: "actions"}, | |
222 | ], | |
223 | "order": [], // removes default order by for column 1 (checkbox) | |
224 | "columnDefs": [ | |
225 | { | |
226 | "targets": [0, 1, 3, 13], | |
227 | "orderable": false | |
228 | }, | |
229 | { | |
230 | "targets": [7, 8, 9, 10, 11, 12], | |
231 | "visible": false | |
232 | } | |
233 | ], | |
234 | rowCallback: function (row, data) { | |
235 | // Set the checked state of the checkbox in the table | |
236 | $('input.crm-dedupe-select', row).prop('checked', data.is_selected == 1); | |
237 | if (data.is_selected == 1) { | |
238 | $(row).toggleClass('crm-row-selected'); | |
239 | } | |
240 | // for action column at the last, set nowrap | |
241 | $('td:last', row).attr('nowrap','nowrap'); | |
fd630ef9 | 242 | // for conflcts column |
243 | $('td.crm-pair-conflict', row).attr('nowrap','nowrap'); | |
63ef778e | 244 | } |
245 | }); | |
246 | ||
247 | // redraw datatable if searching within selected records | |
248 | $('#crm-dedupe-display-selection').on('click', function(){ | |
249 | reloadUrl = sourceUrl; | |
250 | if($(this).prop('checked')){ | |
251 | reloadUrl = sourceUrl+'&selected=1'; | |
252 | } | |
253 | $('#dupePairs').DataTable().ajax.url(reloadUrl).draw(); | |
254 | }); | |
255 | ||
256 | $('#dupePairs_length_selection').appendTo('#dupePairs_length'); | |
257 | ||
258 | // apply selected class on click of a row | |
fd630ef9 | 259 | $('#dupePairs tbody').on('click', 'tr', function(e) { |
63ef778e | 260 | $(this).toggleClass('crm-row-selected'); |
261 | $('input.crm-dedupe-select', this).prop('checked', $(this).hasClass('crm-row-selected')); | |
262 | var ele = $('input.crm-dedupe-select', this); | |
263 | toggleDedupeSelect(ele, 0); | |
264 | }); | |
fd630ef9 | 265 | |
266 | // when select-all checkbox is checked | |
63ef778e | 267 | $('#dupePairs thead tr .crm-dedupe-selection').on('click', function() { |
268 | var checked = $('.crm-dedupe-select-all').prop('checked'); | |
269 | if (checked) { | |
270 | $("#dupePairs tbody tr input[type='checkbox']").prop('checked', true); | |
271 | $("#dupePairs tbody tr").addClass('crm-row-selected'); | |
272 | } | |
273 | else{ | |
274 | $("#dupePairs tbody tr input[type='checkbox']").prop('checked', false); | |
275 | $("#dupePairs tbody tr").removeClass('crm-row-selected'); | |
276 | } | |
277 | var ele = $('#dupePairs tbody tr'); | |
278 | toggleDedupeSelect(ele, 1); | |
279 | }); | |
280 | ||
281 | // inline search boxes placed in tfoot | |
282 | $('#dupePairsColFilters thead th').each( function () { | |
283 | var title = $('#dupePairs thead th').eq($(this).index()).text(); | |
284 | if (title.length > 1) { | |
285 | $(this).html( '<input type="text" placeholder="Search '+title+'" />' ); | |
286 | } | |
287 | }); | |
288 | ||
289 | // apply dataTable | |
290 | var table = $('#dupePairs').DataTable(); | |
291 | ||
292 | // apply the search | |
293 | $('#searchOptions input').on( 'keyup change', function () { | |
294 | table | |
295 | .column($(this).attr('search-column')) | |
296 | .search(this.value) | |
297 | .draw(); | |
298 | }); | |
299 | ||
300 | // show / hide columns | |
301 | $('input.toggle-vis').on('click', function (e) { | |
302 | var column = table.column( $(this).attr('data-column-main') ); | |
303 | column.visible( ! column.visible() ); | |
304 | ||
fd630ef9 | 305 | // nowrap to conflicts column is applied only during initial rendering |
306 | // for show / hide clicks we need to set it explicitly | |
307 | $('#dupePairs tbody td.crm-pair-conflict').attr('nowrap', 'nowrap'); | |
308 | ||
63ef778e | 309 | if ($(this).attr('data-column-dupe')) { |
310 | column = table.column( $(this).attr('data-column-dupe') ); | |
311 | column.visible( ! column.visible() ); | |
312 | } | |
313 | }); | |
314 | ||
fd630ef9 | 315 | // keep the conflicts checkbox checked when context is "conflicts" |
63ef778e | 316 | if(context == 'conflicts') { |
317 | $('#conflicts').attr('checked', true); | |
318 | var column = table.column( $('#conflicts').attr('data-column-main') ); | |
319 | column.visible( ! column.visible() ); | |
320 | } | |
fd630ef9 | 321 | |
322 | // on click of flip link of a row | |
323 | $('#dupePairs tbody').on('click', 'tr .crm-dedupe-flip', function(e) { | |
324 | e.stopPropagation(); | |
325 | var $el = $(this); | |
326 | var $elTr = $(this).closest('tr'); | |
327 | var postUrl = {/literal}"{crmURL p='civicrm/ajax/flipDupePairs' h=0 q='snippet=4'}"{literal}; | |
328 | var request = $.post(postUrl, {pnid : $el.data('pnid')}); | |
329 | request.done(function(dt) { | |
330 | var mapper = {2:4, 5:6, 7:8, 9:10} | |
331 | var idx = table.row($elTr).index(); | |
332 | $.each(mapper, function(key, val) { | |
333 | var v1 = table.cell(idx, key).data(); | |
334 | var v2 = table.cell(idx, val).data(); | |
335 | table.cell(idx, key).data(v2); | |
336 | table.cell(idx, val).data(v1); | |
337 | }); | |
338 | // keep the checkbox checked if needed | |
339 | $('input.crm-dedupe-select', $elTr).prop('checked', $elTr.hasClass('crm-row-selected')); | |
340 | }); | |
341 | }); | |
342 | ||
343 | $(".crm-dedupe-flip-selections").on('click', function(e) { | |
344 | var ids = []; | |
345 | $('.crm-row-selected').each(function() { | |
346 | var ele = CRM.$('input.crm-dedupe-select', this); | |
347 | ids.push(CRM.$(ele).attr('name').substr(5)); | |
348 | }); | |
349 | if (ids.length > 0) { | |
350 | var dataUrl = {/literal}"{crmURL p='civicrm/ajax/flipDupePairs' h=0 q='snippet=4'}"{literal}; | |
351 | CRM.$.post(dataUrl, {pnid: ids}, function (response) { | |
352 | var mapper = {2:4, 5:6, 7:8, 9:10} | |
353 | $('.crm-row-selected').each(function() { | |
354 | var idx = table.row(this).index(); | |
355 | $.each(mapper, function(key, val) { | |
356 | var v1 = table.cell(idx, key).data(); | |
357 | var v2 = table.cell(idx, val).data(); | |
358 | table.cell(idx, key).data(v2); | |
359 | table.cell(idx, val).data(v1); | |
360 | }); | |
361 | // keep the checkbox checked if needed | |
362 | $('input.crm-dedupe-select', this).prop('checked', $(this).hasClass('crm-row-selected')); | |
363 | }); | |
364 | }, 'json'); | |
365 | } | |
366 | }); | |
63ef778e | 367 | }); |
368 | ||
369 | function toggleDedupeSelect(element, isMultiple) { | |
370 | if (!isMultiple) { | |
371 | var is_selected = CRM.$(element).prop('checked') ? 1: 0; | |
372 | var id = CRM.$(element).prop('name').substr(5); | |
373 | } | |
374 | else { | |
375 | var id = []; | |
376 | CRM.$(element).each(function() { | |
377 | var sth = CRM.$('input.crm-dedupe-select', this); | |
378 | id.push(CRM.$(sth).prop('name').substr(5)); | |
379 | }); | |
380 | var is_selected = CRM.$('.crm-dedupe-select-all').prop('checked') ? 1 : 0; | |
381 | } | |
382 | ||
383 | var dataUrl = {/literal}"{crmURL p='civicrm/ajax/toggleDedupeSelect' h=0 q='snippet=4'}"{literal}; | |
384 | var rgid = {/literal}"{$rgid}"{literal}; | |
385 | var gid = {/literal}"{$gid}"{literal}; | |
386 | ||
387 | rgid = rgid.length > 0 ? rgid : 0; | |
388 | gid = gid.length > 0 ? gid : 0; | |
389 | ||
390 | CRM.$.post(dataUrl, {pnid: id, rgid: rgid, gid: gid, is_selected: is_selected}, function (data) { | |
391 | // nothing to do for now | |
392 | }, 'json'); | |
393 | } | |
6a488035 TO |
394 | </script> |
395 | {/literal} |