1 {% extends 'page.html.twig' %}
4 <form action="{{ url_for('filter-memberslist') }}" method="post" class="ui form advanced-search">
5 <div class="galetteform ui styled fluid accordion field">
6 <div class="active ui title">
7 <i class="jsonly displaynone dropdown icon"></i>
8 {{ _T('Simple search') }}
10 <div class="active content">
11 <div class="four fields">
13 <label for="filter_str">{{ _T('Search:') }}</label>
14 <input type="text" name="filter_str" id="filter_str" value="{{ filters.filter_str }}" type="search" placeholder="{{ _T('Enter a value') }}"/>
17 <label for="field_filter">{{ _T('in:') }}</label>
18 <select name="field_filter" class="ui search dropdown origselect nochosen">
19 {% for key, value in field_filter_options %}
20 <option value="{{ key }}"{% if key == filters.field_filter %} selected="selected"{% endif %}>{{ value }}</option>
25 <label for="membership_filter">{{ _T('Membership status') }}</label>
26 <select id="membership_filter" name="membership_filter" class="ui search dropdown origselect nochosen">
27 {% for key, value in membership_filter_options %}
28 <option value="{{ key }}"{% if key == filters.membership_filter %} selected="selected"{% endif %}>{{ value }}</option>
33 <label for="filter_account">{{ _T('Account activity') }}</label>
34 <select id="filter_account" name="filter_account" class="ui search dropdown origselect nochosen">
35 {% for key, value in filter_accounts_options %}
36 <option value="{{ key }}"{% if key == filters.filter_account %} selected="selected"{% endif %}>{{ value }}</option>
41 <label for="group_filter">{{ _T('Member of group') }}</label>
42 <select name="group_filter" id="group_filter" class="ui search dropdown origselect nochosen">
43 <option value="0">{{ _T('Select a group') }}</option>
44 {% for group in filter_groups_options %}
45 <option value="{{ group.getId() }}"{% if filters.group_filter == group.getId() %} selected="selected"{% endif %}>{{ group.getIndentName()|raw }}</option>
50 <div class="inline fields">
51 <label for="email_filter">{{ _T('With email:') }}</label>
53 <div class="ui radio checkbox">
54 <input type="radio" name="email_filter" id="filter_dc_email" value="{{ constant("Galette\\Repository\\Members::FILTER_DC_EMAIL") }}"{% if filters.email_filter == constant('Galette\\Repository\\Members::FILTER_DC_EMAIL') %} checked="checked"{% endif %}>
55 <label for="filter_dc_email">{{ _T("Don't care") }}</label>
59 <div class="ui radio checkbox">
60 <input type="radio" name="email_filter" id="filter_with_email" value="{{ constant("Galette\\Repository\\Members::FILTER_W_EMAIL") }}"{% if filters.email_filter == constant("Galette\\Repository\\Members::FILTER_W_EMAIL") %} checked="checked"{% endif %}>
61 <label for="filter_with_email">{{ _T('With') }}</label>
65 <div class="ui radio checkbox">
66 <input type="radio" name="email_filter" id="filter_without_email" value="{{ constant("Galette\\Repository\\Members::FILTER_WO_EMAIL") }}"{% if filters.email_filter == constant("Galette\\Repository\\Members::FILTER_WO_EMAIL") %} checked="checked"{% endif %}>
67 <label for="filter_without_email">{{ _T('Without') }}</label>
73 <div class="galetteform ui styled fluid accordion field">
74 <div class="active ui title">
75 <i class="jsonly displaynone dropdown icon"></i>
76 {{ _T('Advanced search') }}
78 <div class="active content">
79 <div class="two fields">
81 <label>{{ _T('Birth date') }}</label>
82 <div class="two fields">
84 <label for="birth_date_begin">{{ _T('beetween') }}</label>
85 <div class="ui calendar" id="birth-rangestart">
86 <div class="ui input left icon">
87 <i class="calendar icon"></i>
88 <input id="birth_date_begin" name="birth_date_begin" type="text" class="birth_date" maxlength="10" size="10" value="{{ filters.birth_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}" />
93 <label for="birth_date_end">{{ _T('and') }}</label>
94 <div class="ui calendar" id="birth-rangeend">
95 <div class="ui input left icon">
96 <i class="calendar icon"></i>
97 <input id="birth_date_end" name="birth_date_end" type="text" class="birth_date" maxlength="10" size="10" value="{{ filters.birth_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
104 <label>{{ _T('Creation date') }}</label>
105 <div class="two fields">
107 <label for="creation_date_begin">{{ _T('beetween') }}</label>
108 <div class="ui calendar" id="creation-rangestart">
109 <div class="ui input left icon">
110 <i class="calendar icon"></i>
111 <input id="creation_date_begin" name="creation_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.creation_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
116 <label for="creation_date_end">{{ _T('and') }}</label>
117 <div class="ui calendar" id="creation-rangeend">
118 <div class="ui input left icon">
119 <i class="calendar icon"></i>
120 <input id="creation_date_end" name="creation_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.creation_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
127 <div class="two fields">
129 <label>{{ _T('Modification date') }}</label>
130 <div class="two fields">
132 <label for="modif_date_begin">{{ _T('beetween') }}</label>
133 <div class="ui calendar" id="modification-rangestart">
134 <div class="ui input left icon">
135 <i class="calendar icon"></i>
136 <input id="modif_date_begin" name="modif_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.modif_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
141 <label for="modif_date_end">{{ _T('and') }}</label>
142 <div class="ui calendar" id="modification-rangeend">
143 <div class="ui input left icon">
144 <i class="calendar icon"></i>
145 <input id="modif_date_end" name="modif_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.modif_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
152 <label>{{ _T('Due date') }}</label>
153 <div class="two fields">
155 <label for="due_date_begin">{{ _T('beetween') }}</label>
156 <div class="ui calendar" id="due-rangestart">
157 <div class="ui input left icon">
158 <i class="calendar icon"></i>
159 <input id="due_date_begin" name="due_date_begin" type="text" class="due_date" maxlength="10" size="10" value="{{ filters.due_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
164 <label for="due_date_end">{{ _T('and') }}</label>
165 <div class="ui calendar" id="due-rangeend">
166 <div class="ui input left icon">
167 <i class="calendar icon"></i>
168 <input id="due_date_end" name="due_date_end" type="text" class="due_date" maxlength="10" size="10" value="{{ filters.due_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
175 <div class="two fields">
177 <div class="grouped fields">
178 <label for="show_public_infos">{{ _T('Show public infos') }}</label>
180 <div class="ui radio checkbox">
181 <input type="radio" name="show_public_infos" id="show_public_infos_dc" value="{{ constant("Galette\\Repository\\Members::FILTER_DC_PUBINFOS") }}"{% if filters.show_public_infos == constant("Galette\\Repository\\Members::FILTER_DC_PUBINFOS") %} checked="checked"{% endif %}>
182 <label for="show_public_infos_dc" >{{ _T("Don't care") }}</label>
186 <div class="ui radio checkbox">
187 <input type="radio" name="show_public_infos" id="show_public_infos_yes" value="{{ constant("Galette\\Repository\\Members::FILTER_W_PUBINFOS") }}"{% if filters.show_public_infos == constant("Galette\\Repository\\Members::FILTER_W_PUBINFOS") %} checked="checked"{% endif %}>
188 <label for="show_public_infos_yes" >{{ _T('Yes') }}</label>
192 <div class="ui radio checkbox">
193 <input type="radio" name="show_public_infos" id="show_public_infos_no" value="{{ constant("Galette\\Repository\\Members::FILTER_WO_PUBINFOS") }}"{% if filters.show_public_infos == constant("Galette\\Repository\\Members::FILTER_WO_PUBINFOS") %} checked="checked"{% endif %}>
194 <label for="show_public_infos_no" >{{ _T('No') }}</label>
200 <label for="status">{{ _T('Status') }}</label>
201 <select name="status[]" id="status" multiple="" class="ui search dropdown origselect nochosen">
202 <option value="">{{ _T('Status') }}</option>
203 {% for key, value in statuts %}
204 <option value="{{ key }}"{% if key == filters.status %} selected="selected"{% endif %}>{{ value }}</option>
211 <noscript><div class="ui message">{{ _T("This feature requires javascript.") }}</div></noscript>
212 <div class="jsonly disabled galetteform ui styled fluid accordion field">
213 <div class="active ui title">
214 <i class="jsonly displaynone dropdown icon"></i>
215 {{ _T('Advanced groups search') }} ({{ _T('Experimental') }})
219 class="ui tiny compact icon green button tooltip"
220 title="{{ _T('Add new group search criteria') }}"
222 <i class="plus icon"></i>
223 <span class="displaynone">{{ _T('Add new group search criteria') }}</span>
226 <div class="active content">
228 <select name="groups_logical_operator" class="operator_selector ui search dropdown origselect nochosen">
229 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_AND") }}"{% if filters.groups_search_log_op == constant("Galette\\Filters\\AdvancedMembersList::OP_AND") %} selected="selected"{% endif %}>{{ _T('In all selected groups') }}</option>
230 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_OR") }}"{% if filters.groups_search_log_op == constant("Galette\\Filters\\AdvancedMembersList::OP_OR") %} selected="selected"{% endif %}>{{ _T('In any of selected groups') }}</option>
233 <ul id="gs_sortable" class="sortable-items">
234 {% for gs in filters.groups_search %}
235 <li class="even ui segment unstackable items">
236 <div class="ui item">
237 <div class="ui image">
238 <i class="arrows alternate icon"></i>
241 <select name="groups_search[]" class="group_selector ui search dropdown origselect nochosen">
242 <option value="">{{ _T('Select a group') }}</option>
243 {% for group in filter_groups_options %}
244 <option value="{{ group.getId() }}"{% if gs.group == group.getId() %} selected="selected"{% endif %}>{{ group.getName() }}</option>
249 class="ui small compact red icon button filtered fright tooltip delete delcriteria"
250 title="{{ _T('Remove criteria') }}"
252 <i class="trash alt icon"></i>
253 <span class="displaynone">{{ _T('Remove criteria') }}</span>
263 <div class="galetteform ui styled fluid accordion field">
264 <div class="active ui title">
265 <i class="jsonly displaynone dropdown icon"></i>
266 {{ _T('Within contributions') }}
268 <div class="active content">
269 <div class="two fields">
271 <label>{{ _T('Creation date') }}</label>
272 <div class="two fields">
274 <label for="contrib_creation_date_begin">{{ _T('beetween') }}</label>
275 <div class="ui calendar" id="contrib-creation-rangestart">
276 <div class="ui input left icon">
277 <i class="calendar icon"></i>
278 <input id="contrib_creation_date_begin" name="contrib_creation_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_creation_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
283 <label for="contrib_creation_date_end">{{ _T('and') }}</label>
284 <div class="ui calendar" id="contrib-creation-rangeend">
285 <div class="ui input left icon">
286 <i class="calendar icon"></i>
287 <input id="contrib_creation_date_end" name="contrib_creation_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_creation_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
294 <label>{{ _T('Begin date') }}</label>
295 <div class="two fields">
297 <label for="contrib_begin_date_begin">{{ _T('beetween') }}</label>
298 <div class="ui calendar" id="contrib-begin-rangestart">
299 <div class="ui input left icon">
300 <i class="calendar icon"></i>
301 <input id="contrib_begin_date_begin" name="contrib_begin_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_begin_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
306 <label for="contrib_begin_date_end">{{ _T('and') }}</label>
307 <div class="ui calendar" id="contrib-begin-rangeend">
308 <div class="ui input left icon">
309 <i class="calendar icon"></i>
310 <input id="contrib_begin_date_end" name="contrib_begin_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_begin_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
317 <div class="two fields">
319 <label>{{ _T('End date') }}</label>
320 <div class="two fields">
322 <label for="contrib_end_date_begin">{{ _T('beetween') }}</label>
323 <div class="ui calendar" id="contrib-end-rangestart">
324 <div class="ui input left icon">
325 <i class="calendar icon"></i>
326 <input id="contrib_end_date_begin" name="contrib_end_date_begin" type="text" class="due_date" maxlength="10" size="10" value="{{ filters.contrib_end_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
331 <label for="contrib_end_date_end">{{ _T('and') }}</label>
332 <div class="ui calendar" id="contrib-end-rangeend">
333 <div class="ui input left icon">
334 <i class="calendar icon"></i>
335 <input id="contrib_end_date_end" name="contrib_end_date_end" type="text" class="due_date" maxlength="10" size="10" value="{{ filters.contrib_end_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
342 <label>{{ _T('Amount') }}</label>
343 <div class="two fields">
345 <label for="contrib_min_amount">{{ _T('beetween') }}</label>
346 <input id="contrib_min_amount" name="contrib_min_amount" type="text" maxlength="10" size="10" value="{{ filters.contrib_min_amount }}"/>
349 <label for="contrib_max_amount">{{ _T('and') }}</label>
350 <input id="contrib_max_amount" name="contrib_max_amount" type="text" maxlength="10" size="10" value="{{ filters.contrib_max_amount }}"/>
355 <div class="two fields">
357 <label for="contributions_types">{{ _T('Type') }}</label>
358 <select name="contributions_types[]" id="contributions_types" multiple="" class="ui dropdown nochosen">
359 <option value="">{{ _T('Type') }}</option>
361 {% for key, value in contributions_types %}
362 <option value="{{ key }}"{% if key == filters.contributions_types %} selected="selected"{% endif %}>{{ value }}</option>
367 <label for="payments_types">{{ _T('Payment type') }}</label>
368 <select name="payments_types[]" id="payments_types" multiple="" class="ui dropdown nochosen">
369 <option value="">{{ _T('Payment type') }}</option>
370 {% for key, value in payments_types %}
371 <option value="{{ key }}"{% if key == filters.payments_types %} selected="selected"{% endif %}>{{ value }}</option>
376 {% for field in contrib_dynamics %}
378 {% set fid = field.getId() %}
379 {% if get_class(field) == "Galette\\DynamicFields\\Choice" %}
380 {% set rid = "cdsc_" ~ fid %}
382 {% set rid = "cds_" ~ fid %}
384 {% if get_class(field) != "Galette\\DynamicFields\\Boolean" %}
385 <label for="cds{% if get_class(field) == "Galette\\DynamicFields\\Choice" %}c{% endif %}_{{ field.getId() }}">{{ field.getName() }}</label>
387 {% if get_class(field) == "Galette\\DynamicFields\\Line" %}
388 <input type="text" name="cds_{{ field.getId() }}" id="cds_{{ field.getId() }}" value="{% if attribute(filters.contrib_dynamic, fid) is defined %}{{ attribute(filters.contrib_dynamic, fid) }}{% endif %}" />
389 {% elseif get_class(field) == "Galette\\DynamicFields\\Text" %}
390 <textarea name="cds_{{ field.getId() }}" id="cds_{{ field.getId() }}">{% if attribute(filters.contrib_dynamic, fid) is defined %}{{ attribute(filters.contrib_dynamic, fid) }}{% endif %}</textarea>
391 {% elseif get_class(field) == "Galette\\DynamicFields\\Choice" %}
392 <select name="cdsc_{{ field.getId() }}[]" id="cdsc_{{ field.getId() }}" multiple="multiple" class="ui dropdown nochosen">
393 <option value="">{{ _T('Select') }}</option>
394 {% for k, choice in field.getValues() %}
395 <option value="{{ k }}"{% if attribute(filters.contrib_dynamic, fid) is defined and k in attribute(filters.contrib_dynamic, fid) %} selected="selected"{% endif %}>{{ choice }}</option>
398 {% elseif get_class(field) == "Galette\\DynamicFields\\Boolean" %}
399 <div class="ui right aligned toggle checkbox">
400 <input type="checkbox" name="cds_{{ field.getId() }}" id="cds_{{ field.getId() }}" value="1" {% if attribute(filters.contrib_dynamic, fid) is defined %} checked="checked"{% endif %}/>
401 <label for="cds_{{ field.getId() }}">{{ field.getName() }}</label>
403 {% elseif get_class(field) == "Galette\\DynamicFields\\Date" %}
404 <div class="ui calendar" id="cds_{{ field.getId() }}-rangeend">
405 <div class="ui input left icon">
406 <i class="calendar icon"></i>
407 <input id="cds_{{ field.getId() }}" name="cds_{{ field.getId() }}" type="text" class="due_date" maxlength="10" size="10" value="{% if attribute(filters.contrib_dynamic, fid) is defined %}{{ attribute(filters.contrib_dynamic, fid) }}{% endif %}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
415 <noscript><div class="ui message">{{ _T("This feature requires javascript.") }}</div></noscript>
416 <div class="jsonly disabled galetteform ui styled fluid accordion field">
417 <div class="active ui title">
418 <i class="jsonly displaynone dropdown icon"></i>
419 {{ _T('Free search') }} ({{ _T('Experimental') }})
423 class="ui tiny compact icon green button tooltip"
424 title="{{ _T('Add new free search criteria') }}"
426 <i class="plus icon"></i>
427 <span class="displaynone">{{ _T('Add new free search criteria') }}</span>
430 <div class="active content">
431 <ul id="fs_sortable" class="sortable-items">
432 {% for fs in filters.free_search %}
433 <li class="even ui segment unstackable items">
434 <div class="ui item">
435 <div class="ui image">
436 <i class="arrows alternate icon"></i>
438 <div class="inline fields">
439 <select name="free_logical_operator[]" class="operator_selector ui search dropdown origselect nochosen">
440 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_AND") }}"{% if fs.log_op == constant("Galette\\Filters\\AdvancedMembersList::OP_AND") %} selected="selected"{% endif %}>{{ _T('and') }}</option>
441 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_OR") }}"{% if fs.log_op == constant("Galette\\Filters\\AdvancedMembersList::OP_OR") %} selected="selected"{% endif %}>{{ _T('or') }}</option>
443 <select name="free_field[]" class="field_selector ui search dropdown origselect nochosen">
444 <option value="">{{ _T('Select a field') }}</option>
445 {% for key, field in search_fields %}
446 {% if fs.field == key %}
447 {% if key starts with 'date_' or key == 'ddn_adh' %}
448 {% set type = constant("Galette\\DynamicFields\\DynamicField::DATE") %}
449 {% elseif key == constant("Galette\\Entity\\Status::PK") %}
450 {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
451 {% set fvalues = statuts %}
452 {% elseif key == 'sexe_adh' %}
453 {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
455 (constant("Galette\\Entity\\Adherent::NC")): _T('Unspecified'),
456 (constant("Galette\\Entity\\Adherent::MAN")): _T('Man'),
457 (constant("Galette\\Entity\\Adherent::WOMAN")): _T('Woman')
460 {% set type = constant("Galette\\DynamicFields\\DynamicField::LINE") %}
463 <option value="{{ key }}"{% if fs.field == key %} selected="selected"{% endif %}>{{ field.label }}</option>
465 {% for field in adh_dynamics %}
466 {% if get_class(field) != "Galette\\DynamicFields\\Separator" %}
467 {% set fid = field.getId() %}
468 {% set rid = "dyn_" ~ fid %}
469 {% if fs.field == rid %}
470 {% set cur_field = field %}
473 <option value="dyn_{{ field.getId() }}"{% if fs.field == rid %} selected="selected"{% endif %}>{{ field.getName() }}</option>
475 {% for type, label in adh_socials %}
476 {% set rid = "socials_" ~ type %}
477 {% if fs.field == rid %}
478 {% set cur_field = type %}
480 <option value="socials_{{ type }}"{% if fs.field == rid %} selected="selected"{% endif %}>{{ label }}</option>
484 {# may not be defined #}
486 {% if type is not defined %}{% set type = null %}{% endif %}
487 <span class="data fields">
488 <input type="hidden" name="free_type[]" value="{% if cur_field is defined %}{{ cur_field.getType() }}{% endif %}"/>
489 {% if cur_field is defined and (get_class(cur_field) == "Galette\\DynamicFields\\Choice" or type == constant("Galette\\DynamicFields\\DynamicField::CHOICE")) %}
490 <select name="free_query_operator[]" class="free_operator ui search dropdown origselect nochosen">
491 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
492 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") %} selected="selected"{% endif %}>{{ _T('is not') }}</option>
494 <select name="free_text[]" class="free_text ui search dropdown origselect nochosen">
495 {% if cur_field is defined and get_class(cur_field) == "Galette\\DynamicFields\\Choice" %}
496 {% for key, value in cur_field.getValues() %}
497 <option value="{{ key }}"{% if key == fs.search %} selected="selected"{% endif %}>{{ value }}</option>
500 {% for key, value in fvalues %}
501 <option value="{{ key }}"{% if key == fs.search %} selected="selected"{% endif %}>{{ value }}</option>
505 {% elseif cur_field is defined and (get_class(cur_field) == "Galette\\DynamicFields\\Date" or type == constant("Galette\\DynamicFields\\DynamicField::DATE")) %}
506 <select name="free_query_operator[]" class="free_operator ui search dropdown origselect nochosen">
507 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
508 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_BEFORE") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_BEFORE") %} selected="selected"{% endif %}>{{ _T('before') }}</option>
509 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_AFTER") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_AFTER") %} selected="selected"{% endif %}>{{ _T('after') }}</option>
511 <input type="text" name="free_text[]" value="{{ fs.search|date(_T('Y-m-d')) }}" class="modif_date" maxlength="10" size="10"/>
512 <span class="exemple">{{ _T('(yyyy-mm-dd format)') }}</span>
513 {% elseif cur_field is defined and (get_class(cur_field) == "Galette\\DynamicFields\\Boolean" or type == constant("Galette\\DynamicFields\\DynamicField::BOOLEAN")) %}
514 <select name="free_query_operator[]" class="free_operator ui search dropdown origselect nochosen">
515 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
517 <input type="radio" name="free_text[]" id="free_text_yes" value="1"{% if fs.search == 1 %} checked="checked"{% endif %}/><label for="free_text_yes">{{ _T('Yes') }}</label>
518 <input type="radio" name="free_text[]" id="free_text_no" value="0"{% if fs.search == 0 %} checked="checked"{% endif %}/><label for="free_text_no">{{ _T('No') }}</label>
520 <select name="free_query_operator[]" class="free_operator ui search dropdown origselect nochosen">
521 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
522 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_CONTAINS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_CONTAINS") %} selected="selected"{% endif %}>{{ _T('contains') }}</option>
523 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") %} selected="selected"{% endif %}>{{ _T('is not') }}</option>
524 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_CONTAINS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_CONTAINS") %} selected="selected"{% endif %}>{{ _T('do not contains') }}</option>
525 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_STARTS_WITH") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_STARTS_WITH") %} selected="selected"{% endif %}>{{ _T('starts with') }}</option>
526 <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_ENDS_WITH") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_ENDS_WITH") %} selected="selected"{% endif %}>{{ _T('ends with') }}</option>
528 <input type="text" name="free_text[]" value="{{ fs.search }}"{% if cur_field is defined and get_class(cur_field) == "Galette\\DynamicFields\\Text" %} class="large"{% endif %}/>
533 class="ui small compact red icon button filtered fright tooltip delete delcriteria"
534 title="{{ _T('Remove criteria') }}"
536 <i class="trash alt icon"></i>
537 <span class="displaynone">{{ _T('Remove criteria') }}</span>
547 <div class="ui basic center aligned segment">
548 <button type="submit" class="ui labeled icon primary button action">
549 <i class="search icon" aria-hidden="true"></i>
552 <input type="hidden" name="advanced_filtering" value="true" />
553 <button type="submit" name="clear_adv_filter" class="ui labeled icon button delete">
554 <i class="trash alt red icon" aria-hidden="true"></i>
555 {{ _T('Clear filter') }}
557 {% include "components/forms/csrf.html.twig" %}
562 {% block javascripts %}
563 <script type="text/javascript">
566 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }},
567 name: "{{ _T('is') }}"
570 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_CONTAINS") }},
571 name: "{{ _T('contains') }}"
574 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") }},
575 name: "{{ _T('is not') }}"
578 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_CONTAINS") }},
579 name: "{{ _T('do not contains') }}"
582 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_STARTS_WITH") }},
583 name: "{{ _T('starts with') }}"
586 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_ENDS_WITH") }},
587 name: "{{ _T('ends with') }}"
590 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_BEFORE") }},
591 name: "{{ _T('before') }}"
594 id: {{ constant("Galette\\Filters\\AdvancedMembersList::OP_AFTER") }},
595 name: "{{ _T('after') }}"
600 {% for key, field in search_fields %}
601 {% if key starts with 'date_' or key == 'ddn_adh' %}
602 {% set type = constant("Galette\\DynamicFields\\DynamicField::DATE") %}
603 {% elseif key == constant("Galette\\Entity\\Status::PK") %}
604 {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
605 {% set fvalues = statuts %}
606 {% elseif key == 'sexe_adh' %}
607 {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
609 (constant("Galette\\Entity\\Adherent::NC")): _T('Unspecified'),
610 (constant("Galette\\Entity\\Adherent::MAN")): _T('Man'),
611 (constant("Galette\\Entity\\Adherent::WOMAN")): _T('Woman')
614 {% set type = constant("Galette\\DynamicFields\\DynamicField::LINE") %}
616 {{ key }}: { type:'{{ type }}'{% if fvalues is defined %}, values: {{ fvalues|json_encode|raw }}{% endif %} },
618 {% for field in adh_dynamics %}
619 {% if get_class(field) == "Galette\\DynamicFields\\Separator" %}
621 {% elseif get_class(field) == "Galette\\DynamicFields\\Choice" %}
622 dyn_{{ field.getId() }}: { type:'{{ field.getType() }}', values: {{ field.getValues()|json_encode|raw }} },
624 dyn_{{ field.getId() }}: { type:'{{ field.getType() }}' },
629 {% include "elements/js/calendar.js.twig" with {selector: '.fs-calendar'} %}
631 var _fs_dropdown = function(selector) {
633 selector = '.origselect';
636 $(selector).dropdown({
637 onChange: function(value, text, option) {
638 var _field = _fields[value];
639 var _type = _field.type;
643 case '{{ constant('Galette\\DynamicFields\\DynamicField::BOOLEAN') }}':
644 _html = _getOperatorSelector(['op_equals']);
645 _html += '<input type="radio" name="free_text[]" id="free_text_yes" value="1"/><label for="free_text_yes">{{ _T('Yes') }}</label><input type="radio" name="free_text[]" id="free_text_no" value="0"/><label for="free_text_no">{{ _T('No') }}</label>';
647 case '{{ constant('Galette\\DynamicFields\\DynamicField::CHOICE') }}':
648 _html = _getOperatorSelector(['op_equals', 'op_not_equals']);
650 if (Array.isArray(_field.values)) {
651 for (var i = 0; i < _field.values.length; i++) {
652 _options += '<option value="' + i + '">' + _field.values[i] + '</option>';
655 for (key in _field.values) {
656 _options += '<option value="' + key + '">' + _field.values[key] + '</option>';
659 _html += '<select name="free_text[]" class="ui search dropdown origselect nochosen newselect">' + _options + '</select>';
661 case '{{ constant('Galette\\DynamicFields\\DynamicField::DATE') }}':
662 _html = _getOperatorSelector(['op_equals', 'op_before', 'op_after']);
663 _html += '<div class="ui calendar fs-calendar">'
664 _html += '<div class="ui input left icon">'
665 _html += '<i class="calendar icon"></i>'
666 _html += '<input type="text" name="free_text[]" class="modif_date" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>';
671 _html = _getOperatorSelector(['op_equals', 'op_contains', 'op_not_equals', 'op_not_contains', 'op_starts_with', 'op_ends_with']);
672 _html += '<input type="text" name="free_text[]"/>';
676 _html += '<input type="hidden" name="free_type[]" value="' + _type + '"/>';
677 option.parent().parent().parent().find('span.data').html(_html);
678 _calendarWidget('.fs-calendar');
679 _fs_dropdown('.newselect');
680 $('.newselect').removeClass('newselect');
685 var _newFilter = function(elt) {
686 elt.find('span.data').html('');
687 elt.find('.item.active.selected').removeClass('active').removeClass('selected');
689 var _rmFilter = function(elt) {
693 elt.find('.delcriteria').click(function(){
695 if ( _this.parents('ul').find('li').length > 1 ) {
696 _this.parent('div').parent('.item').parent('li').remove();
698 _newFilter(_this.parent('div').parent('.item').parent('li'));
703 var _getOperatorSelector = function(list) {
705 for (var i = 0; i < list.length; i++) {
706 var _operator = _operators[list[i]];
707 _options += '<option value="' + _operator.id + '">' + _operator.name + '</option>';
709 return '<select name="free_query_operator[]" class="free_operator ui search dropdown origselect nochosen newselect">' + _options + '</select>';
710 _fs_dropdown('.newselect');
711 $('.newselect').removeClass('newselect');
714 var _initSortable = function(){
715 var _freesearch = document.getElementById('fs_sortable');
716 var _groupsearch = document.getElementById('gs_sortable');
718 new Sortable(_freesearch, {
720 ghostClass: 'yellow',
722 onUpdate: function (evt) {
723 var _item = evt.item;
724 _item.classList.add('yellow');
728 new Sortable(_groupsearch, {
730 ghostClass: 'yellow',
732 onAdd: function (evt) {
733 var _item = evt.item;
734 _item.classList.add('yellow');
744 $('#addbutton_g').click(function(){
745 $('#gs_sortable li:first')
747 .insertAfter('#gs_sortable li:last'); // where
753 $('#addbutton').click(function(){
754 $('#fs_sortable li:first')
756 .insertAfter('#fs_sortable li:last'); // where