Commit f36260d2 authored by Julien Muchembled's avatar Julien Muchembled

Code clean up in ListBox & EditorField

parent 4d1b9357
...@@ -94,15 +94,10 @@ for f in form.get_fields():\n ...@@ -94,15 +94,10 @@ for f in form.get_fields():\n
listbox = request.get(\'listbox\') # XXX: hardcoded field name\n listbox = request.get(\'listbox\') # XXX: hardcoded field name\n
if listbox is not None:\n if listbox is not None:\n
listbox_line_list = []\n listbox_line_list = []\n
listbox = getattr(request,\'listbox\',None) # XXX: hardcoded field name\n for key, value in sorted(listbox.iteritems()):\n
listbox_keys = listbox.keys()\n value[\'listbox_key\'] = key\n
listbox_keys.sort()\n listbox_line_list.append(value)\n
for key in listbox_keys:\n doaction_param_list[\'listbox\'] = tuple(listbox_line_list)\n
listbox_line = listbox[key]\n
listbox_line[\'listbox_key\'] = key\n
listbox_line_list.append(listbox[key])\n
listbox_line_list = tuple(listbox_line_list)\n
doaction_param_list[\'listbox\'] = listbox_line_list # XXX: hardcoded field name\n
\n \n
try:\n try:\n
context.portal_workflow.doActionFor(\n context.portal_workflow.doActionFor(\n
......
...@@ -83,15 +83,12 @@ class EditorWidget(Widget.TextAreaWidget): ...@@ -83,15 +83,12 @@ class EditorWidget(Widget.TextAreaWidget):
""" """
here = REQUEST['here'] here = REQUEST['here']
text_editor = field.get_value('text_editor') text_editor = field.get_value('text_editor')
if text_editor == 'text_area': if text_editor == 'bespin':
return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
elif text_editor == 'bespin':
# XXX The usage of bespin editor depends of erp5_bespin bt5 # XXX The usage of bespin editor depends of erp5_bespin bt5
# installed and still experimental. If erp5_bespin is not installed, it # installed and still experimental. If erp5_bespin is not installed, it
# render standard an standard editor field. # render standard an standard editor field.
bespin_support = getattr(here, 'bespin_support',None) bespin_support = getattr(here, 'bespin_support',None)
if bespin_support is None: if bespin_support is not None:
return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
return bespin_support.pt_render( return bespin_support.pt_render(
extra_context= { extra_context= {
'field' : field, 'field' : field,
...@@ -100,8 +97,7 @@ class EditorWidget(Widget.TextAreaWidget): ...@@ -100,8 +97,7 @@ class EditorWidget(Widget.TextAreaWidget):
}) })
elif text_editor == "xinha": elif text_editor == "xinha":
xinha_support = getattr(here, 'xinha_support', None) xinha_support = getattr(here, 'xinha_support', None)
if xinha_support is None: if xinha_support is not None:
return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
return xinha_support.pt_render( return xinha_support.pt_render(
extra_context= { extra_context= {
'field' : field, 'field' : field,
...@@ -110,27 +106,25 @@ class EditorWidget(Widget.TextAreaWidget): ...@@ -110,27 +106,25 @@ class EditorWidget(Widget.TextAreaWidget):
}) })
elif text_editor == "svg_editor": elif text_editor == "svg_editor":
svg_editor_support = getattr(here, 'svg_editor_support', None) svg_editor_support = getattr(here, 'svg_editor_support', None)
if svg_editor_support is None: if svg_editor_support is not None:
return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
return svg_editor_support.pt_render() return svg_editor_support.pt_render()
elif text_editor == "spreadsheet_editor": elif text_editor == "spreadsheet_editor":
sheet_editor_support = getattr(here, 'sheet_editor_support', None) sheet_editor_support = getattr(here, 'sheet_editor_support', None)
if sheet_editor_support is None: if sheet_editor_support is not None:
return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
return sheet_editor_support.pt_render() return sheet_editor_support.pt_render()
elif text_editor == 'ace': elif text_editor == 'ace':
ace_editor_support = getattr(here, 'ace_editor_support', None) ace_editor_support = getattr(here, 'ace_editor_support', None)
if ace_editor_support is None: if ace_editor_support is not None:
return Widget.TextAreaWidth.render(self, field, key, value, REQUEST)
return ace_editor_support.pt_render(extra_context={'field': field, return ace_editor_support.pt_render(extra_context={'field': field,
'content': value, 'content': value,
'id': key}) 'id': key})
else: elif text_editor != 'text_area':
return here.fckeditor_wysiwyg_support.pt_render( return here.fckeditor_wysiwyg_support.pt_render(
extra_context= { extra_context= {
'inputvalue' : value, 'inputvalue' : value,
'inputname' : key 'inputname' : key
}) })
return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
def render_view(self, field, value, REQUEST=None, render_prefix=None): def render_view(self, field, value, REQUEST=None, render_prefix=None):
""" """
......
...@@ -2746,7 +2746,7 @@ class ListBoxValidator(Validator.Validator): ...@@ -2746,7 +2746,7 @@ class ListBoxValidator(Validator.Validator):
editable_columns = field.get_value('editable_columns') editable_columns = field.get_value('editable_columns')
column_ids = [x[0] for x in columns] column_ids = [x[0] for x in columns]
editable_column_ids = [x[0] for x in editable_columns] editable_column_ids = [x[0] for x in editable_columns]
editable_field_dict = dict() editable_field_dict = {}
for sql in editable_column_ids: for sql in editable_column_ids:
alias = sql.replace('.', '_') alias = sql.replace('.', '_')
editable_field_dict[alias] = ListBoxRenderer( editable_field_dict[alias] = ListBoxRenderer(
...@@ -2754,55 +2754,49 @@ class ListBoxValidator(Validator.Validator): ...@@ -2754,55 +2754,49 @@ class ListBoxValidator(Validator.Validator):
selection_name = field.get_value('selection_name') selection_name = field.get_value('selection_name')
#LOG('ListBoxValidator', 0, 'field = %s, selection_name = %s' % (repr(field), repr(selection_name))) #LOG('ListBoxValidator', 0, 'field = %s, selection_name = %s' % (repr(field), repr(selection_name)))
params = here.portal_selections.getSelectionParamsFor( portal = here.getPortalObject()
params = portal.portal_selections.getSelectionParamsFor(
selection_name, selection_name,
REQUEST=REQUEST) REQUEST=REQUEST)
portal_url = getToolByName(here, 'portal_url') portal_url = portal.portal_url
portal = portal_url.getPortalObject()
result = {} result = {}
error_result = {} error_result = {}
MARKER = [] try:
listbox_uids = REQUEST.get('%s_uid' % field.id, MARKER) listbox_uids = REQUEST['%s_uid' % field.id]
if listbox_uids is MARKER: except KeyError:
raise KeyError, 'Field %s is not present in request object.' % (field.id, ) raise KeyError('Field %s is not present in request object.'
% field.id)
#LOG('ListBox.validate: REQUEST',0,REQUEST) #LOG('ListBox.validate: REQUEST',0,REQUEST)
errors = [] errors = []
object_list = [] object_list = None
# We have two things to do in the case of temp objects, # We have two things to do in the case of temp objects,
# the first thing is to create a list with new temp objects # the first thing is to create a list with new temp objects
# then try to validate some data, and then create again # then try to validate some data, and then create again
# the list with a listbox as parameter. Like this we # the list with a listbox as parameter. Like this we
# can use tales expression # can use tales expression
listbox = {}
for uid in listbox_uids: for uid in listbox_uids:
if str(uid).find('new') == 0: if uid[:4] == 'new_':
if object_list is None:
list_method = field.get_value('list_method') list_method = field.get_value('list_method')
list_method = getattr(here, list_method.method_name) list_method = getattr(here, list_method.method_name)
#LOG('ListBoxValidator', 0, 'call %s' % repr(list_method)) #LOG('ListBoxValidator', 0, 'call %s' % repr(list_method))
object_list = list_method(REQUEST=REQUEST, **params) object_list = list_method(REQUEST=REQUEST, **params)
row_key = uid[4:]
for o in object_list:
if o.getUid() == uid:
break break
listbox = {} else:
for uid in listbox_uids:
if str(uid).find('new') == 0:
o = None
for object in object_list:
if object.getUid()==uid:
o = object
if o is None:
# First case: dialog input to create new objects # First case: dialog input to create new objects
o = newTempBase(portal, uid[4:]) # Arghhh - XXX acquisition problem - use portal root o = newTempBase(portal, row_key) # Arghhh - XXX acquisition problem - use portal root
o.uid = uid o.uid = uid
listbox[uid[4:]] = {} listbox[row_key] = row_result = {}
# We first try to set a listbox corresponding to all things # We first try to set a listbox corresponding to all things
# we can validate, so that we can use the same list # we can validate, so that we can use the same list
# as the one used for displaying the listbox # as the one used for displaying the listbox
for sql in editable_column_ids: for sql in editable_column_ids:
alias = sql.replace('.', '_') editable_field = editable_field_dict.get(sql.replace('.', '_'))
if '.' in sql:
property_id = '.'.join(sql.split('.')[1:]) # Only take trailing part
else:
property_id = alias
editable_field = editable_field_dict.get(alias)
if editable_field is not None: if editable_field is not None:
error_result_key = '%s_%s' % (editable_field.id, o.uid) error_result_key = '%s_%s' % (editable_field.id, o.uid)
key = 'field_' + error_result_key key = 'field_' + error_result_key
...@@ -2810,39 +2804,31 @@ class ListBoxValidator(Validator.Validator): ...@@ -2810,39 +2804,31 @@ class ListBoxValidator(Validator.Validator):
try: try:
value = editable_field._validate_helper(key, REQUEST) # We need cell value = editable_field._validate_helper(key, REQUEST) # We need cell
# Here we set the property # Here we set the property
listbox[uid[4:]][sql] = value row_result[sql] = value
except ValidationError, err: except ValidationError, err:
pass pass
except KeyError: except KeyError:
pass pass
# Here we generate again the object_list with listbox the listbox we # Here we generate again the object_list with listbox the listbox we
# have just created # have just created
if len(listbox)>0: if listbox:
list_method = field.get_value('list_method') list_method = field.get_value('list_method')
list_method = getattr(here, list_method.method_name) list_method = getattr(here, list_method.method_name)
REQUEST.set(field.id, listbox) REQUEST.set(field.id, listbox)
object_list = list_method(REQUEST=REQUEST, **params) object_list = list_method(REQUEST=REQUEST, **params)
for uid in listbox_uids: for uid in listbox_uids:
if str(uid).find('new') == 0: row_result = {}
# First case: dialog input to create new objects if uid[:4] == 'new_':
#o = newTempBase(here, uid[4:]) # Arghhh - XXX acquisition problem - use portal root
#o.uid = uid
o = None
for object in object_list:
if object.getUid()==uid:
o = object
if o is None:
# First case: dialog input to create new objects # First case: dialog input to create new objects
o = newTempBase(portal, uid[4:]) # Arghhh - XXX acquisition problem - use portal root row_key = uid[4:]
for o in object_list:
if o.getUid() == uid:
break
else:
o = newTempBase(portal, row_key) # Arghhh - XXX acquisition problem - use portal root
o.uid = uid o.uid = uid
result[uid[4:]] = {}
for sql in editable_column_ids: for sql in editable_column_ids:
alias = sql.replace('.', '_') editable_field = editable_field_dict.get(sql.replace('.', '_'))
if '.' in sql:
property_id = '.'.join(sql.split('.')[1:]) # Only take trailing part
else:
property_id = alias
editable_field = editable_field_dict.get(alias)
if editable_field is not None: if editable_field is not None:
REQUEST.set('cell', o) REQUEST.set('cell', o)
editable = editable_field.get_value('editable', REQUEST=REQUEST) editable = editable_field.get_value('editable', REQUEST=REQUEST)
...@@ -2851,8 +2837,8 @@ class ListBoxValidator(Validator.Validator): ...@@ -2851,8 +2837,8 @@ class ListBoxValidator(Validator.Validator):
error_result_key = '%s_%s' % (editable_field.id, o.uid) error_result_key = '%s_%s' % (editable_field.id, o.uid)
key = 'field_' + error_result_key key = 'field_' + error_result_key
try: try:
value = editable_field._validate_helper(key, REQUEST) # We need cell row_result[sql] = editable_field._validate_helper(
result[uid[4:]][sql] = value key, REQUEST) # We need cell
except ValidationError, err: except ValidationError, err:
#LOG("ListBox ValidationError",0,str(err)) #LOG("ListBox ValidationError",0,str(err))
err.field_id = error_result_key err.field_id = error_result_key
...@@ -2869,43 +2855,34 @@ class ListBoxValidator(Validator.Validator): ...@@ -2869,43 +2855,34 @@ class ListBoxValidator(Validator.Validator):
# because sometimes, we can be provided bad uids # because sometimes, we can be provided bad uids
try : try :
o = here.portal_catalog.getObject(uid) o = here.portal_catalog.getObject(uid)
except (KeyError, NotFound, ValueError): except (KeyError, NotFound, ValueError), err:
o = None
if o is None:
# It is possible that this object is not catalogged yet. So # It is possible that this object is not catalogged yet. So
# the object must be obtained from ZODB. # the object must be obtained from ZODB.
if not object_list: if object_list is None:
list_method = field.get_value('list_method') list_method = field.get_value('list_method')
list_method = getattr(here, list_method.method_name) list_method = getattr(here, list_method.method_name)
object_list = list_method(REQUEST=REQUEST, **params) object_list = list_method(REQUEST=REQUEST, **params)
for object in object_list: for o in object_list:
try: try:
if object.getUid() == int(uid): if o.getUid() == int(uid):
o = object
break break
except ValueError: except ValueError:
if str(object.getUid()) == uid: if str(object.getUid()) == uid:
o = object
break break
for sql in editable_column_ids:
alias = sql.replace('.', '_')
if '.' in sql:
property_id = '.'.join(sql.split('.')[1:]) # Only take trailing part
else: else:
property_id = alias raise err
editable_field = editable_field_dict.get(alias) row_key = o.getUrl()
for sql in editable_column_ids:
editable_field = editable_field_dict.get(sql.replace('.', '_'))
if editable_field is not None: if editable_field is not None:
REQUEST.set('cell', o) # We need cell REQUEST.set('cell', o) # We need cell
if editable_field.get_value('editable', REQUEST=REQUEST) \ if editable_field.get_value('editable', REQUEST=REQUEST) and \
and field.need_validate(REQUEST): editable_field.need_validate(REQUEST):
error_result_key = '%s_%s' % (editable_field.id, o.uid) error_result_key = '%s_%s' % (editable_field.id, o.uid)
key = 'field_' + error_result_key key = 'field_' + error_result_key
try: try:
value = editable_field._validate_helper(key, REQUEST) row_result[sql] = error_result[error_result_key] = \
error_result[error_result_key] = value editable_field._validate_helper(key, REQUEST)
if not result.has_key(o.getUrl()):
result[o.getUrl()] = {}
result[o.getUrl()][sql] = value
except ValidationError, err: except ValidationError, err:
err.field_id = error_result_key err.field_id = error_result_key
errors.append(err) errors.append(err)
...@@ -2916,6 +2893,7 @@ class ListBoxValidator(Validator.Validator): ...@@ -2916,6 +2893,7 @@ class ListBoxValidator(Validator.Validator):
#except: #except:
else: else:
LOG("ListBox WARNING",0,"Object uid %s could not be validated" % uid) LOG("ListBox WARNING",0,"Object uid %s could not be validated" % uid)
result[row_key] = row_result
if len(errors) > 0: if len(errors) > 0:
#LOG("ListBox FormValidationError",0,str(error_result)) #LOG("ListBox FormValidationError",0,str(error_result))
#LOG("ListBox FormValidationError",0,str(errors)) #LOG("ListBox FormValidationError",0,str(errors))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment