[Erp5-report] r33680 nicolas.dumazet - in /erp5/trunk/products: ERP5Form/ Formulator/

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 12 04:07:25 CET 2010


Author: nicolas.dumazet
Date: Fri Mar 12 04:07:23 2010
New Revision: 33680

URL: http://svn.erp5.org?rev=33680&view=rev
Log:
fix TestListBox.test_09_editablePropertyPrecedence:
add an 'editable' parameter to render, to allow overriding a field's
editable property from the listbox renderer

Modified:
    erp5/trunk/products/ERP5Form/ListBox.py
    erp5/trunk/products/Formulator/Field.py

Modified: erp5/trunk/products/ERP5Form/ListBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ListBox.py?rev=33680&r1=33679&r2=33680&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ListBox.py [utf8] (original)
+++ erp5/trunk/products/ERP5Form/ListBox.py [utf8] Fri Mar 12 04:07:23 2010
@@ -2295,6 +2295,7 @@
         # XXX what if the object does not have uid?
         key = '%s_%s' % (editable_field.getId(), self.getUid())
         if sql in editable_column_id_set:
+          listbox_defines_column_as_editable = True
           if has_error: # If there is any error on listbox, we should use what the user has typed
             display_value = None
           else:
@@ -2324,18 +2325,24 @@
           else:
             error_message = u''
         else:
+          listbox_defines_column_as_editable = False
           error_message = u''
           display_value = original_value
 
-        # We need a way to pass the current line object (ie. brain) to the
-        # field which is being displayed. Since the render_view API did not
-        # permit this, we use the 'cell' value to pass the line object.
-        request.set('cell', brain)
         enabled = editable_field.get_value('enabled', REQUEST=request)
         if enabled:
-          cell_html = editable_field.render(value=display_value,
-                                            REQUEST=request,
-                                            key=key)
+          # We need a way to pass the current line object (ie. brain) to the
+          # field which is being displayed. Since the render_view API did not
+          # permit this, we use the 'cell' value to pass the line object.
+          request.set('cell', brain)
+          # Listbox 'editable' configuration should take precedence over
+          # individual field configuration
+          cell_html = editable_field.render(
+            value=display_value,
+            REQUEST=request,
+            key=key,
+            editable=listbox_defines_column_as_editable,
+          )
           if isinstance(cell_html, str):
             cell_html = unicode(cell_html, encoding)
         else:

Modified: erp5/trunk/products/Formulator/Field.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Field.py?rev=33680&r1=33679&r2=33680&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Field.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Field.py [utf8] Fri Mar 12 04:07:23 2010
@@ -192,17 +192,20 @@
                 return "Unknown error: %s" % name
 
     security.declarePrivate('_render_helper')
-    def _render_helper(self, key, value, REQUEST, render_prefix=None):
+    def _render_helper(self, key, value, REQUEST, render_prefix=None, editable=None):
       value = self._get_default(key, value, REQUEST)
       __traceback_info__ = ('key=%s value=%r' % (key, value))
       if self.get_value('hidden', REQUEST=REQUEST):
         return self.widget.render_hidden(self, key, value, REQUEST)
-      elif (not self.get_value('editable', REQUEST=REQUEST)):
-        return self.widget.render_view(self, value, REQUEST=REQUEST,
-                                       render_prefix=render_prefix)
       else:
-        return self.widget.render(self, key, value, REQUEST,
-                                  render_prefix=render_prefix)
+        if editable is None:
+          editable = self.get_value('editable', REQUEST=REQUEST)
+        if not editable:
+          return self.widget.render_view(self, value, REQUEST=REQUEST,
+                                         render_prefix=render_prefix)
+        else:
+          return self.widget.render(self, key, value, REQUEST,
+                                    render_prefix=render_prefix)
 
     security.declarePrivate('_render_helper')
     def _render_odt_helper(self, key, value, as_string, ooo_builder,
@@ -246,18 +249,25 @@
       return REQUEST.form[key]
 
     security.declareProtected('View', 'render')
-    def render(self, value=None, REQUEST=None, key=None, render_prefix=None, key_prefix=None):
+    def render(self, value=None, REQUEST=None, key=None, render_prefix=None, key_prefix=None, editable=None):
       """Render the field widget.
       value -- the value the field should have (for instance
                 from validation).
       REQUEST -- REQUEST can contain raw (unvalidated) field
                 information. If value is None, REQUEST is searched
                 for this value.
+      editable -- if not None, this boolean can override the Editable property
+                 of the rendered field
       if value and REQUEST are both None, the 'default' property of
       the field will be used for the value.
       """
-      return self._render_helper(self.generate_field_key(key=key, key_prefix=key_prefix), value, REQUEST,
-                                 render_prefix)
+      return self._render_helper(
+        self.generate_field_key(key=key, key_prefix=key_prefix),
+        value,
+        REQUEST,
+        render_prefix=render_prefix,
+        editable=editable,
+      )
 
     security.declareProtected('View', 'render_view')
     def render_view(self, value=None, REQUEST=None, render_prefix=None):




More information about the Erp5-report mailing list