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