From d855e4bca73cc9e1868864f871541ea2ac8fff3b Mon Sep 17 00:00:00 2001 From: Alexandre Boeglin <alex@nexedi.com> Date: Thu, 9 Jun 2005 16:52:50 +0000 Subject: [PATCH] Added 'Jump Allowed' parameter that hides the jump clickable link and plane. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@3228 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/MultiRelationField.py | 143 +++++++++++++------------ product/ERP5Form/RelationField.py | 107 +++++++++--------- 2 files changed, 131 insertions(+), 119 deletions(-) diff --git a/product/ERP5Form/MultiRelationField.py b/product/ERP5Form/MultiRelationField.py index e9c7299132..95ca1bc074 100755 --- a/product/ERP5Form/MultiRelationField.py +++ b/product/ERP5Form/MultiRelationField.py @@ -80,7 +80,7 @@ class MultiRelationStringFieldWidget(Widget.LinesTextAreaWidget, RelationField.R _v_property_name_list.append(property_name) _v_dict[property_name] = 1 property_names = _v_property_name_list - + def render(self, field, key, value, REQUEST): """ @@ -104,32 +104,32 @@ class MultiRelationStringFieldWidget(Widget.LinesTextAreaWidget, RelationField.R need_validation = 0 # Check all relation for i in range( len(value_list) ): - relation_field_id = 'relation_%s_%s' % ( key, i ) - relation_item_id = 'item_%s_%s' % ( key, i ) + relation_field_id = 'relation_%s_%s' % ( key, i ) + relation_item_id = 'item_%s_%s' % ( key, i ) if REQUEST.has_key(relation_item_id) and value_list[i] != '': need_validation = 1 break - + html_string = '' if need_validation: # Check all relation for i in range( len(value_list) ): value = value_list[i] - relation_field_id = 'relation_%s_%s' % ( key, i ) - relation_item_id = 'item_%s_%s' % ( key, i ) - + relation_field_id = 'relation_%s_%s' % ( key, i ) + relation_item_id = 'item_%s_%s' % ( key, i ) + # If we get a empty string, display nothing ! if value == '': pass else: - + html_string += Widget.TextWidget.render(self, field, key, value, REQUEST) - + if REQUEST.has_key(relation_item_id): relation_item_list = REQUEST.get(relation_item_id) - + if relation_item_list != []: # Define default tales on the fly tales_expr = field.tales.get('items', None) @@ -140,10 +140,10 @@ class MultiRelationStringFieldWidget(Widget.LinesTextAreaWidget, RelationField.R field.tales['items'] = TALESMethod('REQUEST/relation_item_list') - REQUEST['relation_item_list'] = relation_item_list - html_string += ' %s ' % Widget.ListWidget.render(self, - field, relation_field_id, None, REQUEST) - REQUEST['relation_item_list'] = None + REQUEST['relation_item_list'] = relation_item_list + html_string += ' %s ' % Widget.ListWidget.render(self, + field, relation_field_id, None, REQUEST) + REQUEST['relation_item_list'] = None if defined_tales: # Delete default tales on the fly @@ -162,7 +162,7 @@ class MultiRelationStringFieldWidget(Widget.LinesTextAreaWidget, RelationField.R html_string += ' <input type="image" src="%s/images/exec16.png" value="update..." name="%s/portal_selections/viewSearchRelatedDocumentDialog%s:method">' \ % (portal_url_string, portal_object.getPath(), field.aq_parent._v_relation_field_index) - if value_list not in ((), [], None, ['']) and value_list == field.get_value('default'): + if value_list not in ((), [], None, ['']) and value_list == field.get_value('default') and field.get_value('jump_allowed') == 1 : if REQUEST.get('selection_name') is not None: html_string += ' <a href="%s?field_id=%s&form_id=%s&selection_name=%s&selection_index=%s"><img src="%s/images/jump.png"></a>' \ % (field.get_value('jump_method'), field.id, field.aq_parent.id, REQUEST.get('selection_name'), REQUEST.get('selection_index'),portal_url_string) @@ -171,13 +171,16 @@ class MultiRelationStringFieldWidget(Widget.LinesTextAreaWidget, RelationField.R % (field.get_value('jump_method'), field.id, field.aq_parent.id,portal_url_string) relation_field_index = getattr(field.aq_parent, '_v_relation_field_index', 0) - field.aq_parent._v_relation_field_index = relation_field_index + 1 # Increase index + field.aq_parent._v_relation_field_index = relation_field_index + 1 # Increase index return html_string def render_view(self, field, value): """ Render text field. """ + if field.get_value('jump_allowed') == 0 : + return Widget.LinesTextAreaWidget.render_view(self, field, value) + REQUEST = get_request() here = REQUEST['here'] @@ -202,7 +205,7 @@ class MultiRelationEditor: """ def __init__(self, field_id, base_category, portal_type, portal_type_item, key, relation_setter_id, relation_editor_list): - + self.field_id = field_id self.base_category = base_category self.portal_type = portal_type @@ -218,34 +221,34 @@ class MultiRelationEditor: for i, value, uid, display_text in self.relation_editor_list: - value_list.append(value) + value_list.append(value) if uid is not None: # Decorate the request so that we can display # the select item in a popup - #relation_field_id = 'relation_%s_%s' % ( self.key, i ) - #relation_item_id = 'item_%s_%s' % ( self.key, i ) - relation_field_id = 'relation_field_%s_%s' % ( self.field_id, i ) - relation_item_id = 'item_field_%s_%s' % ( self.field_id, i ) - - + #relation_field_id = 'relation_%s_%s' % ( self.key, i ) + #relation_item_id = 'item_%s_%s' % ( self.key, i ) + relation_field_id = 'relation_field_%s_%s' % ( self.field_id, i ) + relation_item_id = 'item_field_%s_%s' % ( self.field_id, i ) + + REQUEST.set(relation_item_id, ((display_text, uid),)) REQUEST.set(relation_field_id, uid) REQUEST.set(self.field_id, value_list) # XXX Dirty else: # Make sure no default value appears - #REQUEST.set(self.field_id[len('field_'):], None) + #REQUEST.set(self.field_id[len('field_'):], None) REQUEST.set(self.field_id, None) # XXX Dirty - + def view(self): - return self.__dict__ - - def edit(self, o): + return self.__dict__ + + def edit(self, o): if self.relation_editor_list != None: - + relation_uid_list = [] relation_object_list = [] - + for i, value, uid, display_text in self.relation_editor_list: if uid is not None: if type(uid) is type('a') and uid.startswith(new_content_prefix): @@ -255,7 +258,7 @@ class MultiRelationEditor: for p_item in self.portal_type_item: if p_item[0] == portal_type: portal_module = o.getPortalObject().getDefaultModuleId( p_item[0] ) - if portal_module is not None: + if portal_module is not None: portal_module_object = getattr(o.getPortalObject(), portal_module) kw ={} #kw[self.key] = value @@ -265,18 +268,18 @@ class MultiRelationEditor: new_object = portal_module_object.newContent(**kw) uid = new_object.getUid() else: - raise + raise relation_uid_list.append(int(uid)) relation_object_list.append( o.portal_catalog.getObject(uid) ) #if relation_uid_list != []: - # Edit relation + # Edit relation if self.relation_setter_id: relation_setter = getattr(o, self.relation_setter_id) relation_setter((), portal_type=self.portal_type) - relation_setter( relation_uid_list , portal_type=self.portal_type) + relation_setter( relation_uid_list , portal_type=self.portal_type) else: # we could call a generic method which create the setter method name set_method_name = '_set'+convertToUpperCase(self.base_category)+'ValueList' @@ -285,20 +288,20 @@ class MultiRelationEditor: else: # Nothing to do pass -# # Delete relation +# # Delete relation # if self.relation_setter_id: # relation_setter = getattr(o, self.relation_setter_id) # relation_setter((), portal_type=self.portal_type) # else: -# o._setValueUids(self.base_category, (), portal_type=self.portal_type) +# o._setValueUids(self.base_category, (), portal_type=self.portal_type) allow_class(MultiRelationEditor) -class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField.RelationStringFieldValidator): +class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField.RelationStringFieldValidator): """ Validation includes lookup of relared instances - """ + """ message_names = Validator.LinesValidator.message_names + \ RelationField.RelationStringFieldValidator.message_names @@ -311,7 +314,7 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField _v_message_name_list.append(message_name) _v_dict[message_name] = 1 message_names = _v_message_name_list - + def validate(self, field, key, REQUEST): portal_type = map(lambda x:x[0],field.get_value('portal_type')) portal_type_item = field.get_value('portal_type') @@ -319,14 +322,14 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField # If the value is different, build a query portal_selections = getToolByName(field, 'portal_selections') - portal_catalog = getToolByName(field, 'portal_catalog') + portal_catalog = getToolByName(field, 'portal_catalog') # Get the current value value_list = Validator.LinesValidator.validate(self, field, key, REQUEST) # if type(value_list) == type(''): # value_list = [value_list] - + # If the value is the same as the current field value, do nothing current_value_list = field.get_value('default') if type(current_value_list) == type(''): @@ -335,24 +338,24 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField catalog_index = field.get_value('catalog_index') relation_setter_id = field.get_value('relation_setter_id') - relation_field_id = 'relation_%s' % ( key ) + relation_field_id = 'relation_%s' % ( key ) # we must know if user validate the form or click on the wheel button relation_uid_list = REQUEST.get(relation_field_id, None) - relation_field_sub_id = 'relation_%s_0' % ( key ) + relation_field_sub_id = 'relation_%s_0' % ( key ) if checkSameKeys( value_list, current_value_list ) and (relation_uid_list is None) and (not REQUEST.has_key( relation_field_sub_id )): # XXX Will be interpreted by Base_edit as "do nothing" #return MultiRelationEditor(field.id, base_category, portal_type, portal_type_item, catalog_index, relation_setter_id, None) return None - + else: - relation_field_id = 'relation_%s' % ( key ) + relation_field_id = 'relation_%s' % ( key ) # We must be able to erase the relation if (value_list == ['']) and (not REQUEST.has_key( relation_field_id )): display_text = 'Delete the relation' return MultiRelationEditor(field.id, base_category, portal_type, portal_type_item, catalog_index, relation_setter_id, []) -# return RelationEditor(key, base_category, portal_type, None, +# return RelationEditor(key, base_category, portal_type, None, # portal_type_item, catalog_index, value, relation_setter_id, display_text) # Will be interpreted by Base_edit as "delete relation" (with no uid and value = '') @@ -363,39 +366,39 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField relation_editor_list = [] for i in range( len(relation_uid_list) ): - relation_item_id = 'item_%s_%s' % ( key, i ) + relation_item_id = 'item_%s_%s' % ( key, i ) relation_uid = relation_uid_list[i] - + related_object = portal_catalog.getObject(relation_uid) if related_object is not None: display_text = str(related_object.getProperty(catalog_index)) else: - display_text = 'Object has been deleted' - # Check + display_text = 'Object has been deleted' + # Check REQUEST.set(relation_item_id, ( (display_text, relation_uid), )) # Storing display_text as value is needded in this case relation_editor_list.append( (i, display_text, str(relation_uid), display_text) ) return MultiRelationEditor(field.id, base_category, portal_type, portal_type_item, catalog_index, relation_setter_id, relation_editor_list) - - + + else: # User validate the form relation_editor_list = [] raising_error_needed = 0 raising_error_value = '' - + # Check all relation for i in range( len(value_list) ): - relation_field_id = 'relation_%s_%s' % ( key, i ) - relation_item_id = 'item_%s_%s' % ( key, i ) - + relation_field_id = 'relation_%s_%s' % ( key, i ) + relation_item_id = 'item_%s_%s' % ( key, i ) + relation_uid = REQUEST.get(relation_field_id, None) value = value_list[i] - + # If we get a empty string, delete this line if value == '': # Clean request if necessary @@ -412,8 +415,8 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField if related_object is not None: display_text = str(related_object.getProperty(catalog_index)) else: - display_text = 'Object has been deleted' - # Check + display_text = 'Object has been deleted' + # Check REQUEST.set(relation_item_id, ( (display_text, relation_uid), )) relation_editor_list.append( (i, value, str(relation_uid), display_text) ) @@ -431,9 +434,9 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField menu_item_list = [('', '')] new_object_menu_item_list = [] for p in portal_type: - new_object_menu_item_list += [('New %s' % p, '%s%s' % (new_content_prefix,p))] + new_object_menu_item_list += [('New %s' % p, '%s%s' % (new_content_prefix,p))] - if len(relation_list) >= MAX_SELECT: + if len(relation_list) >= MAX_SELECT: # If the length is long, raise an error # This parameter means we need listbox help REQUEST.set(relation_item_id, []) @@ -447,14 +450,14 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField if related_object is not None: display_text = str(related_object.getProperty(catalog_index)) else: - display_text = 'Object has been deleted' - + display_text = 'Object has been deleted' + REQUEST.set(relation_item_id, ( (display_text, relation_uid), )) relation_editor_list.append( (0, value, relation_uid, display_text) ) - + elif len(relation_list) == 0: # If the length is 0, raise an error - menu_item_list += new_object_menu_item_list + menu_item_list += new_object_menu_item_list REQUEST.set(relation_item_id, menu_item_list) raising_error_needed = 1 raising_error_value = 'relation_result_empty' @@ -462,14 +465,14 @@ class MultiRelationStringFieldValidator(Validator.LinesValidator, RelationField else: # If the length is short, raise an error # len(relation_list) < MAX_SELECT: - - #menu_item_list += [('-', '')] - menu_item_list += map(lambda x: (x.getObject().getProperty(catalog_index), x.uid), + + #menu_item_list += [('-', '')] + menu_item_list += map(lambda x: (x.getObject().getProperty(catalog_index), x.uid), relation_list) REQUEST.set(relation_item_id, menu_item_list) raising_error_needed = 1 raising_error_value = 'relation_result_ambiguous' - + # validate MultiRelation field if raising_error_needed: # Raise error diff --git a/product/ERP5Form/RelationField.py b/product/ERP5Form/RelationField.py index ec48ed46cd..4ca31376ae 100755 --- a/product/ERP5Form/RelationField.py +++ b/product/ERP5Form/RelationField.py @@ -53,7 +53,7 @@ class RelationStringFieldWidget(Widget.TextWidget, Widget.ListWidget): """ property_names = Widget.TextWidget.property_names + \ - ['update_method', 'jump_method', 'base_category', 'portal_type', 'catalog_index', + ['update_method', 'jump_method', 'jump_allowed', 'base_category', 'portal_type', 'catalog_index', 'default_module', 'relation_setter_id', 'columns','sort','parameter_list','list_method', 'first_item', 'items', 'size', 'extra_item'] @@ -72,6 +72,13 @@ class RelationStringFieldWidget(Widget.TextWidget, Widget.ListWidget): default="Base_jumpToRelatedDocument", required=1) + jump_allowed = fields.CheckBoxField('jump_allowed', + title='Jump Allowed', + description=( + "Do we allow to jump to the relation ?"), + default=1, + required=0) + base_category = fields.StringField('base_category', title='Base Category', description=( @@ -116,8 +123,8 @@ class RelationStringFieldWidget(Widget.TextWidget, Widget.ListWidget): "widget will be displayed as a drop down box by many browsers, " "if set to something higher, a list will be shown. Required."), default=1, - required=1) - + required=1) + columns = fields.ListTextAreaField('columns', title="Columns", description=( @@ -164,9 +171,9 @@ class RelationStringFieldWidget(Widget.TextWidget, Widget.ListWidget): from Products.Formulator.TALESField import TALESMethod field.tales['items'] = TALESMethod('REQUEST/relation_item_list') REQUEST['relation_item_list'] = REQUEST.get(relation_item_id) - html_string += ' %s ' % Widget.ListWidget.render(self, - field, relation_field_id, None, REQUEST) - REQUEST['relation_item_list'] = None + html_string += ' %s ' % Widget.ListWidget.render(self, + field, relation_field_id, None, REQUEST) + REQUEST['relation_item_list'] = None # We used to add a button which has a path reference to a base category... # but it really created too many problems @@ -176,24 +183,26 @@ class RelationStringFieldWidget(Widget.TextWidget, Widget.ListWidget): #elif value != field.get_value('default'): else: html_string += ' <input type="image" src="%s/images/exec16.png" value="update..." name="%s/portal_selections/viewSearchRelatedDocumentDialog%s:method">' \ - % (portal_url_string, portal_object.getPath(), + % (portal_url_string, portal_object.getPath(), getattr(field.aq_parent, '_v_relation_field_index', 0)) relation_field_index = getattr(field.aq_parent, '_v_relation_field_index', 0) - field.aq_parent._v_relation_field_index = relation_field_index + 1 # Increase index + field.aq_parent._v_relation_field_index = relation_field_index + 1 # Increase index - if value not in ( None, '' ) and not REQUEST.has_key(relation_item_id) and value == field.get_value('default'): + if value not in ( None, '' ) and not REQUEST.has_key(relation_item_id) and value == field.get_value('default') and field.get_value('jump_allowed') == 1 : if REQUEST.get('selection_name') is not None: html_string += ' <a href="%s/%s?field_id=%s&form_id=%s&selection_name=%s&selection_index=%s"><img src="%s/images/jump.png"></a>' \ % (here.absolute_url(), field.get_value('jump_method'), field.id, field.aq_parent.id, REQUEST.get('selection_name'), REQUEST.get('selection_index'),portal_url_string) else: html_string += ' <a href="%s/%s?field_id=%s&form_id=%s"><img src="%s/images/jump.png"></a>' \ - % (here.absolute_url(), field.get_value('jump_method'), field.id, field.aq_parent.id,portal_url_string) + % (here.absolute_url(), field.get_value('jump_method'), field.id, field.aq_parent.id,portal_url_string) return html_string def render_view(self, field, value): """Render text input field. """ + if field.get_value('jump_allowed') == 0 : + return Widget.TextWidget.render_view(self, field, value) REQUEST = get_request() here = REQUEST['here'] html_string = Widget.TextWidget.render_view(self, field, value) @@ -210,7 +219,7 @@ class RelationEditor: A class holding all values required to update a relation """ - def __init__(self, field_id, base_category, portal_type, uid, portal_type_item, + def __init__(self, field_id, base_category, portal_type, uid, portal_type_item, key, value, relation_setter_id, display_text): self.field_id = field_id self.uid = uid @@ -221,24 +230,24 @@ class RelationEditor: self.value = value self.relation_setter_id = relation_setter_id self.display_text = display_text - + def __call__(self, REQUEST): - if self.uid is not None: + if self.uid is not None: # Decorate the request so that we can display # the select item in a popup - relation_field_id = 'relation_%s' % self.field_id + relation_field_id = 'relation_%s' % self.field_id relation_item_id = 'item_%s' % self.field_id REQUEST.set(relation_item_id, ((self.display_text, self.uid),)) REQUEST.set(relation_field_id, self.uid) REQUEST.set(self.field_id[len('field_'):], self.value) # XXX Dirty else: # Make sure no default value appears - REQUEST.set(self.field_id[len('field_'):], None) - + REQUEST.set(self.field_id[len('field_'):], None) + def view(self): - return self.__dict__ - - def edit(self, o): + return self.__dict__ + + def edit(self, o): if self.uid is not None: if type(self.uid) is type('a') and self.uid.startswith(new_content_prefix): # Create a new content @@ -248,7 +257,7 @@ class RelationEditor: if p_item[0] == portal_type: #portal_module = p_item[1] portal_module = o.getPortalObject().getDefaultModuleId( p_item[0] ) - if portal_module is not None: + if portal_module is not None: portal_module_object = getattr(o.getPortalObject(), portal_module) kw ={} kw[self.key] = string.join( string.split(self.value,'%'), '' ) @@ -257,22 +266,22 @@ class RelationEditor: new_object = portal_module_object.newContent(**kw) self.uid = new_object.getUid() else: - raise + raise - # Edit relation + # Edit relation if self.relation_setter_id: relation_setter = getattr(o, self.relation_setter_id) relation_setter((), portal_type=self.portal_type) - relation_setter((int(self.uid),), portal_type=self.portal_type) + relation_setter((int(self.uid),), portal_type=self.portal_type) else: # we could call a generic method which create the setter method name set_method_name = '_set'+convertToUpperCase(self.base_category)+'Value' - object = o.portal_catalog.getObject( self.uid ) + object = o.portal_catalog.getObject( self.uid ) getattr(o, set_method_name)( object,portal_type=self.portal_type ) else: if self.value == '': - # Delete relation + # Delete relation if self.relation_setter_id: relation_setter = getattr(o, self.relation_setter_id) relation_setter((), portal_type=self.portal_type) @@ -284,27 +293,27 @@ class RelationEditor: allow_class(RelationEditor) -class RelationStringFieldValidator(Validator.StringValidator): +class RelationStringFieldValidator(Validator.StringValidator): """ Validation includes lookup of relared instances - """ - + """ + message_names = Validator.StringValidator.message_names +\ ['relation_result_too_long', 'relation_result_ambiguous', 'relation_result_empty',] relation_result_too_long = "Too many documents were found." relation_result_ambiguous = "Select appropriate document in the list." relation_result_empty = "No such document was found." - + def validate(self, field, key, REQUEST): - relation_field_id = 'relation_%s' % key + relation_field_id = 'relation_%s' % key relation_item_id = 'item_%s' % key portal_type = map(lambda x:x[0],field.get_value('portal_type')) portal_type_item = field.get_value('portal_type') base_category = field.get_value( 'base_category') # If the value is different, build a query portal_selections = getToolByName(field, 'portal_selections') - portal_catalog = getToolByName(field, 'portal_catalog') + portal_catalog = getToolByName(field, 'portal_catalog') # Get the current value value = Validator.StringValidator.validate(self, field, key, REQUEST) # If the value is the same as the current field value, do nothing @@ -317,15 +326,15 @@ class RelationStringFieldValidator(Validator.StringValidator): if (value == current_value) and (relation_uid is None): return None -# XXX return RelationEditor(key, base_category, portal_type, None, +# XXX return RelationEditor(key, base_category, portal_type, None, # portal_type_item, catalog_index, value, relation_setter_id, None) # Will be interpreted by Base_edit as "do nothing" if relation_uid not in (None, ''): # A value has been defined by the user - if type(relation_uid) in (type([]), type(())): + if type(relation_uid) in (type([]), type(())): if len( relation_uid ) == 0: # No object was selected... - self.raise_error('relation_result_too_long', field) + self.raise_error('relation_result_too_long', field) else: relation_uid = relation_uid[0] @@ -333,18 +342,18 @@ class RelationStringFieldValidator(Validator.StringValidator): if related_object is not None: display_text = str(related_object.getProperty(catalog_index)) else: - display_text = 'Object has been deleted' - return RelationEditor(key, base_category, portal_type, relation_uid, + display_text = 'Object has been deleted' + return RelationEditor(key, base_category, portal_type, relation_uid, portal_type_item, catalog_index, value, relation_setter_id, display_text) # We must be able to erase the relation if value == '': display_text = 'Delete the relation' - return RelationEditor(key, base_category, portal_type, None, + return RelationEditor(key, base_category, portal_type, None, portal_type_item, catalog_index, value, relation_setter_id, display_text) # Will be interpreted by Base_edit as "delete relation" (with no uid and value = '') - + kw ={} kw[catalog_index] = value kw['portal_type'] = portal_type @@ -359,7 +368,7 @@ class RelationStringFieldValidator(Validator.StringValidator): menu_item_list = [('', '')] new_object_menu_item_list = [] for p in portal_type: - new_object_menu_item_list += [('New %s' % p, '%s%s' % (new_content_prefix,p))] + new_object_menu_item_list += [('New %s' % p, '%s%s' % (new_content_prefix,p))] # If the length is 1, return uid if len(relation_list) == 1: relation_uid = relation_uid_list[0] @@ -367,29 +376,29 @@ class RelationStringFieldValidator(Validator.StringValidator): if related_object is not None: display_text = str(related_object.getProperty(catalog_index)) else: - display_text = 'Object has been deleted' - - return RelationEditor(key, base_category, portal_type, relation_uid, + display_text = 'Object has been deleted' + + return RelationEditor(key, base_category, portal_type, relation_uid, portal_type_item, catalog_index, value, relation_setter_id, display_text) # If the length is 0, raise an error elif len(relation_list) == 0: - menu_item_list += new_object_menu_item_list + menu_item_list += new_object_menu_item_list REQUEST.set(relation_item_id, menu_item_list) self.raise_error('relation_result_empty', field) # If the length is short, raise an error - elif len(relation_list) < MAX_SELECT: - #menu_item_list += [('-', '')] - menu_item_list += map(lambda x: (x.getObject().getProperty(catalog_index), x.uid), + elif len(relation_list) < MAX_SELECT: + #menu_item_list += [('-', '')] + menu_item_list += map(lambda x: (x.getObject().getProperty(catalog_index), x.uid), relation_list) REQUEST.set(relation_item_id, menu_item_list) self.raise_error('relation_result_ambiguous', field) else: # If the length is long, raise an error - + # If this error is raise, we don t want to create a new object... #REQUEST.set(relation_item_id, menu_item_list) - self.raise_error('relation_result_too_long', field) - + self.raise_error('relation_result_too_long', field) + RelationStringFieldWidgetInstance = RelationStringFieldWidget() RelationStringFieldValidatorInstance = RelationStringFieldValidator() -- 2.30.9