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

Reply via email to