Hi all,
CPSDateTimeWidget doesn't work fine with date formats in basque. This
format is y/m/d. I have created a patch to solve the problem.
--
Aitzol Naberan BurgaƱa
CodeSyntax
http://www.codesyntax.com
943 82 17 80
from Products.CPSSchemas.ExtendedWidgets import CPSDateTimeWidget
from DateTime import DateTime
from re import match
def getDateTimeInfoEu(self, value, mode=None):
"""Return a tuple that is used to set the datastructure
Called in prepare when mode is not known, and called again in render
when mode is known, because a default value has to be provided in edit
mode (current date time).
"""
# default values
date = ''
hour = ''
minute = ''
# value is set to current time if:
# - value is not alrady set and
# - widget is required an
# - mode is 'edit' or 'create'
if not value and self.is_required and mode in ['edit', 'create']:
value = DateTime()
if value == 'None':
value = None
if value:
# Backward compatibility test, this logic is not used by the
# current code.
if isinstance(value, str):
value = DateTime(value)
d = str(value.day())
m = str(value.month())
y = str(value.year())
if self.view_format.startswith('iso8601'):
date = '%s-%s-%s' % (y, m, d)
else:
locale = self.translation_service.getSelectedLanguage()
if locale in ('en', 'hu'):
date = '%s/%s/%s' % (m, d, y)
elif locale=='eu':
date = '%s/%s/%s' % (y,m,d)
else:
date = '%s/%s/%s' % (d, m, y)
hour = str(value.h_24())
minute = str(value.minute())
# if hour and minute are not set, set default values
hour = hour or self.time_hour_default
minute = minute or self.time_minutes_default
return (value, date, hour, minute)
def validateEu(self, datastructure, **kw):
"""Validate datastructure and update datamodel."""
datamodel = datastructure.getDataModel()
field_id = self.fields[0]
widget_id = self.getWidgetId()
date = datastructure[widget_id + '_date'].strip()
hour = datastructure[widget_id + '_hour'].strip() or \
self.time_hour_default
minute = datastructure[widget_id + '_minute'].strip() or \
self.time_minutes_default
if not (date):
if self.is_required:
datastructure[widget_id] = ''
datastructure.setError(widget_id, 'cpsschemas_err_required')
return 0
else:
datamodel[field_id] = None
return 1
if self.view_format.startswith('iso8601'):
if match(r'^[0-9]+-[0-9]{2}-[0-9]{2}', date) is not None:
y, m, d = date.split('-')
else:
datastructure.setError(widget_id, 'cpsschemas_err_date')
return 0
else:
if match(r'^[0-9]?[0-9]/[0-9]?[0-9]/[0-9]{2,4}$', date) or match(r'^[0-9]{2,4}/[0-9]?[0-9]/[0-9]?[0-9]$',date) is not None:
locale = self.translation_service.getSelectedLanguage()
if locale in ('en', 'hu'):
m, d, y = date.split('/')
elif locale=='eu':
y,m,d = date.split('/')
else:
d, m, y = date.split('/')
else:
datastructure.setError(widget_id, 'cpsschemas_err_date')
return 0
try:
v = DateTime(int(y), int(m), int(d), int(hour), int(minute))
except (ValueError, TypeError, DateTime.DateTimeError,
DateTime.SyntaxError, DateTime.DateError):
datastructure.setError(widget_id, 'cpsschemas_err_date')
return 0
else:
datastructure[widget_id] = v
datamodel[field_id] = v
return 1
CPSDateTimeWidget.getDateTimeInfo=getDateTimeInfoEu
CPSDateTimeWidget.validate=validateEu
_______________________________________________
cps-users mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/cps-users