]> git.agnieray.net Git - galette.git/blob - galette/templates/default/edit_dynamic_fields.tpl
Add information to display on dynamic fields; closes #1190
[galette.git] / galette / templates / default / edit_dynamic_fields.tpl
1 {if !empty($object->getDynamicFields())}
2 {assign var=fields value=$object->getDynamicFields()->getFields()}
3 {if !isset($masschange)}
4 {assign var="masschange" value=false}
5 {/if}
6
7 {if !empty($fields)}
8
9 {function name=draw_field}
10 {assign var=valuedata value=$field_data.field_val|escape}
11 {if $field|is_a:'Galette\DynamicFields\File'}
12 <span class="bline libelle">{$field->getName()|escape}</span>
13 {else}
14 <label class="bline libelle" for="info_field_{$field->getId()}_{$loop}">
15 {if $masschange}
16 {* Add a checkbox for fields to change on mass edition *}
17 <input type="checkbox" name="mass_info_field_{$field->getId()}" class="mass_checkbox"/>
18 {/if}
19 {$field->getName()|escape}
20 </label>
21 {/if}
22 {if $field|is_a:'Galette\DynamicFields\Text'}
23 <textarea name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}"
24 cols="{if $field->getWidth() > 0}{$field->getWidth()}{else}61{/if}"
25 rows="{if $field->getHeight() > 0}{$field->getHeight()}{else}6{/if}"
26 {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
27 {if !$masschange}
28 {if $field->isRequired()} required="required"{/if}
29 {/if}
30 {if $disabled} disabled="disabled"{/if}>{$valuedata}</textarea>
31 {elseif $field|is_a:'Galette\DynamicFields\Line'}
32 <input type="text" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}"
33 {if $field->getWidth() > 0}size="{$field->getWidth()}"{/if}
34 {if $field->getSize() > 0}maxlength="{$field->getSize()}"{/if}
35 value="{$valuedata}"
36 {if !$masschange}
37 {if $field->isRequired()} required="required"{/if}
38 {/if}
39 {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
40 {if $disabled} disabled="disabled"{/if}
41 />
42 {elseif $field|is_a:'Galette\DynamicFields\Choice'}
43 <select name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}"
44 {if !$masschange}
45 {if $field->isRequired()} required="required"{/if}
46 {/if}
47 {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
48 {if $disabled} disabled="disabled"{/if}
49 >
50 <!-- If no option is present, page is not XHTML compliant -->
51 <option value="">{_T string="Select an option"}</option>
52 {html_options options=$field->getValues() selected=$valuedata}
53 </select>
54 {elseif $field|is_a:'Galette\DynamicFields\Date'}
55 <input type="text" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}" maxlength="10"
56 value="{$valuedata}" class="dynamic_date modif_date"
57 {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
58 {if !$masschange}
59 {if $field->isRequired()} required="required"{/if}
60 {/if}
61 {if $disabled} disabled="disabled"{/if}
62 />
63 <span class="exemple">{_T string="(yyyy-mm-dd format)"}</span>
64 {elseif $field|is_a:'Galette\DynamicFields\Boolean'}
65 <input type="checkbox" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}" value="1"
66 {if $valuedata eq 1} checked="checked"{/if}
67 {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
68 {if !$masschange}
69 {if $field->isRequired()} required="required"{/if}
70 {/if}
71 {if $disabled} disabled="disabled"{/if}
72 />
73 {elseif $field|is_a:'Galette\DynamicFields\File'}
74 {if $object->id}
75 <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_new">{_T string="new"}</label>
76 {/if}
77 <input
78 type="file"
79 name="info_field_{$field->getId()}_{$loop}"
80 id="info_field_{$field->getId()}_{$loop}_new"
81 {if $field->isRequired() and $valuedata eq ''} required="required"{/if}
82 {if $disabled} disabled="disabled"{/if}
83 />
84 {if $object->id}
85 <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_current">{_T string="current"}</label>
86 <a href="{path_for name="getDynamicFile" data=["id" => $object->id, "fid" => $field->getId(), "pos" => $loop, "name" => $valuedata]}">
87 {$valuedata}
88 </a>
89 - <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_delete">
90 {_T string="delete"}
91 </label>
92 <input
93 type="checkbox"
94 name="info_field_{$field->getId()}_{$loop}"
95 id="info_field_{$field->getId()}_{$loop}_delete"
96 onclick="this.form.info_field_{$field->getId()}_{$loop}_new.disabled = this.checked;"
97 />
98 {/if}
99 {/if}
100 {/function}
101
102 <fieldset class="galette_form">
103 <legend class="ui-state-active ui-corner-top">{_T string="Additionnal fields:"}</legend>
104 <div>
105 {assign var=access_level value=$login->getAccessLevel()}
106 {foreach from=$fields item=field}
107 {if $field->getInformation()}
108 <div>{$field->getInformation()}</div>
109 {/if}
110
111 {assign var=perm value=$field->getPerm()}
112 {if $field|is_a:'Galette\DynamicFields\Separator'}
113 <div class="separator">{$field->getName()|escape}</div>
114 {elseif ($field|is_a:'Galette\DynamicFields\File' || $field->isRepeatable()) && $masschange}
115 <!-- File and repeatable fields not shown in mass changes form -->
116 {else}
117 <p{if $field->isRepeatable()} class="repetable"{/if}>
118 {assign var=disabled value=false}
119 {if $perm eq constant('Galette\DynamicFields\DynamicField::PERM_USER_READ') && $access_level eq constant('Galette\Core\Authentication::ACCESS_USER')}
120 {assign var=disabled value=true}
121 {/if}
122 {assign var=values value=$object->getDynamicFields()->getValues($field->getId())}
123 {assign var=can_add value=false}
124 {if $field->getRepeat() === 0 || !is_array($values) || $values|@count < $field->getRepeat() || $values|@count === 0}
125 {assign var=can_add value=true}
126 {/if}
127 {foreach from=$values item=field_data}
128 {if not $field_data@first}<br/>{/if}
129 {draw_field field=$field field_data=$field_data disabled=$disabled loop=$field_data@iteration}
130 {/foreach}
131 {if !is_array($values) || $values|@count === 0}
132 {$field_data = ['field_val' => '']}
133 {if (is_array($values))}
134 {assign var="current_count" value=$values|@count}
135 {else}
136 {assign var="current_count" value=0}
137 {/if}
138 {draw_field field=$field field_data=$field_data disabled=$disabled loop=$current_count + 1}
139 {/if}
140 </p>
141 {if $field->isRepeatable()}
142 {if $field->getRepeat() === 0}
143 <p class="exemple" id="repeat_msg">{_T string="Enter as many occurences you want."}</p>
144 {elseif !is_array($values) || $values|@count < $field->getRepeat() || $values|@count === 0}
145 {if (is_array($values))}
146 {assign var="current_count" value=$values|@count}
147 {else}
148 {assign var="current_count" value=1}
149 {/if}
150 {assign var=remaining value=$field->getRepeat() - $current_count}
151 <p class="exemple" id="repeat_msg">{_T string="Enter up to %count more occurences." pattern="/%count/" replace=$remaining}</p>
152 {/if}
153 {/if}
154 {/if}
155 {/foreach}
156 </div>
157 </fieldset>
158 <script type="text/javascript">
159 {if !$masschange}
160 var _addLnk = function(){
161 return $('<a class="button" href="#"><i class="fas fa-plus" title="{_T string="New occurence"}"></i> <span class="sr-only">{_T string="New occurence"}"</span></a>');
162 };
163
164 var _lnkEvent = function(_a, _input, _parent) {
165 var _vals = _input[0].id.split(/_/);
166 var _total = $(_input[0]).data('maxrepeat'); //max number of occurences
167 var _current = _vals[_vals.length-1]; //current occurrence
168
169 _a.click(function(e) {
170 var _new = _input.clone();
171
172 var _id = '';
173
174 for ( var i = 0 ; i < _vals.length -1 ; i++ ) {
175 _id += _vals[i] + '_';
176 }
177
178 _current = Number(_current) + 1;
179 _new.attr('id', _id + _current);
180 _new.attr('name', _id + _current);
181 _new.val('');
182 _a.remove();
183 _parent.append('<br/>');
184 _parent.append(_new);
185 _new.focus();
186 if( _total == '0' || _current < _total ) {
187 var _b = _addLnk();
188 _lnkEvent(_b, _new, _parent);
189 _parent.append(_b);
190 if (_current < _total) {
191 $('#repeat_msg').html('{_T string="Enter up to %count more occurences." pattern="/%count/" replace="COUNT" escape="js"}'.replace(/COUNT/, _total - _current));
192 }
193 } else if (_current == _total) {
194 $('#repeat_msg').remove();
195 }
196 return false;
197 });
198 }
199 {/if}
200
201 $(function(){
202 {if !$masschange}
203 $('.repetable').each(function(){
204 var _total;
205 var _current;
206 var _parent = $(this);
207
208 var _input = $(this).find('input:last');
209 if ( _input.length > 0 ) {
210 while ( $(this).find('input').length > 1 && _input.val() == '' ) {
211 _input.prev('br').remove();
212 _input.remove();
213 _input = $(this).find('input:last')
214 }
215 var _vals = _input[0].id.split(/_/);
216 var _total = $(_input[0]).data('maxrepeat'); //max number of occurences
217 var _current = _vals[_vals.length-1]; //current occurrence
218
219 if ( _total == '0' || _current < _total ) {
220 var _a = _addLnk();
221 $(this).append(_a);
222 _lnkEvent(_a, _input, _parent);
223 }
224 }
225 });
226 {/if}
227 $('.dynamic_date').datepicker({
228 changeMonth: true,
229 changeYear: true,
230 showOn: 'button',
231 buttonText: '<i class="far fa-calendar-alt"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
232 });
233 });
234 </script>
235 {/if}
236 {/if}