]> git.agnieray.net Git - galette.git/blob - galette/templates/default/edit_dynamic_fields.tpl
Mass edition of dynamic fields; closes #1194
[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 {assign var=perm value=$field->getPerm()}
108 {if $field|is_a:'Galette\DynamicFields\Separator'}
109 <div class="separator">{$field->getName()|escape}</div>
110 {elseif ($field|is_a:'Galette\DynamicFields\File' || $field->isRepeatable()) && $masschange}
111 <!-- File and repetable fields not shown in mass changes form -->
112 {else}
113 <p{if $field->isRepeatable()} class="repetable"{/if}>
114 {assign var=disabled value=false}
115 {if $perm eq constant('Galette\DynamicFields\DynamicField::PERM_USER_READ') && $access_level eq constant('Galette\Core\Authentication::ACCESS_USER')}
116 {assign var=disabled value=true}
117 {/if}
118 {assign var=values value=$object->getDynamicFields()->getValues($field->getId())}
119 {assign var=can_add value=false}
120 {if $field->getRepeat() === 0 || !is_array($values) || $values|@count < $field->getRepeat() || $values|@count === 0}
121 {assign var=can_add value=true}
122 {/if}
123 {foreach from=$values item=field_data}
124 {if not $field_data@first}<br/>{/if}
125 {draw_field field=$field field_data=$field_data disabled=$disabled loop=$field_data@iteration}
126 {/foreach}
127 {if !is_array($values) || $values|@count === 0}
128 {$field_data = ['field_val' => '']}
129 {if (is_array($values))}
130 {assign var="current_count" value=$values|@count}
131 {else}
132 {assign var="current_count" value=0}
133 {/if}
134 {draw_field field=$field field_data=$field_data disabled=$disabled loop=$current_count + 1}
135 {/if}
136 </p>
137 {if $field->isRepeatable()}
138 {if $field->getRepeat() === 0}
139 <p class="exemple" id="repeat_msg">{_T string="Enter as many occurences you want."}</p>
140 {elseif !is_array($values) || $values|@count < $field->getRepeat() || $values|@count === 0}
141 {if (is_array($values))}
142 {assign var="current_count" value=$values|@count}
143 {else}
144 {assign var="current_count" value=1}
145 {/if}
146 {assign var=remaining value=$field->getRepeat() - $current_count}
147 <p class="exemple" id="repeat_msg">{_T string="Enter up to %count more occurences." pattern="/%count/" replace=$remaining}</p>
148 {/if}
149 {/if}
150 {/if}
151 {/foreach}
152 </div>
153 </fieldset>
154 <script type="text/javascript">
155 {if !$masschange}
156 var _addLnk = function(){
157 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>');
158 };
159
160 var _lnkEvent = function(_a, _input, _parent) {
161 var _vals = _input[0].id.split(/_/);
162 var _total = $(_input[0]).data('maxrepeat'); //max number of occurences
163 var _current = _vals[_vals.length-1]; //current occurrence
164
165 _a.click(function(e) {
166 var _new = _input.clone();
167
168 var _id = '';
169
170 for ( var i = 0 ; i < _vals.length -1 ; i++ ) {
171 _id += _vals[i] + '_';
172 }
173
174 _current = Number(_current) + 1;
175 _new.attr('id', _id + _current);
176 _new.attr('name', _id + _current);
177 _new.val('');
178 _a.remove();
179 _parent.append('<br/>');
180 _parent.append(_new);
181 _new.focus();
182 if( _total == '0' || _current < _total ) {
183 var _b = _addLnk();
184 _lnkEvent(_b, _new, _parent);
185 _parent.append(_b);
186 if (_current < _total) {
187 $('#repeat_msg').html('{_T string="Enter up to %count more occurences." pattern="/%count/" replace="COUNT" escape="js"}'.replace(/COUNT/, _total - _current));
188 }
189 } else if (_current == _total) {
190 $('#repeat_msg').remove();
191 }
192 return false;
193 });
194 }
195 {/if}
196
197 $(function(){
198 {if !$masschange}
199 $('.repetable').each(function(){
200 var _total;
201 var _current;
202 var _parent = $(this);
203
204 var _input = $(this).find('input:last');
205 if ( _input.length > 0 ) {
206 while ( $(this).find('input').length > 1 && _input.val() == '' ) {
207 _input.prev('br').remove();
208 _input.remove();
209 _input = $(this).find('input:last')
210 }
211 var _vals = _input[0].id.split(/_/);
212 var _total = $(_input[0]).data('maxrepeat'); //max number of occurences
213 var _current = _vals[_vals.length-1]; //current occurrence
214
215 if ( _total == '0' || _current < _total ) {
216 var _a = _addLnk();
217 $(this).append(_a);
218 _lnkEvent(_a, _input, _parent);
219 }
220 }
221 });
222 {/if}
223 $('.dynamic_date').datepicker({
224 changeMonth: true,
225 changeYear: true,
226 showOn: 'button',
227 buttonText: '<i class="far fa-calendar-alt"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
228 });
229 });
230 </script>
231 {/if}
232 {/if}