23 |
23 |
24 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
24 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
25 from pyams_content.shared.common.interfaces import IWfSharedContent |
25 from pyams_content.shared.common.interfaces import IWfSharedContent |
26 from pyams_content.shared.common.zmi import WfModifiedContentColumnMixin |
26 from pyams_content.shared.common.zmi import WfModifiedContentColumnMixin |
27 from pyams_content.shared.form.field import FormField |
27 from pyams_content.shared.form.field import FormField |
28 from pyams_content.shared.form.interfaces import IFormField, IFormFieldContainer, IFormFieldContainerTarget, \ |
28 from pyams_content.shared.form.interfaces import IFormField, IFormFieldContainer, \ |
29 IFormFieldFactory |
29 IFormFieldContainerTarget, IFormFieldFactory |
30 from pyams_content.zmi import pyams_content |
30 from pyams_content.zmi import pyams_content |
31 from pyams_form.form import AJAXAddForm, ajax_config |
31 from pyams_form.form import AJAXAddForm, ajax_config |
32 from pyams_form.interfaces.form import IFormSecurityContext |
32 from pyams_form.interfaces.form import IFormSecurityContext |
33 from pyams_form.security import ProtectedFormObjectMixin |
33 from pyams_form.security import ProtectedFormObjectMixin |
34 from pyams_i18n.interfaces import II18n |
34 from pyams_i18n.interfaces import II18n |
36 from pyams_skin.container import switch_element_visibility |
36 from pyams_skin.container import switch_element_visibility |
37 from pyams_skin.event import get_json_table_row_refresh_event |
37 from pyams_skin.event import get_json_table_row_refresh_event |
38 from pyams_skin.interfaces.container import ITableWithActions |
38 from pyams_skin.interfaces.container import ITableWithActions |
39 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
39 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
40 from pyams_skin.layer import IPyAMSLayer |
40 from pyams_skin.layer import IPyAMSLayer |
41 from pyams_skin.table import BaseTable, I18nColumn, I18nValueColumn, SorterColumn, TrashColumn, VisibilitySwitcherColumn |
41 from pyams_skin.table import BaseTable, I18nColumn, I18nValueColumn, SorterColumn, TrashColumn, \ |
|
42 VisibilitySwitcherColumn |
42 from pyams_skin.viewlet.menu import MenuItem |
43 from pyams_skin.viewlet.menu import MenuItem |
43 from pyams_skin.viewlet.toolbar import ToolbarAction |
44 from pyams_skin.viewlet.toolbar import ToolbarAction |
44 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config |
45 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config |
45 from pyams_utils.fanstatic import get_resource_path |
46 from pyams_utils.fanstatic import get_resource_path |
46 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
47 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
120 translate = self.request.localizer.translate |
121 translate = self.request.localizer.translate |
121 return translate(_("No currently defined form field.")) |
122 return translate(_("No currently defined form field.")) |
122 return super(FormFieldsContainerTable, self).render() |
123 return super(FormFieldsContainerTable, self).render() |
123 |
124 |
124 |
125 |
125 @adapter_config(name='sorter', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
126 @adapter_config(name='sorter', context=(IFormFieldContainerTarget, IPyAMSLayer, |
|
127 FormFieldsContainerTable), |
126 provides=IColumn) |
128 provides=IColumn) |
127 class FormFieldsContainerSorterColumn(ProtectedFormObjectMixin, SorterColumn): |
129 class FormFieldsContainerSorterColumn(ProtectedFormObjectMixin, SorterColumn): |
128 """Form fields container sorter column""" |
130 """Form fields container sorter column""" |
129 |
131 |
130 |
132 |
131 @adapter_config(name='show-hide', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
133 @adapter_config(name='show-hide', context=(IFormFieldContainerTarget, IPyAMSLayer, |
|
134 FormFieldsContainerTable), |
132 provides=IColumn) |
135 provides=IColumn) |
133 class FormFieldsContainerShowHideColumn(ProtectedFormObjectMixin, VisibilitySwitcherColumn): |
136 class FormFieldsContainerShowHideColumn(ProtectedFormObjectMixin, VisibilitySwitcherColumn): |
134 """Form fields container visibility switcher column""" |
137 """Form fields container visibility switcher column""" |
135 |
138 |
136 |
139 |
137 @view_config(name='switch-form-field-visibility.json', context=IFormFieldContainer, request_type=IPyAMSLayer, |
140 @view_config(name='switch-form-field-visibility.json', context=IFormFieldContainer, |
138 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
141 request_type=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION, |
|
142 renderer='json', xhr=True) |
139 def switch_form_field_visibility(request): |
143 def switch_form_field_visibility(request): |
140 """Set form field visibility""" |
144 """Set form field visibility""" |
141 return switch_element_visibility(request, IFormFieldContainer) |
145 return switch_element_visibility(request, IFormFieldContainer) |
142 |
146 |
143 |
147 |
145 def show_hide_column_security_context_factory(column): |
149 def show_hide_column_security_context_factory(column): |
146 """Show/hide column security context factory""" |
150 """Show/hide column security context factory""" |
147 return column.table.context |
151 return column.table.context |
148 |
152 |
149 |
153 |
150 @adapter_config(name='name', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
154 @adapter_config(name='name', context=(IFormFieldContainerTarget, IPyAMSLayer, |
|
155 FormFieldsContainerTable), |
151 provides=IColumn) |
156 provides=IColumn) |
152 class FormFieldsContainerNameColumn(I18nColumn, WfModifiedContentColumnMixin, GetAttrColumn): |
157 class FormFieldsContainerNameColumn(I18nColumn, WfModifiedContentColumnMixin, GetAttrColumn): |
153 """Form fields container name column""" |
158 """Form fields container name column""" |
154 |
159 |
155 _header = _("Name") |
160 _header = _("Name") |
156 |
161 |
157 attrName = 'name' |
162 attrName = 'name' |
158 weight = 50 |
163 weight = 50 |
159 |
164 |
160 |
165 |
161 @adapter_config(name='label', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
166 @adapter_config(name='label', context=(IFormFieldContainerTarget, IPyAMSLayer, |
|
167 FormFieldsContainerTable), |
162 provides=IColumn) |
168 provides=IColumn) |
163 class FormFieldsContainerLabelColumn(I18nColumn, WfModifiedContentColumnMixin, I18nValueColumn): |
169 class FormFieldsContainerLabelColumn(I18nColumn, WfModifiedContentColumnMixin, I18nValueColumn): |
164 """Form fields container label column""" |
170 """Form fields container label column""" |
165 |
171 |
166 _header = _("Label") |
172 _header = _("Label") |
167 |
173 |
168 attrName = 'label' |
174 attrName = 'label' |
169 weight = 55 |
175 weight = 55 |
170 |
176 |
171 |
177 |
172 @adapter_config(name='type', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
178 @adapter_config(name='type', context=(IFormFieldContainerTarget, IPyAMSLayer, |
|
179 FormFieldsContainerTable), |
173 provides=IColumn) |
180 provides=IColumn) |
174 class FormFieldsContainerTypeColumn(I18nColumn, WfModifiedContentColumnMixin, GetAttrColumn): |
181 class FormFieldsContainerTypeColumn(I18nColumn, WfModifiedContentColumnMixin, GetAttrColumn): |
175 """Form fields container label column""" |
182 """Form fields container label column""" |
176 |
183 |
177 _header = _("Field type") |
184 _header = _("Field type") |
185 else: |
192 else: |
186 label = _("-- unknown field type --") |
193 label = _("-- unknown field type --") |
187 return self.request.localizer.translate(label) |
194 return self.request.localizer.translate(label) |
188 |
195 |
189 |
196 |
190 @adapter_config(name='trash', context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
197 @adapter_config(name='trash', context=(IFormFieldContainerTarget, IPyAMSLayer, |
|
198 FormFieldsContainerTable), |
191 provides=IColumn) |
199 provides=IColumn) |
192 class FormFieldsContainerTrashColumn(ProtectedFormObjectMixin, TrashColumn): |
200 class FormFieldsContainerTrashColumn(ProtectedFormObjectMixin, TrashColumn): |
193 """Form fields container trash column""" |
201 """Form fields container trash column""" |
194 |
202 |
195 |
203 |
196 @adapter_config(context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), provides=IValues) |
204 @adapter_config(context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldsContainerTable), |
|
205 provides=IValues) |
197 class FormFieldsContainerValues(ContextRequestViewAdapter): |
206 class FormFieldsContainerValues(ContextRequestViewAdapter): |
198 """Form fields container values""" |
207 """Form fields container values""" |
199 |
208 |
200 @property |
209 @property |
201 def values(self): |
210 def values(self): |
209 |
218 |
210 title = _("Form fields list") |
219 title = _("Form fields list") |
211 table_class = FormFieldsContainerTable |
220 table_class = FormFieldsContainerTable |
212 |
221 |
213 |
222 |
214 @view_config(name='set-form-fields-order.json', context=IFormFieldContainer, request_type=IPyAMSLayer, |
223 @view_config(name='set-form-fields-order.json', context=IFormFieldContainer, |
215 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
224 request_type=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION, |
|
225 renderer='json', xhr=True) |
216 def set_form_fields_order(request): |
226 def set_form_fields_order(request): |
217 """Update form fields order""" |
227 """Update form fields order""" |
218 order = list(map(str, json.loads(request.params.get('names')))) |
228 order = list(map(str, json.loads(request.params.get('names')))) |
219 request.context.updateOrder(order) |
229 request.context.updateOrder(order) |
220 return {'status': 'success'} |
230 return {'status': 'success'} |
267 if name in container: |
277 if name in container: |
268 event.form.widgets.errors += (Invalid(_("Specified name is already used!")),) |
278 event.form.widgets.errors += (Invalid(_("Specified name is already used!")),) |
269 event.data['name'] = name |
279 event.data['name'] = name |
270 |
280 |
271 |
281 |
272 @pagelet_config(name='properties.html', context=IFormField, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION) |
282 @pagelet_config(name='properties.html', context=IFormField, layer=IPyAMSLayer, |
|
283 permission=VIEW_SYSTEM_PERMISSION) |
273 @ajax_config(name='properties.json', context=IFormField, layer=IPyAMSLayer) |
284 @ajax_config(name='properties.json', context=IFormField, layer=IPyAMSLayer) |
274 class FormFieldPropertiesEditForm(AdminDialogEditForm): |
285 class FormFieldPropertiesEditForm(AdminDialogEditForm): |
275 """Form field properties edit form""" |
286 """Form field properties edit form""" |
276 |
287 |
277 prefix = 'field_properties.' |
288 prefix = 'field_properties.' |
295 def get_ajax_output(self, changes): |
306 def get_ajax_output(self, changes): |
296 output = super(self.__class__, self).get_ajax_output(changes) |
307 output = super(self.__class__, self).get_ajax_output(changes) |
297 if changes: |
308 if changes: |
298 container = get_parent(self.context, IFormFieldContainerTarget) |
309 container = get_parent(self.context, IFormFieldContainerTarget) |
299 output.setdefault('events', []).append( |
310 output.setdefault('events', []).append( |
300 get_json_table_row_refresh_event(container, self.request, FormFieldsContainerTable, self.context)) |
311 get_json_table_row_refresh_event(container, self.request, |
|
312 FormFieldsContainerTable, self.context)) |
301 return output |
313 return output |