]> git.agnieray.net Git - galette.git/blob - galette/templates/default/gestion_adherents.tpl
Add member number; closes #190
[galette.git] / galette / templates / default / gestion_adherents.tpl
1 {extends file="page.tpl"}
2
3
4 {function name=draw_actions}
5 <td class="{$rclass} center nowrap actions_row">
6 <a
7 href="{path_for name="editMember" data=["id" => $member->id]}"
8 class="tooltip action"
9 >
10 <i class="fas fa-user-edit fa-fw" aria-hidden="true"></i>
11 <span class="sr-only">{_T string="%membername: edit information" pattern="/%membername/" replace=$member->sname}</span>
12 </a>
13 {if $login->isAdmin() or $login->isStaff()}
14 <a
15 href="{path_for name="contributions" data=["type" => "contributions", "option" => "member", "value" => $member->id]}"
16 class="tooltip"
17 >
18 <i class="fas fa-cookie fa-fw" aria-hidden="true"></i>
19 <span class="sr-only">{_T string="%membername: contributions" pattern="/%membername/" replace=$member->sname}</span>
20 </a>
21 <a
22 href="{path_for name="removeMember" data=["id" => $member->id]}"
23 class="delete tooltip"
24 >
25 <i class="fas fa-user-times fa-fw" aria-hidden="true"></i>
26 <span class="sr-only">{_T string="%membername: remove from database" pattern="/%membername/" replace=$member->sname}</span>
27 </a>
28 {/if}
29 {if $login->isSuperAdmin()}
30 <a
31 href="{path_for name="impersonate" data=["id" => $member->id]}"
32 class="tooltip"
33 >
34 <i class="fas fa-user-secret fa-fw" aria-hidden="true"></i>
35 <span class="sr-only">{_T string="Log in in as %membername" pattern="/%membername/" replace=$member->sname}</span>
36 </a>
37 {/if}
38 {* If some additionnals actions should be added from plugins, we load the relevant template file
39 We have to use a template file, so Smarty will do its work (like replacing variables). *}
40 {if $plugin_actions|@count != 0}
41 {foreach from=$plugin_actions key=plugin_name item=action}
42 {include file=$action module_id=$plugin_name|replace:'actions_':''}
43 {/foreach}
44 {/if}
45 </td>
46 {/function}
47
48 {block name="content"}
49 <form action="{path_for name="filter-memberslist"}" method="post" id="filtre">
50 <div id="listfilter">
51 {if !isset($adv_filters) || !$adv_filters}
52 <label for="filter_str">{_T string="Search:"}&nbsp;</label>
53 <input type="text" name="filter_str" id="filter_str" value="{$filters->filter_str}" type="search" placeholder="{_T string="Enter a value"}"/>&nbsp;
54 {_T string="in:"}&nbsp;
55 <select name="field_filter">
56 {html_options options=$field_filter_options selected=$filters->field_filter}
57 </select>
58 {_T string="among:"}&nbsp;
59 <select name="membership_filter" onchange="form.submit()">
60 {html_options options=$membership_filter_options selected=$filters->membership_filter}
61 </select>
62 <select name="filter_account" onchange="form.submit()">
63 {html_options options=$filter_accounts_options selected=$filters->filter_account}
64 </select>
65 <select name="group_filter" onchange="form.submit()">
66 <option value="0">{_T string="Select a group"}</option>
67 {foreach from=$filter_groups_options item=group}
68 <option value="{$group->getId()}"{if $filters->group_filter eq $group->getId()} selected="selected"{/if}>{$group->getIndentName()}</option>
69 {/foreach}
70 </select>
71 <button type="submit" class="tooltip action" title="{_T string="Apply filters"}" name="filter">
72 <i class="fa fa-search"></i>
73 {_T string="Filter"}
74 </button>
75 <button type="submit" class="tooltip action" title="{_T string="Save selected criteria"}" name="savesearch" id="savesearch">
76 <i class="fa fa-fw fa-save"></i>
77 {_T string="Save"}
78 </button>
79 <input type="submit" name="clear_filter" class="inline tooltip" value="{_T string="Clear filter"}" title="{_T string="Reset all filters to defaults"}"/>
80 <div>
81 {_T string="Members that have an email address:"}
82 <input type="radio" name="email_filter" id="filter_dc_email" value="{Galette\Repository\Members::FILTER_DC_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_DC_EMAIL')} checked="checked"{/if}>
83 <label for="filter_dc_email" >{_T string="Don't care"}</label>
84 <input type="radio" name="email_filter" id="filter_with_email" value="{Galette\Repository\Members::FILTER_W_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_W_EMAIL')} checked="checked"{/if}>
85 <label for="filter_with_email" >{_T string="With"}</label>
86 <input type="radio" name="email_filter" id="filter_without_email" value="{Galette\Repository\Members::FILTER_WO_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_WO_EMAIL')} checked="checked"{/if}>
87 <label for="filter_without_email" >{_T string="Without"}</label>
88 </div>
89 {else}
90 <p>
91 <strong>{_T string="Advanced search mode"}</strong>
92 <button type="submit" class="tooltip action" title="{_T string="Change search criteria"}" name="adv_criteria">
93 <i class="fa fa-edit"></i>
94 {_T string="Change criteria"}
95 </button>
96 <button type="submit" class="tooltip action" title="{_T string="Save current advanced search criteria"}" name="savesearch" id="savesearch">
97 <i class="fa fa-fw fa-save"></i>
98 {_T string="Save"}
99 </button>
100 <input type="hidden" name="advanced_search" value="1"/>
101 <input type="submit" name="clear_filter" class="inline tooltip" value="{_T string="Clear filter"}" title="{_T string="Reset all filters to defaults"}"/>
102 <br/>
103 <a href="#" id="showhideqry">{_T string="Show/hide query"}</a>
104 </p>
105 <pre id="sql_qry" class="hidden">{$filters->query}</pre>
106 {/if}
107 </div>
108 <div class="infoline">
109 {_T string="%count member" plural="%count members" count=$nb_members pattern="/%count/" replace=$nb_members}
110 <div class="fright">
111 <label for="nbshow">{_T string="Records per page:"}</label>
112 <select name="nbshow" id="nbshow">
113 {html_options options=$nbshow_options selected=$numrows}
114 </select>
115 <noscript> <span><input type="submit" value="{_T string="Change"}" /></span></noscript>
116 </div>
117 </div>
118 </form>
119 <form action="{path_for name="batch-memberslist"}" method="post" id="listform">
120
121 <table class="listing">
122 <thead>
123 <tr>
124 {foreach item=column from=$galette_list}
125 {if $column->field_id eq 'id_adh'}
126 {if $preferences->pref_show_id}
127 <th class="id_row">
128 <a href="{path_for name="members" data=["option" => "order", "value" => "Galette\Repository\Members::ORDERBY_ID"|constant]}">
129 {_T string="Mbr id"}
130 {if $filters->orderby eq constant('galette\Repository\Members::ORDERBY_ID')}
131 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
132 <img src="{base_url}/{$template_subdir}images/down.png" width="10" height="6" alt=""/>
133 {else}
134 <img src="{base_url}/{$template_subdir}images/up.png" width="10" height="6" alt=""/>
135 {/if}
136 {/if}
137 </a>
138 </th>
139 {else}
140 <th class="id_row">#</th>
141 {/if}
142 {else}
143 <th class="left">
144 <a href="{path_for name="members" data=["option" => "order", "value" => $column->field_id]}">
145 {$column->label}
146 {if $filters->orderby eq $column->field_id}
147 {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
148 <img src="{base_url}/{$template_subdir}images/down.png" width="10" height="6" alt=""/>
149 {else}
150 <img src="{base_url}/{$template_subdir}images/up.png" width="10" height="6" alt=""/>
151 {/if}
152 {/if}
153 </a>
154 </th>
155 {/if}
156 {/foreach}
157 <th class="actions_row">{_T string="Actions"}</th>
158 </tr>
159 </thead>
160 <tbody>
161 {foreach from=$members item=member key=ordre}
162 {assign var=rclass value=$member->getRowClass() }
163 <tr>
164 {foreach item=column from=$galette_list}
165 {if $column->field_id eq 'id_adh'}
166 <td class="{$rclass} right" data-scope="id">
167 {if $preferences->pref_show_id}
168 {$member->id}
169 {else}
170 {$ordre+1+($filters->current_page - 1)*$numrows}
171 {/if}
172 </td>
173 {elseif $column->field_id eq 'list_adh_name'}
174 <td class="{$rclass} nowrap username_row" data-scope="row">
175 <input type="checkbox" name="member_sel[]" value="{$member->id}"/>
176 {if $member->isCompany()}
177 <span class="tooltip">
178 <img src="{base_url}/{$template_subdir}images/icon-company.png" alt="" width="16" height="16"/>
179 <span class="sr-only">{_T string="Is a company"}</span>
180 </span>
181 {elseif $member->isMan()}
182 <span class="tooltip">
183 <img src="{base_url}/{$template_subdir}images/icon-male.png" alt="" width="16" height="16"/>
184 <span class="sr-only">{_T string="Is a man"}</span>
185 </span>
186 {elseif $member->isWoman()}
187 <span class="tooltip">
188 <img src="{base_url}/{$template_subdir}images/icon-female.png" alt="" width="16" height="16"/>
189 <span class="sr-only">{_T string="Is a woman"}</span>
190 </span>
191 {else}
192 <img src="{base_url}/{$template_subdir}images/icon-empty.png" alt="" width="16" height="16"/>
193 {/if}
194 {if $member->email != ''}
195 <a href="mailto:{$member->email}" class="tooltip">
196 <img src="{base_url}/{$template_subdir}images/icon-mail.png" alt="" width="16" height="16"/>
197 <span class="sr-only">{_T string="Mail"}</span>
198 </a>
199 {else}
200 <img src="{base_url}/{$template_subdir}images/icon-empty.png" alt="" width="16" height="16"/>
201 {/if}
202 {if $member->isAdmin()}
203 <span class="tooltip">
204 <img src="{base_url}/{$template_subdir}images/icon-star.png" alt="" width="16" height="16"/>
205 <span class="sr-only">{_T string="Admin"}</span>
206 </span>
207 {elseif $member->isStaff()}
208 <span class="tooltip">
209 <img src="{base_url}/{$template_subdir}images/icon-staff.png" alt="" width="16" height="16"/>
210 <span class="sr-only">{_T string="Staff member"}</span>
211 </span>
212 {else}
213 <img src="{base_url}/{$template_subdir}images/icon-empty.png" alt="" width="16" height="16"/>
214 {/if}
215 {assign var="mid" value=$member->id}
216 <a href="{path_for name="member" data=["id" => $member->id]}">{$member->sname}{if $member->company_name} ({$member->company_name|escape}){/if}</a>
217 </td>
218 {else}
219 {assign var="lrclass" value=$rclass}
220 {assign var="propname" value=$column->propname}
221 {assign var="propvalue" value=$member->$propname}
222 {assign var="value" value=null}
223
224 {if $column->field_id eq 'nom_adh'}
225 {assign var="value" value=$member->sfullname}
226 {elseif $column->field_id eq 'pseudo_adh'}
227 {assign var="lrclass" value="$rclass nowrap"}
228 {assign var=value value=$member->$propname|escape}
229 {elseif $column->field_id eq 'tel_adh' or $column->field_id eq 'gsm_adh'}
230 {assign var="lrclass" value="$rclass nowrap"}
231 {elseif $column->field_id eq 'id_statut'}
232 {assign var="lrclass" value="$rclass nowrap"}
233 {assign var=value value={statusLabel id=$member->$propname}}
234 {elseif $column->field_id eq 'titre_adh'}
235 {if is_object($member->title)}
236 {assign var=value value=$member->title->long}
237 {/if}
238 {elseif $column->field_id eq 'pref_lang'}
239 {assign var="value" value=$i18n->getNameFromId($member->language)}
240 {elseif $column->field_id eq 'adresse_adh'}
241 {assign var="value" value=$member->saddress|nl2br}
242 {elseif $column->field_id eq 'bool_display_info'}
243 {assign var="value" value=$member->sappears_in_list}
244 {elseif $column->field_id eq 'activite_adh'}
245 {assign var="value" value=$member->sactive}
246 {elseif $column->field_id eq 'id_statut'}
247 {assign var="value" value=$member->sstatus}
248 {elseif $column->field_id eq 'bool_admin_adh'}
249 {assign var="value" value=$member->sadmin}
250 {elseif $column->field_id eq 'bool_exempt_adh'}
251 {assign var="value" value=$member->sdue_free}
252 {elseif $column->field_id eq 'sexe_adh'}
253 {assign var="value" value=$member->sgender}
254 {/if}
255
256 {* If value has not been set, take the generic value *}
257 {if !$value}
258 {if $propvalue}
259 {assign var=value value=$propvalue|escape}
260 {else}
261 {assign var=value value=$propvalue}
262 {/if}
263 {else}
264 {assign var=value value=$value|escape}
265 {/if}
266
267 <td class="{$lrclass}" data-title="{$column->label}">
268 {* Display column.
269 A check is done here to adapt display, this is may not the best way to go
270 but for notw, that works as excpected.
271 *}
272 {if not empty($value)}
273 {if $column->field_id eq 'email_adh'}
274 <a href="mailto:{$value}">{$value}</a>
275 {elseif $column->field_id eq 'tel_adh' or $column->field_id eq 'gsm_adh'}
276 <a href="tel:{$value}">{$value}</a>
277 {elseif $column->field_id eq 'parent_id'}
278 <a href="{path_for name="member" data=["id" => $member->parent]}">{memberName id=$member->parent}</a>
279 {elseif $column->field_id eq 'ddn_adh'}
280 {$value} {$member->getAge()}
281 {else}
282 {$value}
283 {/if}
284 {/if}
285 </td>
286 {/if}
287 {/foreach}
288 {draw_actions class=$rclass member=$member login=$login plugin_actions=$plugin_actions}
289 </tr>
290 {foreachelse}
291 {* colspan +1 for actions column *}
292 <tr><td colspan="{$galette_list|count + 1}" class="emptylist">{_T string="No member has been found"}</td></tr>
293 {/foreach}
294 </tbody>
295 </table>
296 {if $nb_members != 0}
297 <div class="center cright">
298 {_T string="Pages:"}<br/>
299 <ul class="pages">{$pagination}</ul>
300 </div>
301 <ul class="selection_menu">
302 <li>{_T string="For the selection:"}</li>
303 {if $login->isAdmin() or $login->isStaff()}
304 <li>
305 <button type="submit" id="delete" name="delete">
306 <i class="fas fa-user-times fa-fw"></i> {_T string="Delete"}
307 </button>
308 </li>
309 <li>
310 <button type="submit" id="masschange" name="masschange" class="action">
311 <i class="fas fa-user-edit fa-fw"></i> {_T string="Mass change"}
312 </button>
313 </li>
314 <li>
315 <button type="submit" id="masscontributions" name="masscontributions" class="action">
316 <i class="fas fa-cookie-bite fa-fw"></i> {_T string="Mass add contributions"}
317 </button>
318 </li>
319 {if $pref_mail_method neq constant('Galette\Core\GaletteMail::METHOD_DISABLED')}
320 <li>
321 <button type="submit" id="sendmail" name="mailing">
322 <i class="fas fa-mail-bulk fa-fw"></i> {_T string="Mail"}
323 </button>
324 </li>
325 {/if}
326 {/if}
327 <li>
328 <button type="submit" id="attendance_sheet" name="attendance_sheet">
329 <i class="fas fa-file-alt fa-fw"></i> {_T string="Attendance sheet"}
330 </button>
331 </li>
332 <li>
333 <button type="submit" id="labels" name="labels">
334 <i class="far fa-address-card fa-fw"></i> {_T string="Generate labels"}
335 </button>
336 </li>
337 <li>
338 <button type="submit" id="cards" name="cards">
339 <i class="fas fa-id-badge fa-fw"></i> {_T string="Generate Member Cards"}
340 </button>
341 </li>
342 {if $login->isAdmin() or $login->isStaff()}
343 <li>
344 <button type="submit" id="csv" name="csv">
345 <i class="fas fa-file-csv fa-fw"></i> {_T string="Export as CSV"}
346 </button>
347 </li>
348 {/if}
349 {if $plugin_batch_actions|@count != 0}
350 {foreach from=$plugin_batch_actions key=plugin_name item=action}
351 {include file=$action module_id=$plugin_name|replace:'batch_action_':''}
352 {/foreach}
353 {/if}
354 </ul>
355 {/if}
356
357 </form>
358 {if $nb_members != 0}
359 <div id="legende" title="{_T string="Legend"}">
360 <h1>{_T string="Legend"}</h1>
361 <table>
362 <tbody>
363 <tr>
364 <th class="" colspan="4">{_T string="Reading the list"}</th>
365 </tr>
366 <tr>
367 <th class="back">{_T string="Name"}</th>
368 <td class="back">{_T string="Active account"}</td>
369 <th class="inactif back">{_T string="Name"}</th>
370 <td class="back">{_T string="Inactive account"}</td>
371 </tr>
372 <tr>
373 <th class="cotis-ok color-sample">&nbsp;</th>
374 <td class="back">{_T string="Membership in order"}</td>
375 <th class="cotis-soon color-sample">&nbsp;</th>
376 <td class="back">{_T string="Membership will expire soon (&lt;30d)"}</td>
377 </tr>
378 <tr>
379 <th class="cotis-never color-sample">&nbsp;</th>
380 <td class="back">{_T string="Never contributed"}</td>
381 <th class="cotis-late color-sample">&nbsp;</th>
382 <td class="back">{_T string="Lateness in fee"}</td>
383 </tr>
384 </tbody>
385 <tbody>
386 <tr>
387 <th class="" colspan="4">{_T string="Actions"}</th>
388 </tr>
389 <tr>
390 <th class="action">
391 <i class="fas fa-user-edit fa-fw"></i>
392 </th>
393 <td class="back">{_T string="Modification"}</td>
394 <th>
395 <i class="fas fa-cookie fa-fw"></i>
396 </th>
397 <td class="back">{_T string="Contributions"}</td>
398 </tr>
399 <tr>
400 <th class="delete">
401 <i class="fas fa-user-times fa-fw"></i>
402 </th>
403 <td class="back">{_T string="Deletion"}</td>
404 </tr>
405 </tbody>
406 <tbody>
407 <tr>
408 <th colspan="4">{_T string="User status/interactions"}</th>
409 </tr>
410 <tr>
411 <th><img src="{base_url}/{$template_subdir}images/icon-mail.png" alt="{_T string="Mail"}" width="16" height="16"/></th>
412 <td class="back">{_T string="Send an email"}</td>
413 <th><img src="{base_url}/{$template_subdir}images/icon-company.png" alt="{_T string="Is a company"}" width="16" height="16"/></th>
414 <td class="back">{_T string="Is a company"}</td>
415 </tr>
416
417 <tr>
418 <th><img src="{base_url}/{$template_subdir}images/icon-male.png" alt="{_T string="Is a man"}" width="16" height="16"/></th>
419 <td class="back">{_T string="Is a man"}</td>
420 <th><img src="{base_url}/{$template_subdir}images/icon-female.png" alt="{_T string="Is a woman"}" width="16" height="16"/></th>
421 <td class="back">{_T string="Is a woman"}</td>
422 </tr>
423 <tr>
424 <th><img src="{base_url}/{$template_subdir}images/icon-star.png" alt="{_T string="Admin"}" width="16" height="16"/></th>
425 <td class="back">{_T string="Admin"}</td>
426 <th><img src="{base_url}/{$template_subdir}images/icon-staff.png" alt="{_T string="Staff member"}" width="16" height="16"/></th>
427 <td class="back">{_T string="Staff member"}</td>
428
429 </tr>
430 </tbody>
431 </table>
432 </div>
433 {/if}
434 {/block}
435
436 {block name="javascripts"}
437 <script type="text/javascript">
438 {if $nb_members != 0}
439 var _checkselection = function() {
440 var _checkeds = $('table.listing').find('input[type=checkbox]:checked').length;
441 if ( _checkeds == 0 ) {
442 var _el = $('<div id="pleaseselect" title="{_T string="No member selected" escape="js"}">{_T string="Please make sure to select at least one member from the list to perform this action." escape="js"}</div>');
443 _el.appendTo('body').dialog({
444 modal: true,
445 buttons: {
446 Ok: function() {
447 $(this).dialog( "close" );
448 }
449 },
450 close: function(event, ui){
451 _el.remove();
452 }
453 });
454 return false;
455 }
456 return true;
457 }
458 {/if}
459 {* Use of Javascript to draw specific elements that are not relevant is JS is inactive *}
460 $(function(){
461 {if $nb_members != 0}
462 var _checklinks = '<div class="checkboxes"><span class="fleft"><a href="#" class="checkall tooltip"><i class="fas fa-check-square"></i> {_T string="(Un)Check all" escape="js"}</a> | <a href="#" class="checkinvert tooltip"><i class="fas fa-exchange-alt"></i> {_T string="Invert selection" escape="js"}</a></span><a href="#" class="show_legend fright">{_T string="Show legend" escape="js"}</a></div>';
463 $('.listing').before(_checklinks);
464 $('.listing').after(_checklinks);
465 _bind_check();
466 _bind_legend();
467
468 $('.selection_menu *[type="submit"], .selection_menu *[type="button"]').click(function(event){
469 if ( this.id == 'delete' || this.id == 'masschange' ) {
470 //mass removal is handled from 2 steps removal
471 //mass change is specifically handled below
472 return;
473 }
474
475 if (!_checkselection()) {
476 return false;
477 } else {
478 {if $existing_mailing eq true}
479 if (this.id == 'sendmail') {
480 var _el = $('<div id="existing_mailing" title="{_T string="Existing mailing" escape="js"}">{_T string="A mailing already exists. Do you want to create a new one or resume the existing?" escape="js"}</div>');
481 _el.appendTo('body').dialog({
482 modal: true,
483 hide: 'fold',
484 width: '25em',
485 height: 150,
486 close: function(event, ui){
487 _el.remove();
488 },
489 buttons: {
490 '{_T string="Resume"}': function() {
491 $(this).dialog( "close" );
492 location.href = '{path_for name="mailing"}';
493 },
494 '{_T string="New"}': function() {
495 $(this).dialog( "close" );
496 //add required controls to the form, change its action URI, and send it.
497 var _form = $('#listform');
498 _form.append($('<input type="hidden" name="mailing_new" value="true"/>'));
499 _form.append($('<input type="hidden" name="mailing" value="true"/>'));
500 _form.submit();
501 }
502 }
503 });
504 return false;
505 }
506 {/if}
507 if (this.id == 'attendance_sheet') {
508 _attendance_sheet_details();
509 return false;
510 }
511
512 if (this.id == 'masscontributions') {
513 $.ajax({
514 url: '{path_for name="batch-memberslist"}',
515 type: "POST",
516 data: {
517 ajax: true,
518 masscontributions: true,
519 member_sel: $('#listform input[type=\"checkbox\"]:checked').map(function(){
520 return $(this).val();
521 }).get()
522 },
523 datatype: 'json',
524 {include file="js_loader.tpl"},
525 success: function(res){
526 var _res = $(res);
527 _bindmassres(_res);
528 $('body').append(_res);
529
530 _initTooltips('#mass_contributions');
531 _massCheckboxes('#mass_contributions');
532
533 _res.dialog({
534 width: 'auto',
535 modal: true,
536 close: function(event, ui){
537 $(this).dialog('destroy').remove()
538 }
539 });
540 },
541 error: function() {
542 alert("{_T string="An error occurred :(" escape="js"}");
543 }
544 });
545 }
546
547 return true;
548 }
549 });
550 {/if}
551 if ( _shq = $('#showhideqry') ) {
552 _shq.click(function(){
553 $('#sql_qry').toggleClass('hidden');
554 return false;
555 });
556 }
557
558 $('#savesearch').on('click', function(e) {
559 e.preventDefault();
560
561 var _el = $('<div id="savedsearch_details" title="{_T string="Search title" escape="js"}"><input type="text" name="search_title" id="search_title"/></div>');
562 _el.appendTo('body').dialog({
563 modal: true,
564 hide: 'fold',
565 width: '40%',
566 height: 200,
567 close: function(event, ui){
568 _el.remove();
569 },
570 buttons: {
571 '{_T string="Ok" escape="js"}': function() {
572 var _form = $('#filtre');
573 var _data = _form.serialize();
574 _data = _data + "&search_title=" + $('#search_title').val();
575 $.ajax({
576 url: '{path_for name="saveSearch"}',
577 type: "POST",
578 data: _data,
579 datatype: 'json',
580 {include file="js_loader.tpl"},
581 success: function(res) {
582 $.ajax({
583 url: '{path_for name="ajaxMessages"}',
584 method: "GET",
585 success: function (message) {
586 $('#asso_name').after(message);
587 }
588 });
589 }
590 });
591
592 $(this).dialog( "close" );
593 },
594 '{_T string="Cancel" escape="js"}': function() {
595 $(this).dialog( "close" );
596 }
597 }
598 });
599 });
600
601 });
602 {if $nb_members != 0}
603 {include file="js_removal.tpl"}
604 {include file="js_removal.tpl" selector="#delete" deleteurl="'{path_for name="batch-memberslist"}'" extra_check="if (!_checkselection()) {ldelim}return false;{rdelim}" extra_data="delete: true, member_sel: $('#listform input[type=\"checkbox\"]:checked').map(function(){ return $(this).val(); }).get()" method="POST"}
605
606 var _bindmassres = function(res) {
607 res.find('#btncancel')
608 .button()
609 .on('click', function(e) {
610 e.preventDefault();
611 res.dialog('close');
612 });
613
614 res.find('input[type=submit]')
615 .button();
616
617 res.find('select:not(.nochosen)').selectize({
618 maxItems: 1
619 });
620 }
621
622 $('#masschange').off('click').on('click', function(event) {
623 event.preventDefault();
624 var _this = $(this);
625
626 if (!_checkselection()) {
627 return false;
628 }
629 $.ajax({
630 url: '{path_for name="batch-memberslist"}',
631 type: "POST",
632 data: {
633 ajax: true,
634 masschange: true,
635 member_sel: $('#listform input[type=\"checkbox\"]:checked').map(function(){
636 return $(this).val();
637 }).get()
638 },
639 datatype: 'json',
640 {include file="js_loader.tpl"},
641 success: function(res){
642 var _res = $(res);
643 _bindmassres(_res);
644
645 _res.find('form').on('submit', function(e) {
646 e.preventDefault();
647 var _form = $(this);
648 var _data = _form.serialize();
649 $.ajax({
650 url: _form.attr('action'),
651 type: "POST",
652 data: _data,
653 datatype: 'json',
654 {include file="js_loader.tpl"},
655 success: function(html) {
656 var _html = $(html);
657 _bindmassres(_html);
658
659 $('#mass_change').remove();
660 $('body').append(_html);
661
662 _initTooltips('#mass_change');
663 //_massCheckboxes('#mass_change');
664
665 _html.dialog({
666 width: 'auto',
667 modal: true,
668 close: function(event, ui){
669 $(this).dialog('destroy').remove()
670 }
671 });
672
673 _html.find('form').on('submit', function(e) {
674 e.preventDefault();
675 var _form = $(this);
676 var _data = _form.serialize();
677 $.ajax({
678 url: _form.attr('action'),
679 type: "POST",
680 data: _data,
681 datatype: 'json',
682 {include file="js_loader.tpl"},
683 success: function(res) {
684 if (res.success) {
685 window.location.href = _form.find('input[name=redirect_uri]').val();
686 } else {
687 $.ajax({
688 url: '{path_for name="ajaxMessages"}',
689 method: "GET",
690 success: function (message) {
691 $('#asso_name').after(message);
692 }
693 });
694 }
695 }
696 });
697 });
698 },
699 error: function() {
700 alert("{_T string="An error occurred :(" escape="js"}");
701 }
702 });
703 });
704
705 $('body').append(_res);
706
707 _initTooltips('#mass_change');
708 _massCheckboxes('#mass_change');
709
710 _res.dialog({
711 width: 'auto',
712 modal: true,
713 close: function(event, ui){
714 $(this).dialog('destroy').remove()
715 }
716 });
717 },
718 error: function() {
719 alert("{_T string="An error occurred :(" escape="js"}");
720 }
721 });
722 });
723
724 var _attendance_sheet_details = function(){
725 var _selecteds = [];
726 $('table.listing').find('input[type=checkbox]:checked').each(function(){
727 _selecteds.push($(this).val());
728 });
729 $.ajax({
730 url: '{path_for name="attendance_sheet_details"}',
731 type: "POST",
732 data: {
733 ajax: true,
734 selection: _selecteds
735 },
736 dataType: 'html',
737 success: function(res){
738 var _el = $('<div id="attendance_sheet_details" title="{_T string="Attendance sheet details" escape="js"}"> </div>');
739 _el.appendTo('body').dialog({
740 modal: true,
741 hide: 'fold',
742 width: '60%',
743 height: 400,
744 close: function(event, ui){
745 _el.remove();
746 },
747 buttons: {
748 Ok: function() {
749 $('#sheet_details_form').submit();
750 $(this).dialog( "close" );
751 },
752 Cancel: function() {
753 $(this).dialog( "close" );
754 }
755 }
756 }).append(res);
757 $('#sheet_date').datepicker({
758 changeMonth: true,
759 changeYear: true,
760 showOn: 'button',
761 yearRange: 'c:c+5',
762 buttonText: '<i class="far fa-calendar-alt"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
763 });
764 },
765 error: function() {
766 alert("{_T string="An error occurred displaying attendance sheet details interface :(" escape="js"}");
767 }
768 });
769 }
770 {/if}
771 </script>
772 {/block}