[Erp5-report] r16025 - /erp5/trunk/products/ERP5Form/ParallelListField.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Sep 3 18:35:52 CEST 2007


Author: romain
Date: Mon Sep  3 18:35:51 2007
New Revision: 16025

URL: http://svn.erp5.org?rev=16025&view=rev
Log:
Bug fix: it was not possible to use multiple ParallelListField in the same
Form, because some value were temporary put in the REQUEST and are were not
deleted.

Modified:
    erp5/trunk/products/ERP5Form/ParallelListField.py

Modified: erp5/trunk/products/ERP5Form/ParallelListField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ParallelListField.py?rev=16025&r1=16024&r2=16025&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ParallelListField.py (original)
+++ erp5/trunk/products/ERP5Form/ParallelListField.py Mon Sep  3 18:35:51 2007
@@ -35,6 +35,10 @@
 from zLOG import LOG
 from AccessControl import ClassSecurityInfo
 from Products.Formulator.Errors import ValidationError
+
+# Field is is not used in keyword in order to be compatible with Proxyfield
+KEYWORD = '_v_plf_%s'
+MARKER = []
 
 class ParallelListWidget(Widget.MultiListWidget,
                          Widget.ListWidget):
@@ -125,24 +129,29 @@
       """
       Render dynamically a subfield
       """
-      REQUEST.set('_v_plf_title', sub_field_property_dict['title'])
-      REQUEST.set('_v_plf_required', sub_field_property_dict['required'])
-      REQUEST.set('_v_plf_default', "")
-      REQUEST.set('_v_plf_first_item', 0)
-      REQUEST.set('_v_plf_items', sub_field_property_dict['item_list'])
-      REQUEST.set('_v_plf_size', sub_field_property_dict['size'])
+      for parameter in ('title', 'required', 'size'):
+        REQUEST.set(KEYWORD % parameter, sub_field_property_dict[parameter])
+      REQUEST.set(KEYWORD % 'default', "")
+      REQUEST.set(KEYWORD % 'first_item', 0)
+      REQUEST.set(KEYWORD % 'items', sub_field_property_dict['item_list'])
       if sub_field_property_dict.get('editable', 1):
-        return self.sub_widget[sub_field_property_dict['field_type']].render(
+        result = self.sub_widget[sub_field_property_dict['field_type']].render(
                 field,
                 field.generate_subfield_key(sub_field_property_dict['key'],
                                             key=key),
                 sub_field_property_dict['value'],
                 REQUEST)
       else:
-        return self.sub_widget[sub_field_property_dict['field_type']].render_view(
+        result = self.sub_widget[sub_field_property_dict['field_type']].render_view(
                 field,
                 sub_field_property_dict['value'],
                 )
+      for parameter in ('title', 'required', 'size', 'default', 'first_item',
+                        'items'):
+        # As it doesn't seem possible to delete value in the REQUEST,
+        # use a marker
+        REQUEST.set(KEYWORD % parameter, MARKER)
+      return result
 
 class ParallelListValidator(Validator.MultiSelectionValidator):
 
@@ -192,13 +201,18 @@
     """
     Validates a subfield (as part of field validation).
     """
-    REQUEST.set('_v_plf_title', sub_field_property_dict['title'])
-    REQUEST.set('_v_plf_required', sub_field_property_dict['required'])
-    REQUEST.set('_v_plf_default', "")
-    REQUEST.set('_v_plf_items', sub_field_property_dict['item_list'])
-    REQUEST.set('_v_plf_size', sub_field_property_dict['size'])
-    return self.sub_validator[sub_field_property_dict['field_type']].validate(
+    for parameter in ('title', 'required', 'size'):
+      REQUEST.set(KEYWORD % parameter, sub_field_property_dict[parameter])
+    REQUEST.set(KEYWORD % 'default', "")
+    REQUEST.set(KEYWORD % 'items', sub_field_property_dict['item_list'])
+    result = self.sub_validator[sub_field_property_dict['field_type']].validate(
         field, id, REQUEST)
+    for parameter in ('title', 'required', 'size', 'default', 'first_item',
+                      'items'):
+      # As it doesn't seem possible to delete value in the REQUEST,
+      # use a marker
+      REQUEST.set(KEYWORD % parameter, MARKER)
+    return result
 
 ParallelListWidgetInstance = ParallelListWidget()
 ParallelListFieldValidatorInstance = ParallelListValidator()
@@ -210,16 +224,6 @@
   widget = ParallelListWidgetInstance
   validator = ParallelListFieldValidatorInstance 
 
-  def render_htmlgrid(self, value=None, REQUEST=None, key=None):
-    """
-    render_htmlgrid returns a list of tuple (title, html render)
-    We will use title generated by the widget.
-    """
-    key = self.generate_field_key(key=key)
-    value = self._get_default(key, value, REQUEST)
-    html = self.widget.render_htmlgrid(self, key, value, REQUEST)
-    return html
-
   security.declareProtected('Access contents information', 'get_value')
   def get_value(self, id, REQUEST=None, **kw):
     """
@@ -227,11 +231,12 @@
     Optionally pass keyword arguments that get passed to TALES
     expression.
     """
-    key = '_v_plf_%s' % id
+    result = MARKER
+    key = KEYWORD % id
     if (REQUEST is not None) and \
        (REQUEST.has_key(key)):
       result = REQUEST.get(key)
-    else:
+    if result is MARKER:
       result = ZMIField.get_value(self, id, REQUEST=REQUEST, **kw)
     return result
 




More information about the Erp5-report mailing list