]> git.agnieray.net Git - galette.git/blob - galette/templates/default/config_fields.tpl
Add CSRF Middleware
[galette.git] / galette / templates / default / config_fields.tpl
1 {extends file="page.tpl"}
2 {block name="content"}
3 <p id="collapse" class="ui-state-default ui-corner-all">
4 <span class="ui-icon ui-icon-circle-arrow-s"></span>
5 {_T string="Collapse all"}
6 </p>
7 <form action="{path_for name="configureCoreFields"}" method="post" id="config_fields_form">
8 <div id="members_tab">
9 {foreach item=category from=$categories name=categories_list}
10 <fieldset class="cssform large" id="cat_{$smarty.foreach.categories_list.iteration}">
11 {assign var='catname' value=$category->category}
12 <input type="hidden" name="categories[]" id="category{$smarty.foreach.categories_list.iteration}" value="{$category->id_field_category}"/>
13 <legend class="ui-state-active ui-corner-top">{_T string=$catname}</legend>
14 <ul id="sortable_{$smarty.foreach.categories_list.iteration}" class="fields_list connectedSortable">
15 <li class="listing ">
16 <span class="label">{_T string="Field name"}</span>
17 <span class="yesno">{_T string="Required"}</span>
18 <span class="access">{_T string="Permissions"}</span>
19 </li>
20 {assign var='fs' value=$category->id_field_category}
21 {foreach key=col item=field from=$categorized_fields[$fs] name=fields_list}
22 {if ($preferences->pref_show_id or $field.field_id neq 'id_adh') and $field.field_id neq 'parent_id'}
23 {assign var='fid' value=$field.field_id}
24 <li class="tbl_line_{if $smarty.foreach.fields_list.iteration % 2 eq 0}even{else}odd{/if}">
25 <span class="label" data-title="{_T string="Field name"}">
26 <input type="hidden" name="fields[]" value="{$fid}"/>
27 <input type="hidden" name="{$fid}_category" value="{$category->id_field_category}"/>
28 <input type="hidden" name="{$fid}_label" value="{$field.label}"/>
29 {$field.label}
30 </span>
31 <span data-title="{_T string="Required"}" class="yesno" title="{if in_array($fid, $non_required)}{_T string="Field '%field' cannot be set as required." pattern="/%field/" replace=$field.label}{else}{_T string="Mark '%field' as (not) required" pattern="/%field/" replace=$field.label}{/if}">
32 <label for="{$fid}_required_yes">{_T string="Yes"}</label>
33 <input type="radio" name="{$fid}_required" id="{$fid}_required_yes" value="1"{if $field.required} checked="checked"{/if}{if in_array($fid, $non_required)} disabled="disabled"{/if}/>
34 <label for="{$fid}_required_no">{_T string="No"}</label>
35 <input type="radio" name="{$fid}_required" id="{$fid}_required_no" value="0"{if !$field.required} checked="checked"{/if}{if in_array($fid, $non_required)} disabled="disabled"{/if}/>
36 </span>
37 <span data-title="{_T string="Permissions"}" class="access" title="{_T string="Change '%field' permissions" pattern="/%field/" replace=$field.label}">
38 <select name="{$fid}_visible" id="{$fid}_visible">
39 <option value="{Galette\Entity\FieldsConfig::NOBODY}"{if $field.visible eq constant('Galette\Entity\FieldsConfig::NOBODY')} selected="selected"{/if}>{_T string="Inaccessible"}</option>
40 <option value="{Galette\Entity\FieldsConfig::ADMIN}"{if $field.visible eq constant('Galette\Entity\FieldsConfig::ADMIN')} selected="selected"{/if}>{_T string="Administrator"}</option>
41 <option value="{Galette\Entity\FieldsConfig::STAFF}"{if $field.visible eq constant('Galette\Entity\FieldsConfig::STAFF')} selected="selected"{/if}>{_T string="Staff member"}</option>
42 <option value="{Galette\Entity\FieldsConfig::MANAGER}"{if $field.visible eq constant('Galette\Entity\FieldsConfig::MANAGER')} selected="selected"{/if}>{_T string="Group manager"}</option>
43 <option value="{Galette\Entity\FieldsConfig::USER_READ}"{if $field.visible eq constant('Galette\Entity\FieldsConfig::USER_READ')} selected="selected"{/if}>{_T string="Read only"}</option>
44 <option value="{Galette\Entity\FieldsConfig::USER_WRITE}"{if $field.visible eq constant('Galette\Entity\FieldsConfig::USER_WRITE')} selected="selected"{/if}>{_T string="Read/Write"}</option>
45 </select>
46 </span>
47 </li>
48 {/if}
49 {/foreach}
50 </ul>
51 </fieldset>
52 {/foreach}
53 </div>
54 <div class="button-container">
55 <button type="submit" class="action">
56 <i class="fas fa-save fa-fw"></i> {_T string="Save"}
57 </button>
58 {include file="forms_types/csrf.tpl"}
59 </div>
60 </form>
61 {/block}
62
63 {block name="javascripts"}
64 <script type="text/javascript">
65 var _initSortable = function(){
66 $('.fields_list').sortable({
67 items: 'li:not(.listing)',
68 connectWith: '.connectedSortable',
69 update: function(event, ui) {
70 // When sort is updated, we must check for the newer category item belongs to
71 var _item = $(ui.item[0]);
72 var _category = _item.parent().prevAll('input[name^=categories]').attr('value');
73 _item.find('input[name$=category]').attr('value', _category);
74 }
75 }).disableSelection();
76
77 $('#members_tab').sortable({
78 items: 'fieldset'
79 });
80 }
81
82 var _bindCollapse = function() {
83 $('#collapse').click(function(){
84 var _this = $(this);
85 var _expandTxt = '{_T string="Expand all"}';
86 var _collapseTxt = '{_T string="Collapse all"}';
87
88 var _span = _this.children('span');
89 var _isExpand = false;
90
91 var _child = _this.children('.ui-icon');
92
93 if( _child.is('.ui-icon-circle-arrow-e') ) {
94 _this.html(_collapseTxt);
95 } else {
96 _isExpand = true;
97 _this.html(_expandTxt);
98 }
99 _this.prepend(_span);
100
101 _child.toggleClass('ui-icon-circle-arrow-e').toggleClass('ui-icon-circle-arrow-s');
102
103 $('legend a').each(function(){
104 var _visible = $(this).parent('legend').parent('fieldset').children('ul').is(':visible');
105 if( _isExpand && _visible ) {
106 $(this).click();
107 } else if( !_isExpand && !_visible){
108 $(this).click();
109 }
110 });
111 });
112 }
113
114 var _warnings = [];
115 var _checkCoherence = function(index, elt){
116 var _elt = $(elt);
117 var _disabled = _elt.find('.yesno input:disabled, .access input:disabled');
118 if ( _disabled.length == 0 ) {
119 var _required = parseInt(_elt.find('.yesno input:checked').val());
120 var _accessible = parseInt(_elt.find('.access option:selected').val());
121
122
123 if ( _required === 1 && _accessible === 0 ) {
124 _elt.find('.label').addClass('warnings');
125 _warnings[_warnings.length] = _elt;
126 }
127 }
128 }
129
130 var _bindForm = function(){
131 $('#config_fields_form').submit(function(){
132
133 _warnings = [];
134 $('.warnings').removeClass('warnings');
135 $('.fields_list li').each(_checkCoherence);
136
137 if ( _warnings.length > 0 ) {
138 var _w = $('#warnings');
139
140 _w.find('li').remove();
141 $.each(_warnings, function(i,w){
142 var _val = w.find('.label').text().trim();
143 _w.find('ul').append('<li>' + _val + '</li>');
144 console.log(w);
145 });
146
147 _w.dialog({
148 modal: true,
149 buttons: {
150 Ok: function() {
151 $(this).dialog('close');
152 }
153 }
154 });
155 return false;
156 } else {
157 return true;
158 }
159 });
160 }
161
162 $(function() {
163 $('body').append($('<div id="warnings" title="{_T string="Warning" escape="js"}"><p>{_T string="Some warnings has been thrown:" escape="js"}</p><ul></ul><p>{_T string="Please correct above warnings to continue."}</p></div>').hide());
164
165 _collapsibleFieldsets();
166 _bindForm();
167
168 _bindCollapse();
169
170 _initSortable();
171
172 $('#add_category').click(function() {
173 var _fieldsets = $('fieldset[id^=cat_]');
174 var _cat_iter = _fieldsets.length + 1;
175
176 var _fs = $(_fieldsets[0]).clone();
177 _fs.attr('id', 'cat_' + _cat_iter).children('ul').attr('id', 'sortable_' + _cat_iter);
178 _fs.find('li:not(.listing)').remove();
179
180 var _legend = _fs.children('legend');
181 var _a = _legend.children('a');
182
183 _legend.html('<input type="text" name="categories[]" id="category' + _cat_iter + '" value="New category #' + _cat_iter + '"/>');
184 _legend.prepend(_a);
185 _a.spinDown();
186
187 $('#members_tab').append(_fs);
188 _initSortable();
189 _bindCollapse();
190
191 $(this).attr('href', '#cat_' + _cat_iter);
192 //Getting
193 var _url = document.location.toString();
194 if (_url.match('#')) { // the URL contains an anchor
195 var _url = _url.split('#')[0];
196 }
197 _url += '#cat_' + _cat_iter;
198
199 document.location = _url;
200 _legend.children(':input').focus();
201 return false;
202 });
203 });
204 </script>
205 {/block}