[Erp5-report] r6826 - /erp5/trunk/products/ERP5Form/MatrixBox.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Apr 20 10:41:31 CEST 2006
Author: jerome
Date: Thu Apr 20 10:41:27 2006
New Revision: 6826
URL: http://svn.erp5.org?rev=6826&view=rev
Log:
Reset cell key to None in REQUEST if no cell value; Validate subfields for editable cells. FIXME: currently only keys which contains a cell value are validated
Modified:
erp5/trunk/products/ERP5Form/MatrixBox.py
Modified: erp5/trunk/products/ERP5Form/MatrixBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/MatrixBox.py?rev=6826&r1=6825&r2=6826&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/MatrixBox.py (original)
+++ erp5/trunk/products/ERP5Form/MatrixBox.py Thu Apr 20 10:41:27 2006
@@ -30,7 +30,12 @@
from AccessControl import ClassSecurityInfo
from Products.Formulator.DummyField import fields
from Products.Formulator import Widget, Validator
+from Products.Formulator.Errors import FormValidationError, ValidationError
from Products.Formulator.Field import ZMIField
+from Products.ERP5Type.Message import Message
+
+def N_(message, **kw):
+ return Message('erp5_ui', message, **kw)
class MatrixBoxWidget(Widget.Widget):
"""
@@ -183,6 +188,7 @@
lines = field.get_value('lines')
columns = field.get_value('columns')
tabs = field.get_value('tabs')
+ field_errors = REQUEST.get('field_errors', {})
context = here
getter_method_id = field.get_value('getter_method')
if getter_method_id not in (None,''):
@@ -223,13 +229,11 @@
(not isinstance(tab_id, (list, tuple))):
tab_id = [tab_id]
- if render_format == 'list':
+ if render_format == 'list':
list_result_tab = [[tab[1]]]
# Create the header of the table - this should probably become DTML
- first_tab = tab[1]
- if first_tab is None:
- first_tab = ''
+ first_tab = tab[1] or ''
header = """\
<!-- Matrix Content -->
%s<br>
@@ -244,27 +248,25 @@
</td>
</div>
</tr>
- <tr >
- <td colspan="%s" width="50" align="center" valign="middle"
- class="DataA">
+ <tr>
+ <td colspan="%s" width="100" align="center" valign="middle"
+ class="Data">
</td>
</tr>
</table>
</div>
- """ % len(columns)
+ """ % len(columns)
list_header = """\
- <tr ><td class=\"Data\"></td>
+ <tr><td class=\"Data\"></td>
"""
for cname in columns:
- first_column = cname[1]
- if first_column is None:
- first_column = ''
- list_header = list_header + ("<td class=\"Data\">%s</td>\n" %
- str(first_column))
- if render_format == 'list':
- list_result_tab[0].append(cname[1])
+ first_column = cname[1] or ''
+ list_header = list_header + ("<td class=\"Data\">%s</td>\n" %
+ first_column)
+ if render_format == 'list':
+ list_result_tab[0].append(cname[1])
list_header = list_header + "</tr>"
@@ -274,7 +276,6 @@
list_body = ''
for l in lines:
-
if not i % 2:
td_css = 'DataA'
else:
@@ -282,13 +283,11 @@
list_body = list_body + '<tr><td class=\"%s\">%s</td>' % (td_css, str(l[1]))
j = 0
- if render_format == 'list':
+ if render_format == 'list':
list_result_lines = [ str(l[1]) ]
-
for c in columns:
- #if column_id is None and tab_id is None:
- # kw = []
+ has_error = 0
column_id = c[0]
if (column_id is not None) and \
(not isinstance(column_id, (list, tuple))):
@@ -309,37 +308,55 @@
my_field_id = '%s_%s' % (field.id, attribute_id)
if form.has_field(my_field_id):
my_field = form.get_field(my_field_id)
- key = my_field.id + '_cell_%s_%s_%s' % (i,j, k)
+ key = my_field.id + '_cell_%s_%s_%s' % (i,j,k)
if cell != None:
- attribute_value = my_field.get_value('default', cell = cell, cell_index = kw, cell_position = (i,j, k))
+ attribute_value = my_field.get_value('default',
+ cell=cell, cell_index=kw, cell_position = (i,j,k))
if render_format=='html':
REQUEST['cell'] = cell
- cell_body += str(my_field.render(value = attribute_value, REQUEST = REQUEST, key = key))
-
- elif render_format == 'list':
+ display_value = attribute_value
+
+ if field_errors.has_key(key):
+ # Display previous value (in case of error)
+ display_value = REQUEST.get('field_%s' % key,
+ attribute_value)
+ has_error = 1
+ cell_body += "%s<br/>%s" % (
+ my_field.render(value=display_value,
+ REQUEST=REQUEST,
+ key=key),
+ N_(field_errors[key].error_text))
+ else:
+ cell_body += str(my_field.render(
+ value=attribute_value,
+ REQUEST=REQUEST,
+ key=key))
+
+ elif render_format == 'list':
if not my_field.get_value('hidden'):
list_result_lines.append(attribute_value)
else:
if my_field.get_value('hidden'):
- attribute_value = my_field.get_value('default', cell_index = kw, cell_position = (i,j, k))
- if render_format == 'html':
- cell_body += str(my_field.render(value = attribute_value, REQUEST=REQUEST, key=key))
-
- else:
- if render_format == 'html':
- cell_body += str(my_field.render(value = my_field.get_orig_value('default') , REQUEST=REQUEST, key=key))
-
- elif render_format == 'list':
- list_result_lines.append(None)
-
+ attribute_value = my_field.get_value('default',
+ cell_index=kw, cell_position=(i,j,k))
+ else :
+ attribute_value = my_field.get_orig_value('default')
+ if render_format == 'html':
+ REQUEST['cell'] = None
+ cell_body += str(my_field.render(value=attribute_value,
+ REQUEST=REQUEST, key=key))
+ elif render_format == 'list':
+ list_result_lines.append(None)
+
+ css = td_css
+ if has_error :
+ css = td_css + 'Error'
list_body = list_body + \
- ('<td class=\"%s\">%s</td>' % (td_css, cell_body))
-
-
-
+ ('<td class=\"%s\">%s</td>' % (css, cell_body))
j += 1
+
list_body = list_body + '</tr>'
i += 1
@@ -374,7 +391,7 @@
tabs = field.get_value('tabs')
editable_attributes = field.get_value('editable_attributes')
getter_method_id = field.get_value('getter_method')
-
+ error_list = []
context = here
if getter_method_id not in (None,''):
context = getattr(here,getter_method_id)()
@@ -422,16 +439,21 @@
if form.has_field(my_field_id):
my_field = form.get_field(my_field_id)
if my_field.get_value('editable'):
- key = 'field_' + my_field.id + '_cell_%s_%s_%s' % (i,j, k)
- attribute_value = my_field.get_value('default', cell = cell, cell_index = kw,
- cell_position = (i,j, k))
- value = my_field.validator.validate(my_field, key, REQUEST)
-
- if (attribute_value != value or attribute_value not in('',None,(),[])) \
- and not my_field.get_value('hidden'):
+ key = 'field_' + my_field.id + '_cell_%s_%s_%s' % (i,j,k)
+ attribute_value = my_field.get_value('default',
+ cell=cell, cell_index=kw, cell_position = (i,j,k))
+ try :
+ value = my_field.validator.validate(
+ my_field, key, REQUEST)
+ except ValidationError, err :
+ err.field_id = my_field.id + '_cell_%s_%s_%s' % (i,j,k)
+ error_list.append(err)
+
+ if (attribute_value != value or \
+ attribute_value not in ('',None,(),[])) \
+ and not my_field.get_value('hidden'):
# Only validate modified values from visible fields
- if not result.has_key(kw):
- result[kw] = {}
+ result.setdefault(kw, {})
result[kw][attribute_id] = value
else:
if result.has_key(kw):
@@ -439,7 +461,8 @@
j += 1
i += 1
k += 1
-
+ if len(error_list):
+ raise FormValidationError(error_list, {})
return result
MatrixBoxValidatorInstance = MatrixBoxValidator()
@@ -462,6 +485,6 @@
return ZMIField.get_value(self, id, **kw)
# Psyco
-import psyco
+from Products.ERP5Type.PsycoWrapper import psyco
psyco.bind(MatrixBoxWidget.render)
psyco.bind(MatrixBoxValidator.validate)
More information about the Erp5-report
mailing list