--- a/src/pyams_portal/zmi/layout.py Mon Jun 11 15:30:26 2018 +0200
+++ b/src/pyams_portal/zmi/layout.py Mon Jun 11 15:31:15 2018 +0200
@@ -31,7 +31,7 @@
from z3c.form.interfaces import IDataExtractedEvent, HIDDEN_MODE
# import packages
-from pyams_form.form import AJAXAddForm, AJAXEditForm
+from pyams_form.form import AJAXAddForm, AJAXEditForm, ajax_config
from pyams_pagelet.pagelet import pagelet_config
from pyams_portal.zmi.template import PortalTemplateHeaderAdapter
from pyams_skin.viewlet.menu import MenuItem
@@ -127,10 +127,14 @@
for portlet_name in configuration.toolbar_portlets or ()])
def get_portlet(self, name):
- return self.request.registry.getUtility(IPortlet, name=name)
+ return self.request.registry.queryUtility(IPortlet, name=name)
def get_portlet_label(self, name):
- return self.request.localizer.translate(self.get_portlet(name).label)
+ portlet = self.get_portlet(name)
+ if portlet is not None:
+ return self.request.localizer.translate(portlet.label)
+ else:
+ return self.request.localizer.translate(_("{{ missing portlet }}"))
def get_portlet_preview(self, portlet_id):
settings = self.portlet_configuration.get_portlet_configuration(portlet_id).settings
@@ -211,6 +215,8 @@
@pagelet_config(name='add-template-slot.html', context=IPortalTemplate, layer=IPyAMSLayer,
permission=MANAGE_TEMPLATE_PERMISSION)
+@ajax_config(name='add-template-slot.json', context=IPortalTemplate, layer=IPyAMSLayer,
+ permission=MANAGE_TEMPLATE_PERMISSION, base=AJAXAddForm)
class PortalTemplateSlotAddForm(AdminDialogAddForm):
"""Portal template slot add form"""
@@ -223,7 +229,6 @@
icon_css_class = 'fa fa-fw fa-columns'
fields = field.Fields(ISlot)
- ajax_handler = 'add-template-slot.json'
edit_permission = None
def updateWidgets(self, prefix=None):
@@ -237,21 +242,6 @@
config = IPortalTemplateConfiguration(self.context)
return config.add_slot(data.get('name'), data.get('row_id'))
-
-@subscriber(IDataExtractedEvent, form_selector=PortalTemplateSlotAddForm)
-def handle_new_slot_data_extraction(event):
- """Handle new slot form data extraction"""
- config = IPortalTemplateConfiguration(event.form.context)
- name = event.data.get('name')
- if name in config.slot_names:
- event.form.widgets.errors += (Invalid(_("Specified name is already used!")),)
-
-
-@view_config(name='add-template-slot.json', context=IPortalTemplate, request_type=IPyAMSLayer,
- permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
-class PortalTemplateSlotAJAXAddForm(AJAXAddForm, PortalTemplateSlotAddForm):
- """Portal template slot add form, AJAX handler"""
-
def get_ajax_output(self, changes):
return {
'status': 'callback',
@@ -263,6 +253,15 @@
}
+@subscriber(IDataExtractedEvent, form_selector=PortalTemplateSlotAddForm)
+def handle_new_slot_data_extraction(event):
+ """Handle new slot form data extraction"""
+ config = IPortalTemplateConfiguration(event.form.context)
+ name = event.data.get('name')
+ if name in config.slot_names:
+ event.form.widgets.errors += (Invalid(_("Specified name is already used!")),)
+
+
@view_config(name='set-template-slot-order.json', context=IPortalTemplate, request_type=IPyAMSLayer,
permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
def set_template_slot_order(request):
@@ -296,6 +295,7 @@
@pagelet_config(name='slot-properties.html', context=IPortalTemplate, layer=IPyAMSLayer,
permission=MANAGE_TEMPLATE_PERMISSION)
+@ajax_config(name='slot-properties.json', context=IPortalTemplate, layer=IPyAMSLayer)
class PortalTemplateSlotPropertiesEditForm(AdminDialogEditForm):
"""Slot properties edit form"""
@@ -313,7 +313,6 @@
label_css_class = 'control-label col-md-5'
input_css_class = 'col-md-7'
- ajax_handler = 'slot-properties.json'
edit_permission = MANAGE_TEMPLATE_PERMISSION
def __init__(self, context, request):
@@ -328,12 +327,6 @@
super(PortalTemplateSlotPropertiesEditForm, self).updateWidgets(prefix)
self.widgets['slot_name'].mode = HIDDEN_MODE
-
-@view_config(name='slot-properties.json', context=IPortalTemplate, request_type=IPyAMSLayer,
- permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
-class PortalTemplateSlotPropertiesAJAXEditForm(AJAXEditForm, PortalTemplateSlotPropertiesEditForm):
- """Slot properties edit form, AJAX renderer"""
-
def get_ajax_output(self, changes):
if changes:
slot_name = self.widgets['slot_name'].value
@@ -347,7 +340,7 @@
}
}
else:
- return super(PortalTemplateSlotPropertiesAJAXEditForm, self).get_ajax_output(changes)
+ return super(self.__class__, self).get_ajax_output(changes)
@view_config(name='delete-template-slot.json', context=IPortalTemplate, request_type=IPyAMSLayer,
@@ -384,6 +377,8 @@
@pagelet_config(name='add-template-portlet.html', context=IPortalTemplate, layer=IPyAMSLayer,
permission=MANAGE_TEMPLATE_PERMISSION)
+@ajax_config(name='add-template-portlet.json', context=IPortalTemplate, layer=IPyAMSLayer,
+ permission=MANAGE_TEMPLATE_PERMISSION, base=AJAXAddForm)
class PortalTemplatePortletAddForm(AdminDialogAddForm):
"""Portal template portlet add form"""
@@ -396,7 +391,6 @@
icon_css_class = 'fa fa-fw fa-columns'
fields = field.Fields(IPortletAddingInfo)
- ajax_handler = 'add-template-portlet.json'
edit_permission = None
def createAndAdd(self, data):
@@ -404,12 +398,6 @@
config = IPortalTemplateConfiguration(self.context)
return config.add_portlet(data.get('portlet_name'), data.get('slot_name'))
-
-@view_config(name='add-template-portlet.json', context=IPortalTemplate, request_type=IPyAMSLayer,
- permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
-class PortalTemplatePortletAJAXAddForm(AJAXAddForm, PortalTemplatePortletAddForm):
- """Portal template portlet add form, AJAX handler"""
-
def get_ajax_output(self, changes):
configuration = IPortalPortletsConfiguration(self.context)
settings = configuration.get_portlet_configuration(changes['portlet_id']).settings