[Erp5-report] r19325 - in /erp5/trunk/products/ERP5Form: ./ dtml/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Feb 15 11:23:40 CET 2008


Author: alex
Date: Fri Feb 15 11:23:39 2008
New Revision: 19325

URL: http://svn.erp5.org?rev=19325&view=rev
Log:
Add proxification (delegation or surcharging) of error messages

Added:
    erp5/trunk/products/ERP5Form/dtml/proxyFieldMessages.dtml
Modified:
    erp5/trunk/products/ERP5Form/ProxyField.py
    erp5/trunk/products/ERP5Form/tests/testFields.py

Modified: erp5/trunk/products/ERP5Form/ProxyField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ProxyField.py?rev=19325&r1=19324&r2=19325&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ProxyField.py (original)
+++ erp5/trunk/products/ERP5Form/ProxyField.py Fri Feb 15 11:23:39 2008
@@ -150,6 +150,7 @@
   widget = ProxyWidgetInstance
   validator = ProxyValidatorInstance
   delegated_list = tuple()
+  delegated_message_list = tuple()
 
   # methods screen
   security.declareProtected('View management screens',
@@ -160,6 +161,10 @@
   security.declareProtected('View management screens',
                             'manage_talesForm')
   manage_talesForm = DTMLFile('dtml/proxyFieldTales', globals())
+
+  # messages screen
+  security.declareProtected('View management screens', 'manage_messagesForm')
+  manage_messagesForm = DTMLFile('dtml/proxyFieldMessages', globals())
 
   # proxy field list header
   security.declareProtected('View management screens', 'proxyFieldListHeader')
@@ -352,6 +357,50 @@
       if not self.values.has_key(key):
         self.values[key] = self.get_recursive_orig_value(key, include=0)
 
+  security.declareProtected('Change Formulator Fields', 'manage_messages')
+  def manage_messages(self, REQUEST):
+    """Change message texts.
+    """
+    surcharge_list = []
+    messages = self.message_values
+    unicode_mode = self.get_unicode_mode()
+    for message_key in self.get_error_names():
+      checkbox_key = "surcharge_%s" % message_key
+      if not REQUEST.has_key(checkbox_key):
+        surcharge_list.append(message_key)
+        message = REQUEST[message_key]
+        if unicode_mode:
+          message = unicode(message, 'UTF-8')
+        messages[message_key] = message
+      else:
+        if message_key in messages:
+          messages.pop(message_key)
+    self.message_values = messages
+    self.delegated_message_list = surcharge_list
+    if REQUEST:
+      message="Content changed."
+      return self.manage_messagesForm(self,REQUEST,
+                                      manage_tabs_message=message)
+
+  security.declareProtected('View management screens', 'get_error_message') 
+  def get_error_message(self, name): 
+    if not self.is_message_delegated(name):
+      try: 
+        return self.message_values[name] 
+      except KeyError: 
+        if name in self.validator.message_names: 
+          return getattr(self.validator, name) 
+        else: 
+          return "Unknown error: %s" % name 
+    else:
+      return self.getTemplateField().get_error_message(name)
+
+  security.declareProtected('View management screens', 'get_error_names') 
+  def get_error_names(self): 
+    """Get error messages. 
+    """ 
+    return self.getTemplateField().get_error_names()
+
   def getTemplateField(self):
     """
     Return template field of the proxy field.
@@ -407,6 +456,15 @@
     No, if we surcharged the value on the proxy field.
     """
     return id not in self.delegated_list
+
+  security.declareProtected('Access contents information', 
+                            'is_message_delegated')
+  def is_message_delegated(self, id):
+    """
+    Return true if we get the message from the proxied field.
+    No, if we surcharged the message on the proxy field.
+    """
+    return id not in self.delegated_message_list
 
   security.declareProtected('Access contents information', 
                             'get_recursive_orig_value')
@@ -449,20 +507,6 @@
     Get override method for id (not wrapped).
     """
     return self.overrides.get(id, "")
-
-  security.declareProtected('View management screens', 'get_error_message')
-  def get_error_message(self, name):
-    """
-    """
-    try:
-      return self.message_values[name]
-    except KeyError:
-      proxied_field = self.getTemplateField()
-      if proxied_field is not None:
-        return proxied_field.get_error_message(name)
-      else:
-        return ZMIField.get_error_message(self, name)
-
 
   security.declareProtected('Edit target', 'manage_edit_target')
   def manage_edit_target(self, REQUEST):

Added: erp5/trunk/products/ERP5Form/dtml/proxyFieldMessages.dtml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/dtml/proxyFieldMessages.dtml?rev=19325&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Form/dtml/proxyFieldMessages.dtml (added)
+++ erp5/trunk/products/ERP5Form/dtml/proxyFieldMessages.dtml Fri Feb 15 11:23:39 2008
@@ -1,0 +1,34 @@
+<dtml-var manage_page_header>
+<dtml-var manage_tabs>
+
+<p class="form-help">
+Edit <dtml-var meta_type> error messages here.
+</p>
+
+<form action="manage_messages" method="POST">
+<table border="0">
+<dtml-let proxy_field="this()">
+<dtml-in "get_error_names()">
+  <dtml-let name=sequence-item value="get_error_message(name)"
+      checkbox_key="'surcharge_%s' % name">
+  <tr>
+  <td>
+  <dtml-if "proxy_field.is_message_delegated(name)">
+    <input type="checkbox" name="<dtml-var checkbox_key>" 
+        checked="checked" />
+  <dtml-else >
+    <input type="checkbox" name="<dtml-var checkbox_key>" />
+  </dtml-if >
+  </td>
+  <td class="form-label"><dtml-var name></td>
+  <td><textarea name="&dtml-name;" cols="50" rows="4"><dtml-var value></textarea></td>
+  </tr>
+  </dtml-let>
+</dtml-in>
+</dtml-let>
+<tr><td><input type="submit" value=" OK "></td></tr>
+</table>
+</form>
+
+<dtml-var manage_page_footer>
+

Modified: erp5/trunk/products/ERP5Form/tests/testFields.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/tests/testFields.py?rev=19325&r1=19324&r2=19325&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/tests/testFields.py (original)
+++ erp5/trunk/products/ERP5Form/tests/testFields.py Fri Feb 15 11:23:39 2008
@@ -375,6 +375,35 @@
     surcharge_tales()
     delegate_tales()
 
+  def test_proxify_error_message(self):
+    """
+    Test that error messages can be delegated and surcharged.
+    """
+    # create a field
+    original_field = self.addField(self.container.Base_viewProxyFieldLibrary,
+                                   'my_title', 'OrigTitle', 'StringField')
+    field = self.addField(self.container.Base_view,
+                                   'my_dict_test', '', 'ProxyField')
+    field.manage_edit_xmlrpc(dict(form_id='Base_viewProxyFieldLibrary',
+                                         field_id='my_title',))
+    self.assertEquals(original_field.get_error_names(),
+        field.get_error_names())
+    test_error = 'too_long' # arbitrary chosen among StringField error names
+    test_message = 'Some Unprobable Error'
+    test_message2 = 'Some Even More Unprobable Error'
+    original_field.message_values[test_error] = test_message
+    field.message_values[test_error] = test_message2
+    # delegated (by default)
+    self.assertEquals(original_field.get_error_message(test_error),
+      test_message)
+    self.assertTrue(field.is_message_delegated(test_error))
+    self.assertEquals(field.get_error_message(test_error), test_message)
+    # surcharged
+    field.delegated_message_list = [test_error]
+    self.assertEquals(original_field.get_error_message(test_error),
+      test_message)
+    self.assertFalse(field.is_message_delegated(test_error))
+    self.assertEquals(field.get_error_message(test_error), test_message2)
 
 class TestFieldValueCache(unittest.TestCase):
   """Tests field value caching system




More information about the Erp5-report mailing list