]> git.agnieray.net Git - galette.git/blob - galette/templates/default/config_fields.tpl
12849db7aa74bdb00d399c981a2c56bbafe43717
[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 </div>
59 </form>
60 {/block}
61
62 {block name="javascripts"}
63 <script type="text/javascript">
64 var _initSortable = function(){
65 $('.fields_list').sortable({
66 items: 'li:not(.listing)',
67 connectWith: '.connectedSortable',
68 update: function(event, ui) {
69 // When sort is updated, we must check for the newer category item belongs to
70 var _item = $(ui.item[0]);
71 var _category = _item.parent().prevAll('input[name^=categories]').attr('value');
72 _item.find('input[name$=category]').attr('value', _category);
73 }
74 }).disableSelection();
75
76 $('#members_tab').sortable({
77 items: 'fieldset'
78 });
79 }
80
81 var _bindCollapse = function() {
82 $('#collapse').click(function(){
83 var _this = $(this);
84 var _expandTxt = '{_T string="Expand all"}';
85 var _collapseTxt = '{_T string="Collapse all"}';
86
87 var _span = _this.children('span');
88 var _isExpand = false;
89
90 var _child = _this.children('.ui-icon');
91
92 if( _child.is('.ui-icon-circle-arrow-e') ) {
93 _this.html(_collapseTxt);
94 } else {
95 _isExpand = true;
96 _this.html(_expandTxt);
97 }
98 _this.prepend(_span);
99
100 _child.toggleClass('ui-icon-circle-arrow-e').toggleClass('ui-icon-circle-arrow-s');
101
102 $('legend a').each(function(){
103 var _visible = $(this).parent('legend').parent('fieldset').children('ul').is(':visible');
104 if( _isExpand && _visible ) {
105 $(this).click();
106 } else if( !_isExpand && !_visible){
107 $(this).click();
108 }
109 });
110 });
111 }
112
113 var _warnings = [];
114 var _checkCoherence = function(index, elt){
115 var _elt = $(elt);
116 var _disabled = _elt.find('.yesno input:disabled, .access input:disabled');
117 if ( _disabled.length == 0 ) {
118 var _required = parseInt(_elt.find('.yesno input:checked').val());
119 var _accessible = parseInt(_elt.find('.access option:selected').val());
120
121
122 if ( _required === 1 && _accessible === 0 ) {
123 _elt.find('.label').addClass('warnings');
124 _warnings[_warnings.length] = _elt;
125 }
126 }
127 }
128
129 var _bindForm = function(){
130 $('#config_fields_form').submit(function(){
131
132 _warnings = [];
133 $('.warnings').removeClass('warnings');
134 $('.fields_list li').each(_checkCoherence);
135
136 if ( _warnings.length > 0 ) {
137 var _w = $('#warnings');
138
139 _w.find('li').remove();
140 $.each(_warnings, function(i,w){
141 var _val = w.find('.label').text().trim();
142 _w.find('ul').append('<li>' + _val + '</li>');
143 console.log(w);
144 });
145
146 _w.dialog({
147 modal: true,
148 buttons: {
149 Ok: function() {
150 $(this).dialog('close');
151 }
152 }
153 });
154 return false;
155 } else {
156 return true;
157 }
158 });
159 }
160
161 $(function() {
162 $('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());
163
164 _collapsibleFieldsets();
165 _bindForm();
166
167 _bindCollapse();
168
169 _initSortable();
170
171 $('#add_category').click(function() {
172 var _fieldsets = $('fieldset[id^=cat_]');
173 var _cat_iter = _fieldsets.length + 1;
174
175 var _fs = $(_fieldsets[0]).clone();
176 _fs.attr('id', 'cat_' + _cat_iter).children('ul').attr('id', 'sortable_' + _cat_iter);
177 _fs.find('li:not(.listing)').remove();
178
179 var _legend = _fs.children('legend');
180 var _a = _legend.children('a');
181
182 _legend.html('<input type="text" name="categories[]" id="category' + _cat_iter + '" value="New category #' + _cat_iter + '"/>');
183 _legend.prepend(_a);
184 _a.spinDown();
185
186 $('#members_tab').append(_fs);
187 _initSortable();
188 _bindCollapse();
189
190 $(this).attr('href', '#cat_' + _cat_iter);
191 //Getting
192 var _url = document.location.toString();
193 if (_url.match('#')) { // the URL contains an anchor
194 var _url = _url.split('#')[0];
195 }
196 _url += '#cat_' + _cat_iter;
197
198 document.location = _url;
199 _legend.children(':input').focus();
200 return false;
201 });
202 });
203 </script>
204 {/block}