--- 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)