From bcc9c2a5a1805890da43e151bb9cef4c47641273 Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Wed, 4 Apr 2007 07:58:39 +0000
Subject: [PATCH] Add _get_user_input_value on Field, in order to improve
 compatibility between DateTimeField and ProxyField. This method get in the
 REQUEST the input data entered by the user.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@13914 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Form/Form.py            |  2 +-
 product/ERP5Form/FormulatorPatch.py | 31 +++++++++++++++++++----------
 product/ERP5Form/ProxyField.py      | 12 +++++++++++
 3 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/product/ERP5Form/Form.py b/product/ERP5Form/Form.py
index 6d130eb715..95cd8681f3 100644
--- a/product/ERP5Form/Form.py
+++ b/product/ERP5Form/Form.py
@@ -169,7 +169,7 @@ def _get_default(self, key, value, REQUEST):
     if value is not None:
         return value
     try:
-        value = REQUEST.form[key]
+        value = self._get_user_input_value(key, REQUEST)
     except (KeyError, AttributeError):
         # fall back on default
         return self.get_value('default', REQUEST=REQUEST) # It was missing on Formulator
diff --git a/product/ERP5Form/FormulatorPatch.py b/product/ERP5Form/FormulatorPatch.py
index 7563f9dbf7..3a0f4d4dcd 100644
--- a/product/ERP5Form/FormulatorPatch.py
+++ b/product/ERP5Form/FormulatorPatch.py
@@ -91,12 +91,19 @@ def Field_render_helper(self, key, value, REQUEST):
     else:
         return self.widget.render(self, key, value, REQUEST)
 
+def Field_get_user_input_value(self, key, REQUEST):
+  """
+  Try to get a value of the field from the REQUEST
+  """
+  return REQUEST.form[key]
+
 Field.generate_field_key = Field_generate_field_key
 Field.render = Field_render
 Field.render_sub_field = Field_render_sub_field
 Field.generate_subfield_key = Field_generate_subfield_key
 Field.validate_sub_field = Field_validate_sub_field
 Field._render_helper = Field_render_helper
+Field._get_user_input_value = Field_get_user_input_value
 
 from Products.Formulator.Validator import SelectionValidator
 from Products.Formulator.Validator import StringBaseValidator
@@ -693,21 +700,23 @@ ListWidget.render_pdf = ListWidget_render_view
 
 # JPS - Subfield handling with listbox requires extension
 from Products.Formulator.StandardFields import DateTimeField
+from Products.Formulator.Field import ZMIField
 
 def DateTimeField_get_default(self, key, value, REQUEST):
-    if value is not None:
-        return value
-    # if there is something in the request then return None
-    # sub fields should pick up defaults themselves
-    # XXX hasattr(REQUEST, 'form') seems useless, because REQUEST always has
-    # a form property
-    if REQUEST is not None and hasattr(REQUEST, 'form') and \
-        REQUEST.form.has_key('subfield_%s_%s' % (key, 'year')):
-        return None
-    else:
-        return self.get_value('default')
+    """
+    Use the default method
+    """
+    return ZMIField._get_default(self, key, value, REQUEST)
+
+def DateTimeField_get_user_input_value(self, key, REQUEST):
+  """
+  Try to get a value of the field from the REQUEST
+  """
+  if REQUEST.form['subfield_%s_%s' % (key, 'year')]:
+    return None
 
 DateTimeField._get_default = DateTimeField_get_default
+DateTimeField._get_user_input_value = DateTimeField_get_user_input_value
 
 from Products.Formulator.Widget import DateTimeWidget
 old_date_time_widget_property_names = DateTimeWidget.property_names
diff --git a/product/ERP5Form/ProxyField.py b/product/ERP5Form/ProxyField.py
index 09ac809959..92d5b5385f 100644
--- a/product/ERP5Form/ProxyField.py
+++ b/product/ERP5Form/ProxyField.py
@@ -473,3 +473,15 @@ class ProxyField(ZMIField):
       if proxy_field is not None:
         result = proxy_field.has_value(id)
     return result
+
+  security.declareProtected('Access contents information', '_get_user_input_value')
+  def _get_user_input_value(self, key, REQUEST):
+    """
+    Try to get a value of the field from the REQUEST
+    """
+    proxy_field = self.getTemplateField()
+    if proxy_field is not None:
+      result = proxy_field._get_user_input_value(key, REQUEST)
+    else:
+      result = ZMIField._get_user_input_value(key, REQUEST)
+    return result
-- 
2.30.9