--- a/src/pyams_portal/zmi/portlet.py Thu Oct 08 12:26:42 2015 +0200
+++ b/src/pyams_portal/zmi/portlet.py Mon Jan 18 18:09:46 2016 +0100
@@ -16,48 +16,76 @@
# import standard library
# import interfaces
-from pyams_portal.interfaces import IPortlet
-from z3c.form.interfaces import HIDDEN_MODE
+from pyams_form.interfaces.form import IInnerTabForm
+from pyams_portal.interfaces import IPortlet, IPortalTemplate, IPortalPage, IPortalContext, MANAGE_TEMPLATE_PERMISSION
+from pyams_skin.layer import IPyAMSLayer
# import packages
-from pyams_zmi.form import AdminDialogEditForm
-from pyramid.url import resource_url
+from pyams_template.template import template_config
+from pyams_utils.adapter import adapter_config
+from pyams_utils.url import absolute_url
+from pyams_zmi.form import AdminDialogEditForm, InnerAdminEditForm
+from pyramid.decorator import reify
from z3c.form import field
+from zope.interface import Interface
from pyams_portal import _
-class PortletConfigurationEditor(AdminDialogEditForm):
- """Base portlet configuration editor"""
+@template_config(template='templates/portlet.pt', layer=IPyAMSLayer)
+class PortletSettingsEditor(AdminDialogEditForm):
+ """Portlet settings edit form"""
@property
def title(self):
translate = self.request.localizer.translate
- registry = self.request.registry
- portlet = registry.queryUtility(IPortlet, name=self.context.portlet_name)
- return translate(_("« {0} » portal template - {1}")).format(self.context.__parent__.name,
- translate(portlet.label))
+ parent = self.configuration.__parent__
+ if not IPortalTemplate.providedBy(parent):
+ parent = IPortalPage(parent).template
+ return translate(_("« {0} » portal template - {1}")).format(parent.name,
+ translate(self.portlet.label))
- legend = _("Edit portlet configuration")
+ legend = _("Edit portlet settings")
dialog_class = 'modal-large'
- interface = None
- edit_permission = 'portal.templates.manage'
+ settings = None
+ fields = field.Fields(Interface)
+ edit_permission = MANAGE_TEMPLATE_PERMISSION
+
+ @reify
+ def configuration(self):
+ return self.context.configuration
+
+ @property
+ def override_label(self):
+ translate = self.request.localizer.translate
+ if IPortalContext.providedBy(self.configuration.__parent__.__parent__):
+ return translate(_("Override parent settings"))
+ else:
+ return translate(_("Override template settings"))
def get_form_action(self):
- return resource_url(self.context.__parent__, self.request, self.request.view_name)
+ return absolute_url(self.configuration.__parent__, self.request, self.request.view_name)
def get_ajax_handler(self):
- return resource_url(self.context.__parent__, self.request, self.ajax_handler)
+ return absolute_url(self.configuration.__parent__, self.request, self.ajax_handler)
+
+ @reify
+ def portlet(self):
+ registry = self.request.registry
+ return registry.queryUtility(IPortlet, name=self.configuration.portlet_name)
+
+
+@adapter_config(name='properties', context=(Interface, IPyAMSLayer, PortletSettingsEditor), provides=IInnerTabForm)
+class PortletSettingsPropertiesEditor(InnerAdminEditForm):
+ """Portlet settings properties editor"""
+
+ id = 'properties_form'
+ tab_label = _("Main properties")
+ legend = None
@property
def fields(self):
- fields = field.Fields(self.interface)
- if not self.getContent().can_inherit:
- fields = fields.omit('inherit_parent')
- return fields
+ return field.Fields(self.parent_form.settings).omit('__name__')
- def updateWidgets(self, prefix=None):
- super(PortletConfigurationEditor, self).updateWidgets(prefix)
- self.widgets['slot_name'].mode = HIDDEN_MODE
- self.widgets['position'].mode = HIDDEN_MODE
+ weight = 10