diff --git a/product/ERP5Form/RelationField.py b/product/ERP5Form/RelationField.py index e71fc20a48d0a1a13b035335bec972326c0171d5..8e87fd7aef77bf92ca6189f25e3806759149f9b1 100755 --- a/product/ERP5Form/RelationField.py +++ b/product/ERP5Form/RelationField.py @@ -34,6 +34,8 @@ from Products.CMFCore.utils import getToolByName from Globals import get_request from Products.PythonScripts.Utility import allow_class +import string + from zLOG import LOG MAX_SELECT = 50 # Max. number of catalog result new_content_prefix = '_newContent_' @@ -140,16 +142,19 @@ class RelationStringFieldWidget(Widget.TextWidget, Widget.ListWidget): 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 # now we do it in another way # we compare what has been changed in the relation update script - 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) + + elif value != field.get_value('default'): + 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) field.aq_parent._v_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'): 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) @@ -218,8 +223,9 @@ class RelationEditor: if portal_module is not None: portal_module_object = getattr(o.getPortalObject(), portal_module) kw ={} - kw[self.key] = self.value + kw[self.key] = string.join( string.split(self.value,'%'), '' ) kw['portal_type'] = portal_type + kw['immediate_reindex'] = 1 new_object = portal_module_object.newContent(**kw) self.uid = new_object.getUid() else: @@ -276,8 +282,9 @@ class RelationStringFieldValidator(Validator.StringValidator): catalog_index = field.get_value('catalog_index') relation_setter_id = field.get_value('relation_setter_id') if value == current_value: - return RelationEditor(key, base_category, portal_type, None, - portal_type_item, catalog_index, value, relation_setter_id, None) + return 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 @@ -306,8 +313,9 @@ class RelationStringFieldValidator(Validator.StringValidator): relation_uid_list = map(lambda x: x.uid, relation_list) # Prepare a menu menu_item_list = [('', '')] + new_object_menu_item_list = [] for p in portal_type: - 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] @@ -321,11 +329,12 @@ class RelationStringFieldValidator(Validator.StringValidator): 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 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 += [('-', '')] menu_item_list += map(lambda x: (x.getObject().getProperty(catalog_index), x.uid), relation_list) REQUEST.set(relation_item_id, menu_item_list)