]> git.agnieray.net Git - galette.git/blob - galette/templates/default/pages/member_form.html.twig
Restore current selected value on dropdowns
[galette.git] / galette / templates / default / pages / member_form.html.twig
1 {% extends parent_tpl %}
2
3 {% block page_title %}
4 <div class="right aligned bottom floating ui {{ member.getRowClass() }} label">{{ member.getDues() }}</div>
5 {{ parent() }}
6 {% endblock %}
7
8 {% block content %}
9 {% if member.id %}
10 {% include "elements/navigate.html.twig" with {"mpath": "editMember"} %}
11 {% include "elements/member_card.html.twig" %}
12 {% endif %}
13
14 <form action="{% if self_adh %}{{ path_for("storeselfmembers") }}{% elseif not member.id %}{{ path_for("doAddMember") }}{% else %}{{ path_for("doEditMember", {"id": member.id}) }}{% endif %}" method="post" enctype="multipart/form-data" id="form" class="ui form">
15 {% if not self_adh %}
16 <div class="ui compact segment">
17 {% if member.hasParent() and not member.isDuplicate() %}
18 <div class="inline field">
19 <span class="ui primary ribbon label">{{ _T("Attached to:") }}</span>
20 <a href="{{ path_for("member", {"id": member.parent.id}) }}" class="ui label">{{ member.parent.sfullname }}</a>
21 {% if not member.id %}
22 <input type="hidden" name="parent_id" value="{{ member.parent.id }}"/>
23 {% endif %}
24 </div>
25 {% if login.isAdmin() or login.isStaff() and (addchild is not defined or not addchild) %}
26 <div class="inline field">
27 <div class="ui toggle checkbox">
28 <input type="checkbox" name="detach_parent" id="detach_parent" value="1"/>
29 <label for="detach_parent">{{ _T("Detach?") }}</label>
30 </div>
31 </div>
32 {% endif %}
33 {% elseif (login.isAdmin() or login.isStaff()) and not member.hasChildren() and members.list is defined %}
34 <input type="checkbox" name="attach" id="attach" value="1"{% if member.isDuplicate() %} checked="checked"{% endif %}/>
35 <label for="attach"><i class="linkify icon"></i> {{ _T("Attach member") }}</label>
36 <span id="parent_id_elt" class="sr-only">
37 <div id="parent_id" class="ui search selection dropdown nochosen">
38 <input type="hidden" name="parent_id" value="{{ member.isDuplicate() and member.parent is defined ? member.parent.id }}">
39 <i class="dropdown icon"></i>
40 <div class="default text">{{ _T("-- select a name --") }}</div>
41 <div class="menu">
42 {% for k, v in members.list %}
43 <div class="item" data-value="{{ k }}">{{ v }}</div>
44 {% endfor %}
45 </div>
46 </div>
47 <div class="ui tiny icon button" id="reset-contributor"><i class="redo icon"></i><span class="hidden">{{ _T("Reset") }}</span></div>
48 </span>
49 {% if member.isDuplicate() %}
50 <input type="hidden" name="duplicate" value="1" />
51 {% endif %}
52 {% elseif member.hasChildren() %}
53 <div class="inline field">
54 <span class="ui primary ribbon label">{{ _T("Parent of:") }}</span>
55 {% for child in member.children %}
56 <a href="{{ path_for("member", {"id": child.id}) }}" class="ui label">{{ child.sfullname }}</a>{% if not loop.last %}, {% endif %}
57 {% endfor %}
58 </div>
59 {% endif %}
60 </div>
61 {% endif %}
62 {# Main form entries #}
63 {% include "components/form.html.twig" %}
64 {# Dynamic entries #}
65 {% include "components/dynamic_fields.html.twig" with {object: member} %}
66 {% include "elements/edit_socials.html.twig" with {socials: member.socials} %}
67
68 {% if not member.id and not self_adh %}
69 {% if login.isAdmin() or login.isStaff() %}
70 <div class="ui center aligned yellow segment">
71 <div class="inline field">
72 <label for="redirect_on_create">{{ _T("After member creation:") }}</label>
73 <select name="redirect_on_create" id="redirect_on_create"i class="ui search dropdown nochosen">
74 <option value="{{ constant('Galette\\Entity\\Adherent::AFTER_ADD_DEFAULT') }}"{% if preferences.pref_redirect_on_create == constant('Galette\\Entity\\Adherent::AFTER_ADD_DEFAULT') %} selected="selected"{% endif %}>{{ _T("create a new contribution (default action)") }}</option>
75 <option value="{{ constant('Galette\\Entity\\Adherent::AFTER_ADD_TRANS') }}"{% if preferences.pref_redirect_on_create == constant('Galette\\Entity\\Adherent::AFTER_ADD_TRANS') %} selected="selected"{% endif %}>{{ _T("create a new transaction") }}</option>
76 <option value="{{ constant('Galette\\Entity\\Adherent::AFTER_ADD_NEW') }}"{% if preferences.pref_redirect_on_create == constant('Galette\\Entity\\Adherent::AFTER_ADD_NEW') %} selected="selected"{% endif %}>{{ _T("create another new member") }}</option>
77 <option value="{{ constant('Galette\\Entity\\Adherent::AFTER_ADD_SHOW') }}"{% if preferences.pref_redirect_on_create == constant('Galette\\Entity\\Adherent::AFTER_ADD_SHOW') %} selected="selected"{% endif %}>{{ _T("show member") }}</option>
78 <option value="{{ constant('Galette\\Entity\\Adherent::AFTER_ADD_LIST') }}"{% if preferences.pref_redirect_on_create == constant('Galette\\Entity\\Adherent::AFTER_ADD_LIST') %} selected="selected"{% endif %}>{{ _T("go to members list") }}</option>
79 <option value="{{ constant('Galette\\Entity\\Adherent::AFTER_ADD_HOME') }}"{% if preferences.pref_redirect_on_create == constant('Galette\\Entity\\Adherent::AFTER_ADD_HOME') %} selected="selected"{% endif %}>{{ _T("go to main page") }}</option>
80 </select>
81 </div>
82 </div>
83 {% else %}
84 <input type="hidden" name="redirect_on_create" value="{constant('Galette\\Entity\\Adherent::AFTER_ADD_SHOW')}"/>
85 {% endif %}
86 {% if addchild is defined and addchild %}
87 <input type="hidden" name="addchild" value="true"/>
88 {% endif %}
89 {% endif %}
90 {% if preferences.pref_mail_method != constant('Galette\\Core\\GaletteMail::METHOD_DISABLED') and (not self_adh and (login.isAdmin() or login.isStaff())) %}
91 <div class="ui center aligned yellow segment">
92 <div class="inline field">
93 <div class="ui toggle checkbox">
94 <input type="checkbox" name="mail_confirm" id="mail_confirm" value="1" {# if isset($smarty.post.mail_confirm) and $smarty.post.mail_confirm != ""}checked="checked"{/if#}/>
95 <label for="mail_confirm">
96 {% if member.id %}
97 {{ _T("Notify member his account has been modified") }}
98 {% else %}
99 {{ _T("Notify member his account has been created") }}
100 {% endif %}
101 </label>
102 <br/>
103 <span class="exemple">
104 {% if member.id %}
105 {{ _T("Member will be notified by email his account has been modified.") }}
106 {% else %}
107 {{ _T("Member will receive his username and password by email, if he has an address.") }}
108 {% endif %}
109 </span>
110 </div>
111 </div>
112 </div>
113 {% endif %}
114 <div class="ui basic center aligned fitted segment">
115 <button type="submit" name="valid" class="action ui labeled icon primary button">
116 <i class="save icon"></i> {{ _T("Save") }}
117 </button>
118 {% for entry in hidden_elements %}
119 {% if entry.field_id != 'mdp_adh' %}
120 {% set title = null %}
121 {% set tip = null %}
122 {% set size = null %}
123 {% set propname = entry.propname %}
124 {% if entry.field_id == 'activite_adh' %}
125 {% set value = member.isActive() %}
126 {% else %}
127 {% set value = attribute(member, propname) %}
128 {% endif %}
129 {% set checked = null %}
130 {% set example = null %}
131
132 {% if value != '' and entry.field_id != 'parent_id' %}
133 {% include "components/forms/hidden.html.twig" with {
134 name: entry.field_id,
135 id: entry.field_id,
136 value: value
137 } %}
138 {% endif %}
139 {% endif %}
140 {% endfor %}
141 {% include "components/forms/csrf.html.twig" %}
142 </div>
143 </form>
144 {% endblock %}
145
146 {% block javascripts %}
147 <script type="text/javascript">
148 {% include "elements/js/choose_adh.js.twig" with {"js_chosen_id": "#parent_id"} %}
149 $(function() {
150 $('#is_company').change(function(){
151 $('#company_field').toggleClass('hidden');
152 $('#company_field').backgroundFade(
153 {
154 sColor:'#ffffff',
155 eColor:'#DDDDFF',
156 steps:10
157 },
158 function() {
159 $(this).backgroundFade(
160 {
161 sColor:'#DDDDFF',
162 eColor:'#ffffff'
163 }
164 );
165 });
166 });
167
168 {% if not self_adh %}
169 {# Groups popup #}
170 $('#btngroups, #btnmanagedgroups').click(function(){
171 var _managed = false;
172 if ( $(this).attr('id') == 'btnmanagedgroups' ) {
173 _managed = true;
174 }
175 var _groups = [];
176 var _form = (_managed) ? 'managed' : 'user';
177 $('#' + _form + 'groups_form input').each(function(){
178 _group = $(this).val().split('|');
179 _groups[_groups.length] = {
180 id: _group[0],
181 name: _group[1]
182 };
183 });
184 $.ajax({
185 url: '{{ path_for("ajax_groups") }}',
186 type: "POST",
187 data: {
188 ajax: true,
189 groups: _groups,
190 managed: _managed
191 },
192 {% include "elements/js/loader.js.twig" with {
193 selector: '#groups_field'
194 } %},
195 success: function(res){
196 _groups_dialog(res, _groups, _managed);
197 },
198 error: function() {
199 alert("{{ _T("An error occurred displaying groups interface :(")|e('js') }}");
200 }
201 });
202 return false;
203 });
204
205 var _groups_dialog = function(res, _groups, _managed){
206 var _title = '{{ _T("Groups selection")|e('js') }}';
207 if ( _managed ) {
208 _title = '{{ _T("Managed groups selection")|e('js') }}';
209 }
210 $('body').modal({
211 title: _title,
212 class: 'fullscreen scrolling',
213 content: res,
214 actions: [{
215 text : '{{ _T("Close")|e('js') }}',
216 class : 'cancel'
217 }]
218 }).modal('show');
219 _groups_ajax_mapper(res, _groups, _managed);
220 }
221
222 var _groups_ajax_mapper = function(res, _groups, _managed){
223 $('#btnvalid').click(function(){
224 //remove actual groups
225 var _form = (_managed) ? 'managed' : 'user';
226 $('#' + _form + 'groups_form').empty();
227 var _groups = new Array();
228 var _groups_str = '<br/><strong>';
229 if ( _managed ) {
230 _groups_str += '{{ _T("Manager for:")|e('js') }}';
231 } else {
232 _groups_str += '{{ _T("Member of:")|e('js') }}';
233 }
234 _groups_str += '</strong> ';
235
236 $('li[id^="group_"]').each(function(){
237 //get group values
238 _gid = this.id.substring(6, this.id.length);
239 _gname = $(this).text();
240 _groups[_groups.length] = this.id.substring(6, this.id.length);
241 var _iname = (_managed) ? 'groups_managed_adh' : 'groups_adh';
242 $('#' + _form + 'groups_form').append(
243 '<input type="hidden" value="' +
244 _gid + '|' + _gname + '|' +
245 '" name="' + _iname + '[]">'
246 );
247 if ( _groups.length > 1 ) {
248 _groups_str += ', ';
249 }
250 _groups_str += _gname;
251 });
252 $('#' + _form + 'groups').html(_groups_str);
253 $('#ajax_groups_list').modal('hide');
254 });
255 //Remap links
256 var _none = $('#none_selected').clone();
257 $('li input[type=checkbox]').click(function(e){
258 e.stopPropagation();
259 });
260 $('li[id^="group_"]').click(function(){
261 $(this).remove();
262 if ( $('#selected_groups ul li').length == 0 ) {
263 $('#selected_groups ul').append(_none);
264 }
265 });
266 $('#listing a').click(function(e){
267 e.preventDefault();
268 var _gid = this.href.match(/.*\/(\d+)$/)[1];
269 var _gname = $(this).text();
270 $('#none_selected').remove()
271 if ( $('#group_' + _gid).length == 0 ) {
272 var _li = '<li id="group_' + _gid + '" class="item"><i class="user minus icon"></i><span class="ui content">' + _gname + '</span></li>';
273 $('#selected_groups ul').append(_li);
274 $('#group_' + _gid).click(function(){
275 $(this).remove();
276 if ( $('#selected_groups ul li').length == 0 ) {
277 $('#selected_groups ul').append(_none);
278 }
279 });
280 }
281 return false;
282 });
283
284 }
285
286 {% if not self_adh and not member.hasChildren() %}
287 {# Parent selection #}
288 $('#parent_id_elt').removeClass('sr-only');
289 {% if not member.isDuplicate() %}
290 $('#parent_id_elt').hide();
291 {% endif %}
292 $('#attach').on('click', function() {
293 var _checked = $(this).is(':checked');
294 $('#parent_id_elt').toggle();
295 });
296 {% endif %}
297
298 {% if not self_adh %}
299 {% if parent_fields|length > 0 %}
300 $('#detach_parent').on('change', function(){
301 var _checked = $(this).is(':checked');
302 var _changes = '';
303 {% for req in parent_fields %}
304 _changes += '#{{ req }}';
305 {% if not loop.last %}
306 _changes += ',';
307 {% endif %}
308 {% endfor %}
309 if (_checked) {
310 $(_changes).attr('required', 'required');
311 } else {
312 $(_changes).removeAttr('required');
313 }
314 });
315
316 $('#parent_id').on('change', function(){
317 var _hasParent = $(this).attr('value') != '';
318 var _changes = '';
319 {% for req in parent_fields %}
320 _changes += '#{{ req }}';
321 {% if not loop.last %}
322 _changes += ',';
323 {% endif %}
324 {% endfor %}
325 if (_hasParent) {
326 $(_changes).removeAttr('required');
327 } else {
328 $(_changes).attr('required', 'required');
329 }
330 });
331 {% endif %}
332 {% endif %}
333 {% include "elements/js/photo_dnd.js.twig" %}
334
335 $('#ddn_adh').on('blur', function() {
336 var _bdate = $(this).val();
337 if ('{{ _T("Y-m-d") }}' === 'Y-m-d') {
338 _bdate = new Date(_bdate);
339 } else {
340 //try for dd/mm/yyyy
341 var _dparts = _bdate.split("/");
342 _bdate = new Date(_dparts[2], _dparts[1] - 1, _dparts[0]);
343 }
344
345 if (! isNaN(_bdate.getTime())) {
346 var _today = new Date();
347 var _age = Math.floor((_today-_bdate) / (365.25 * 24 * 60 * 60 * 1000));
348 $('#member_age').html('{{ _T(" (%age years old)") }}'.replace(/%age/, _age))
349 } else {
350 $('#member_age').html('');
351 }
352 });
353 {% endif %}
354 });
355 </script>
356 {% endblock %}