src/pyams_portal/zmi/portlet.py
changeset 5 670b7956c689
parent 0 6f99128c6d48
child 40 71ff4ade6995
--- 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