src/pyams_content/shared/form/__init__.py
changeset 170 26aefef3d0aa
parent 81 3e37d4dd8e3b
child 263 f4d7aa39fd50
--- a/src/pyams_content/shared/form/__init__.py	Tue Sep 19 11:11:12 2017 +0200
+++ b/src/pyams_content/shared/form/__init__.py	Tue Sep 19 11:11:30 2017 +0200
@@ -16,22 +16,56 @@
 # import standard library
 
 # import interfaces
-from pyams_content.component.links.interfaces import ILinkContainerTarget
-from pyams_content.shared.form.interfaces import IWfForm, IForm, FORM_CONTENT_TYPE, FORM_CONTENT_NAME
+from pyams_content.shared.form.interfaces import IWfForm, IForm, FORM_CONTENT_TYPE, FORM_CONTENT_NAME, \
+    IFormFieldContainerTarget, IFormHandler
 
 # import packages
 from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent
-from zope.interface import implementer
+from zope.component.globalregistry import getGlobalSiteManager
+from zope.interface import implementer, alsoProvides, noLongerProvides
 from zope.schema.fieldproperty import FieldProperty
 
 
-@implementer(IWfForm, ILinkContainerTarget)
+@implementer(IWfForm, IFormFieldContainerTarget)
 class WfForm(WfSharedContent):
     """Base form"""
 
     content_type = FORM_CONTENT_TYPE
     content_name = FORM_CONTENT_NAME
 
+    user_title = FieldProperty(IWfForm['user_title'])
+    header = FieldProperty(IWfForm['header'])
+    _handler = FieldProperty(IWfForm['handler'])
+    auth_only = FieldProperty(IWfForm['auth_only'])
+    use_captcha = FieldProperty(IWfForm['use_captcha'])
+    submit_label = FieldProperty(IWfForm['submit_label'])
+
+    @property
+    def handler(self):
+        return self._handler
+
+    @handler.setter
+    def handler(self, value):
+        old_handler = self._handler
+        if value == old_handler:
+            return
+        if old_handler is not None:
+            handler = self.query_handler(old_handler)
+            if (handler is not None) and handler.target_interface:
+                noLongerProvides(self, handler.target_interface)
+        if value is not None:
+            handler = self.query_handler(value)
+            if (handler is not None) and handler.target_interface:
+                alsoProvides(self, handler.target_interface)
+        self._handler = value
+
+    def query_handler(self, handler=None):
+        if handler is None:
+            handler = self._handler
+        if handler:
+            registry = getGlobalSiteManager()
+            return registry.queryUtility(IFormHandler, name=handler)
+
 register_content_type(WfForm)