From ea89b89501962073dcdff4adaabcf189f84999f1 Mon Sep 17 00:00:00 2001 From: Yoshinori Okuji <yo@nexedi.com> Date: Tue, 31 Jan 2006 16:02:54 +0000 Subject: [PATCH] Support extra_context specified by a proxy field. This can be used to pass parameters from a proxy field to an underlying field. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5474 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/Form.py | 3 +++ product/ERP5Form/ProxyField.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/product/ERP5Form/Form.py b/product/ERP5Form/Form.py index 4beb3c69a4..21fc489687 100755 --- a/product/ERP5Form/Form.py +++ b/product/ERP5Form/Form.py @@ -77,6 +77,9 @@ def get_value(self, id, **kw): except AttributeError : LOG('ERP5Form', 0, 'portal_preferences not put in TALES context (not installed?)') + extra_context = getattr(self, '_v_extra_context', None) + if extra_context: + kw.update(extra_context) # This allows to pass some pointer to the local object # through the REQUEST parameter. Not very clean. # Used by ListBox to render different items in a list diff --git a/product/ERP5Form/ProxyField.py b/product/ERP5Form/ProxyField.py index f1b9cdd321..b03a121b38 100755 --- a/product/ERP5Form/ProxyField.py +++ b/product/ERP5Form/ProxyField.py @@ -55,6 +55,7 @@ class ProxyWidget(Widget.Widget): property_names = Widget.Widget.property_names + [ 'form_id', \ 'field_id', \ + 'extra_context', \ ] form_id = fields.StringField( @@ -81,6 +82,13 @@ class ProxyWidget(Widget.Widget): default="", required=0) + extra_context = fields.ListTextAreaField( + 'extra_context', + title='Extra Context', + description='Additional context variables.', + default=(), + required=0) + def render(self, field, key, value, REQUEST): """ @@ -89,6 +97,11 @@ class ProxyWidget(Widget.Widget): form = field.aq_parent proxy_form = getattr(form, field.get_value('form_id')) proxy_field = getattr(proxy_form, field.get_value('field_id')) + extra_context = field.get_value('extra_context') + if not hasattr(proxy_field, '_v_extra_context'): + proxy_field._v_extra_context = {} + for k, v in extra_context: + proxy_field._v_extra_context[k] = v return proxy_field.widget.render(proxy_field, key, value, REQUEST) def render_view(self, field, value): @@ -98,6 +111,11 @@ class ProxyWidget(Widget.Widget): form = field.aq_parent proxy_form = getattr(form, field.get_value('form_id')) proxy_field = getattr(proxy_form, field.get_value('field_id')) + extra_context = field.get_value('extra_context') + if not hasattr(proxy_field, '_v_extra_context'): + proxy_field._v_extra_context = {} + for k, v in extra_context: + proxy_field._v_extra_context[k] = v return proxy_field.widget.render_view(proxy_field, key, value) class ProxyValidator(Validator.Validator): -- 2.30.9