31 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent |
31 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent |
32 from z3c.table.interfaces import IValues, IColumn |
32 from z3c.table.interfaces import IValues, IColumn |
33 |
33 |
34 # import packages |
34 # import packages |
35 from pyams_content.shared.common.types import DataType, SubType |
35 from pyams_content.shared.common.types import DataType, SubType |
36 from pyams_form.form import AJAXAddForm, AJAXEditForm |
36 from pyams_form.form import AJAXAddForm, ajax_config |
37 from pyams_form.security import ProtectedFormObjectMixin |
37 from pyams_form.security import ProtectedFormObjectMixin |
38 from pyams_pagelet.pagelet import pagelet_config |
38 from pyams_pagelet.pagelet import pagelet_config |
39 from pyams_skin.container import delete_container_element |
39 from pyams_skin.container import delete_container_element |
40 from pyams_skin.event import get_json_table_refresh_event |
40 from pyams_skin.event import get_json_table_refresh_event |
41 from pyams_skin.table import BaseTable, SorterColumn, TrashColumn, NameColumn, ActionColumn |
41 from pyams_skin.table import BaseTable, SorterColumn, TrashColumn, NameColumn, ActionColumn |
237 modal_target = True |
237 modal_target = True |
238 |
238 |
239 |
239 |
240 @pagelet_config(name='add-data-type.html', context=ITypedSharedTool, layer=IPyAMSLayer, |
240 @pagelet_config(name='add-data-type.html', context=ITypedSharedTool, layer=IPyAMSLayer, |
241 permission=MANAGE_TOOL_PERMISSION) |
241 permission=MANAGE_TOOL_PERMISSION) |
|
242 @ajax_config(name='add-data-type.json', context=ITypedSharedTool, layer=IPyAMSLayer, base=AJAXAddForm) |
242 class DataTypeAddForm(AdminDialogAddForm): |
243 class DataTypeAddForm(AdminDialogAddForm): |
243 """Data type add form""" |
244 """Data type add form""" |
244 |
245 |
245 legend = _("Add new data type") |
246 legend = _("Add new data type") |
246 icon_css_class = 'fa fa-fw fa-folder-o' |
247 icon_css_class = 'fa fa-fw fa-folder-o' |
247 label_css_class = 'control-label col-md-4' |
248 label_css_class = 'control-label col-md-4' |
248 input_css_class = 'col-md-8' |
249 input_css_class = 'col-md-8' |
249 |
250 |
250 fields = field.Fields(IDataType).omit('__parent__', '__name__') |
251 fields = field.Fields(IDataType).omit('__parent__', '__name__') |
251 |
252 |
252 ajax_handler = 'add-data-type.json' |
|
253 edit_permission = MANAGE_TOOL_PERMISSION |
253 edit_permission = MANAGE_TOOL_PERMISSION |
254 |
254 |
255 def create(self, data): |
255 def create(self, data): |
256 return DataType() |
256 return DataType() |
257 |
257 |
258 def add(self, object): |
258 def add(self, object): |
259 name = translate_string(object.name, spaces='-') |
259 name = translate_string(object.name, spaces='-') |
260 ITypedDataManager(self.context)[name] = object |
260 ITypedDataManager(self.context)[name] = object |
261 |
261 |
262 def nextURL(self): |
262 def nextURL(self): |
263 return absolute_url(self.context, self.request, 'admin#data-types.html') |
263 return '#data-types.html' |
264 |
264 |
265 |
265 |
266 @subscriber(IDataExtractedEvent, form_selector=DataTypeAddForm) |
266 @subscriber(IDataExtractedEvent, form_selector=DataTypeAddForm) |
267 def handle_datatype_add_form_data_extraction(event): |
267 def handle_datatype_add_form_data_extraction(event): |
268 """Check new data type for existing name""" |
268 """Check new data type for existing name""" |
271 name = event.data.get('name') |
271 name = event.data.get('name') |
272 if translate_string(name, spaces='-') in manager: |
272 if translate_string(name, spaces='-') in manager: |
273 event.form.widgets.errors += (Invalid(_("Specified type name is already used!")),) |
273 event.form.widgets.errors += (Invalid(_("Specified type name is already used!")),) |
274 |
274 |
275 |
275 |
276 @view_config(name='add-data-type.json', context=ITypedSharedTool, request_type=IPyAMSLayer, |
|
277 permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True) |
|
278 class DataTypeAJAXAddForm(AJAXAddForm, DataTypeAddForm): |
|
279 """Data type add form, JSON renderer""" |
|
280 |
|
281 def nextURL(self): |
|
282 return '#data-types.html' |
|
283 |
|
284 |
|
285 @pagelet_config(name='properties.html', context=IDataType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION) |
276 @pagelet_config(name='properties.html', context=IDataType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION) |
|
277 @ajax_config(name='properties.json', context=IDataType, layer=IPyAMSLayer) |
286 class DataTypeEditForm(AdminDialogEditForm): |
278 class DataTypeEditForm(AdminDialogEditForm): |
287 """Data type edit form""" |
279 """Data type edit form""" |
288 |
280 |
289 prefix = 'datatype_properties.' |
281 prefix = 'datatype_properties.' |
290 |
282 |
293 label_css_class = 'control-label col-md-4' |
285 label_css_class = 'control-label col-md-4' |
294 input_css_class = 'col-md-8' |
286 input_css_class = 'col-md-8' |
295 |
287 |
296 fields = field.Fields(IDataType).omit('__parent__', '__name__') |
288 fields = field.Fields(IDataType).omit('__parent__', '__name__') |
297 |
289 |
298 ajax_handler = 'properties.json' |
|
299 edit_permission = MANAGE_TOOL_PERMISSION |
290 edit_permission = MANAGE_TOOL_PERMISSION |
300 |
291 |
301 def updateWidgets(self, prefix=None): |
292 def updateWidgets(self, prefix=None): |
302 super(DataTypeEditForm, self).updateWidgets(prefix) |
293 super(DataTypeEditForm, self).updateWidgets(prefix) |
303 if 'name' in self.widgets: |
294 if 'name' in self.widgets: |
304 self.widgets['name'].mode = DISPLAY_MODE |
295 self.widgets['name'].mode = DISPLAY_MODE |
305 |
|
306 |
|
307 @view_config(name='properties.json', context=IDataType, request_type=IPyAMSLayer, |
|
308 permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True) |
|
309 class DataTypeAJAXEditForm(AJAXEditForm, DataTypeEditForm): |
|
310 """Data type edit form, JSON renderer""" |
|
311 |
296 |
312 |
297 |
313 # |
298 # |
314 # Subtypes views |
299 # Subtypes views |
315 # |
300 # |
458 modal_target = True |
443 modal_target = True |
459 |
444 |
460 |
445 |
461 @pagelet_config(name='add-data-subtype.html', context=IDataType, layer=IPyAMSLayer, |
446 @pagelet_config(name='add-data-subtype.html', context=IDataType, layer=IPyAMSLayer, |
462 permission=MANAGE_TOOL_PERMISSION) |
447 permission=MANAGE_TOOL_PERMISSION) |
|
448 @ajax_config(name='add-data-subtype.json', context=IDataType, layer=IPyAMSLayer, base=AJAXAddForm) |
463 class DataSubtypeAddForm(AdminDialogAddForm): |
449 class DataSubtypeAddForm(AdminDialogAddForm): |
464 """Data subtype add form""" |
450 """Data subtype add form""" |
465 |
451 |
466 legend = _("Add new subtype") |
452 legend = _("Add new subtype") |
467 icon_css_class = 'fa fa-fw fa-folder-o' |
453 icon_css_class = 'fa fa-fw fa-folder-o' |
468 label_css_class = 'control-label col-md-4' |
454 label_css_class = 'control-label col-md-4' |
469 input_css_class = 'col-md-8' |
455 input_css_class = 'col-md-8' |
470 |
456 |
471 fields = field.Fields(ISubType).omit('__parent__', '__name__') |
457 fields = field.Fields(ISubType).omit('__parent__', '__name__') |
472 |
458 |
473 ajax_handler = 'add-data-subtype.json' |
|
474 edit_permission = MANAGE_TOOL_PERMISSION |
459 edit_permission = MANAGE_TOOL_PERMISSION |
475 |
460 |
476 def create(self, data): |
461 def create(self, data): |
477 return SubType() |
462 return SubType() |
478 |
463 |
480 name = translate_string(object.name, spaces='-') |
465 name = translate_string(object.name, spaces='-') |
481 IDataType(self.context)[name] = object |
466 IDataType(self.context)[name] = object |
482 |
467 |
483 def nextURL(self): |
468 def nextURL(self): |
484 return absolute_url(self.context, self.request, 'admin#data-types.html') |
469 return absolute_url(self.context, self.request, 'admin#data-types.html') |
|
470 |
|
471 def get_ajax_output(self, changes): |
|
472 return { |
|
473 'status': 'success', |
|
474 'message': self.request.localizer.translate(_("Subtype was correctly added.")), |
|
475 'events': [ |
|
476 get_json_table_refresh_event(self.context, self.request, DatatypeSubtypesTable) |
|
477 ] |
|
478 } |
485 |
479 |
486 |
480 |
487 @subscriber(IDataExtractedEvent, form_selector=DataSubtypeAddForm) |
481 @subscriber(IDataExtractedEvent, form_selector=DataSubtypeAddForm) |
488 def handle_subtype_add_form_data_extraction(event): |
482 def handle_subtype_add_form_data_extraction(event): |
489 """Check new data subtype for existing name""" |
483 """Check new data subtype for existing name""" |
492 name = event.data.get('name') |
486 name = event.data.get('name') |
493 if translate_string(name, spaces='-') in manager: |
487 if translate_string(name, spaces='-') in manager: |
494 event.form.widgets.errors += (Invalid(_("Specified subtype name is already used!")),) |
488 event.form.widgets.errors += (Invalid(_("Specified subtype name is already used!")),) |
495 |
489 |
496 |
490 |
497 @view_config(name='add-data-subtype.json', context=IDataType, request_type=IPyAMSLayer, |
|
498 permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True) |
|
499 class DataSubtypeAJAXAddForm(AJAXAddForm, DataSubtypeAddForm): |
|
500 """Data subtype add form, JSON renderer""" |
|
501 |
|
502 def get_ajax_output(self, changes): |
|
503 return { |
|
504 'status': 'success', |
|
505 'message': self.request.localizer.translate(_("Subtype was correctly added.")), |
|
506 'events': [ |
|
507 get_json_table_refresh_event(self.context, self.request, DatatypeSubtypesTable) |
|
508 ] |
|
509 } |
|
510 |
|
511 |
|
512 @pagelet_config(name='properties.html', context=ISubType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION) |
491 @pagelet_config(name='properties.html', context=ISubType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION) |
|
492 @ajax_config(name='properties.json', context=ISubType, layer=IPyAMSLayer) |
513 class DataSubtypeEditForm(AdminDialogEditForm): |
493 class DataSubtypeEditForm(AdminDialogEditForm): |
514 """Data subtype edit form""" |
494 """Data subtype edit form""" |
515 |
495 |
516 prefix = 'subtype_properties.' |
496 prefix = 'subtype_properties.' |
517 |
497 |
520 label_css_class = 'control-label col-md-4' |
500 label_css_class = 'control-label col-md-4' |
521 input_css_class = 'col-md-8' |
501 input_css_class = 'col-md-8' |
522 |
502 |
523 fields = field.Fields(ISubType).omit('__parent__', '__name__') |
503 fields = field.Fields(ISubType).omit('__parent__', '__name__') |
524 |
504 |
525 ajax_handler = 'properties.json' |
|
526 edit_permission = MANAGE_TOOL_PERMISSION |
505 edit_permission = MANAGE_TOOL_PERMISSION |
527 |
506 |
528 def updateWidgets(self, prefix=None): |
507 def updateWidgets(self, prefix=None): |
529 super(DataSubtypeEditForm, self).updateWidgets(prefix) |
508 super(DataSubtypeEditForm, self).updateWidgets(prefix) |
530 if 'name' in self.widgets: |
509 if 'name' in self.widgets: |
531 self.widgets['name'].mode = DISPLAY_MODE |
510 self.widgets['name'].mode = DISPLAY_MODE |
532 |
|
533 |
|
534 @view_config(name='properties.json', context=ISubType, request_type=IPyAMSLayer, |
|
535 permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True) |
|
536 class DataSubtypeAJAXEditForm(AJAXEditForm, DataSubtypeEditForm): |
|
537 """Data subtype edit form, JSON renderer""" |
|
538 |
511 |
539 def get_ajax_output(self, changes): |
512 def get_ajax_output(self, changes): |
540 if 'label' in changes.get(IBaseDataType, ()): |
513 if 'label' in changes.get(IBaseDataType, ()): |
541 target = get_parent(self.context, IDataType) |
514 target = get_parent(self.context, IDataType) |
542 return { |
515 return { |