diff --git a/product/ERP5Form/ParallelListField.py b/product/ERP5Form/ParallelListField.py index 617a22bf38687786da553badacc39c39431c58db..92683c46061bd406b9c0312e18dd0df8f6b5b036 100644 --- a/product/ERP5Form/ParallelListField.py +++ b/product/ERP5Form/ParallelListField.py @@ -36,6 +36,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 @@ class ParallelListWidget(Widget.MultiListWidget, """ 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 @@ class ParallelListValidator(Validator.MultiSelectionValidator): """ 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 @@ class ParallelListField(ZMIField): 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 @@ class ParallelListField(ZMIField): 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