[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/ -reimplemented PortalConfig view using SettingsEditFormBase

Yvo Schubbe cvs-admin at zope.org
Thu Aug 30 10:45:50 UTC 2012


Log message for revision 127623:
  -reimplemented PortalConfig view using SettingsEditFormBase

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.pt
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/interfaces.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.pt	2012-08-30 10:14:05 UTC (rev 127622)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.pt	2012-08-30 10:45:46 UTC (rev 127623)
@@ -1,19 +1,14 @@
 <html metal:use-macro="context/@@standard_macros/page">
-
 <body>
 
 <metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+<metal:macro metal:use-macro="context/@@formlib_macros/errors" />
 
-<ul class="errors" tal:condition="view/errors">
- <li tal:repeat="error view/error_views"
-     tal:content="structure error">Error Message</li>
-</ul>
+<metal:macro metal:use-macro="context/@@formlib_macros/header" />
 
-<h1 i18n:translate="">Portal Configuration</h1>
+<form action="." method="post"
+   tal:attributes="action request/ACTUAL_URL">
 
-<form action="." method="post" 
-      tal:attributes="action request/ACTUAL_URL">
-
     <fieldset tal:repeat="widget view/widgets">
       <label tal:attributes="for widget/name" tal:content="widget/label"></label>
       <tal:block replace="structure widget" />
@@ -24,13 +19,12 @@
 
     <span class="errors" tal:condition="not: globals/uidtool_installed">CMFUId is not installed</span>
 
-  <div class="buttons">
-    <tal:loop tal:repeat="action view/actions"
-     tal:replace="structure action/render" />
-  </div>
+<div class="buttons">
+ <tal:loop tal:repeat="action view/actions"
+    tal:replace="structure action/render" />
+</div>
 
 </form>
-
 </metal:slot>
 
 </body>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py	2012-08-30 10:14:05 UTC (rev 127622)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/config.py	2012-08-30 10:45:46 UTC (rev 127623)
@@ -14,51 +14,66 @@
 """
 
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from zope.component import adapts
 from zope.component import getUtility
 from zope.formlib import form
-from zope.schema import getFieldNames
+from zope.interface import implements
 
 from Products.CMFCore.interfaces import IPropertiesTool
-from Products.CMFDefault.formlib.form import EditFormBase
+from Products.CMFDefault.browser.utils import memoize
+from Products.CMFDefault.formlib.form import SettingsEditFormBase
+from Products.CMFDefault.formlib.schema import SchemaAdapterBase
 from Products.CMFDefault.formlib.widgets import ChoiceRadioWidget
 from Products.CMFDefault.utils import Message as _
 
 from .interfaces import IPortalConfig
 
 
-class PortalConfig(EditFormBase):
+class ConfigSchemaAdapter(SchemaAdapterBase):
 
+    """Adapter for IPropertiesTool.
+    """
+
+    adapts(IPropertiesTool)
+    implements(IPortalConfig)
+
+    def __getattr__(self, name):
+        if name in ('title', 'smtp_server'):
+            value = getattr(self.context, name)()
+        else:
+            value = self.context.getProperty(name)
+        if isinstance(value, str) and self.encoding:
+            return value.decode(self.encoding)
+        return value
+
+    def __setattr__(self, name, value):
+        if name in ('context', 'encoding'):
+            SchemaAdapterBase.__setattr__(self, name, value)
+            return
+        if isinstance(value, unicode) and self.encoding:
+            value = value.encode(self.encoding)
+        self.context.editProperties({name: value})
+
+
+class PortalConfig(SettingsEditFormBase):
+
     form_fields = form.FormFields(IPortalConfig)
     form_fields['validate_email'].custom_widget = ChoiceRadioWidget
 
-    actions = form.Actions(
-        form.Action(
-            name='change',
-            label=_(u'Change'),
-            success='handle_success',
-            failure='handle_failure'),
-    )
     template = ViewPageTemplateFile("config.pt")
+    label = _(u'Portal Configuration')
+    description = _(u'This form is used to set the portal configuration '
+                     'options.')
+    successMessage = _(u'Portal settings changed.')
 
-    def setUpWidgets(self, ignore_request=False):
-        data = {}
+    @memoize
+    def getContent(self):
         ptool = getUtility(IPropertiesTool)
-        charset = ptool.getProperty('default_charset', None)
-        for name in getFieldNames(IPortalConfig):
-            value = ptool.getProperty(name)
-            try:
-                value = value.decode(charset)
-            except (AttributeError, UnicodeEncodeError):
-                pass
-            data[name] = value
-        data['smtp_server'] = ptool.smtp_server()
-        self.widgets = form.setUpDataWidgets(
-                    self.form_fields, self.prefix,
-                    self.context, self.request, data=data,
-                    ignore_request=ignore_request)
+        return ConfigSchemaAdapter(ptool)
 
-    def handle_success(self, action, data):
-        ptool = getUtility(IPropertiesTool)
-        ptool.editProperties(data)
-        self.status = _(u"Portal settings changed.")
-        self._setRedirect('portal_actions', 'global/configPortal')
+    def handle_change_success(self, action, data):
+        self._handle_success(action, data)
+        return self._setRedirect('portal_actions', 'global/configPortal')
+
+    def handle_cancel_success(self, action, data):
+        return self._setRedirect('portal_actions', 'ROOT')

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/interfaces.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/interfaces.py	2012-08-30 10:14:05 UTC (rev 127622)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/interfaces.py	2012-08-30 10:45:46 UTC (rev 127623)
@@ -46,31 +46,36 @@
         title=_(u"Portal 'From' name"),
         description=_(u"When the portal generates mail, it uses this name as "
                       u"its (apparent) sender."),
-        required=False)
+        required=False,
+        missing_value=u'')
 
     email_from_address = TextLine(
         title=_(u"Portal 'From' address"),
         description=_(u"When the portal generates mail, it uses this address "
                       u"as its (apparent) return address."),
-        required=False)
+        required=False,
+        missing_value=u'')
 
     smtp_server = TextLine(
         title=_(u"SMTP server"),
         description=_(u"This is the address of your local SMTP (out-going "
                       u"mail) server."),
-        required=False)
+        required=False,
+        missing_value=u'')
 
     title = TextLine(
         title=_(u"Portal title"),
         description=_(u"This is the title which appears at the top of every "
                       u"portal page."),
-        required=False)
+        required=False,
+        missing_value=u'')
 
     description = TextLine(
         title=_(u"Portal description"),
         description=_(u"This description is made available via syndicated "
                       u"content and elsewhere. It should be fairly brief."),
-        required=False)
+        required=False,
+        missing_value=u'')
 
     validate_email = Choice(
         title=_(u"Password policy"),
@@ -83,7 +88,7 @@
                       u"empty, 'utf-8' is used."),
         required=False,
         constraint=check_encoding,
-        default="UTF-8")
+        default="utf-8")
 
     email_charset = ASCIILine(
         title=_(u"Portal email encoding"),
@@ -91,7 +96,7 @@
                       u"empty, 'utf-8' is used if necessary."),
         required=False,
         constraint=check_encoding,
-        default="UTF-8")
+        default="utf-8")
 
     enable_actionicons = Bool(
         title=_(u"Action icons"),



More information about the checkins mailing list