Commit 9668c1a1 authored by Aurel's avatar Aurel

datetime widget : allow definition of a default timezone

Also commit the datetime field used by proxy field with the timezone
properties defined in its sub-form so that proxy field work when
using these new parameters
parent e93da210
...@@ -69,6 +69,10 @@ ...@@ -69,6 +69,10 @@
<key> <string>default_now</string> </key> <key> <string>default_now</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>default_timezone</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -121,6 +125,10 @@ ...@@ -121,6 +125,10 @@
<key> <string>time_separator</string> </key> <key> <string>time_separator</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>timezone_style</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -170,6 +178,10 @@ ...@@ -170,6 +178,10 @@
<key> <string>default_now</string> </key> <key> <string>default_now</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>default_timezone</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -224,6 +236,10 @@ ...@@ -224,6 +236,10 @@
<key> <string>time_separator</string> </key> <key> <string>time_separator</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>timezone_style</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -269,6 +285,10 @@ ...@@ -269,6 +285,10 @@
<key> <string>default_now</string> </key> <key> <string>default_now</string> </key>
<value> <int>0</int> </value> <value> <int>0</int> </value>
</item> </item>
<item>
<key> <string>default_timezone</string> </key>
<value> <string>GMT</string> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>The Date</string> </value> <value> <string>The Date</string> </value>
...@@ -341,13 +361,7 @@ ...@@ -341,13 +361,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="BasicForm" module="Products.Formulator.Form"/>
<tuple>
<string>Products.Formulator.Form</string>
<string>BasicForm</string>
</tuple>
<none/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -398,11 +412,17 @@ ...@@ -398,11 +412,17 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>year</string> </key> <key> <string>timezone</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent>
</value> </value>
</item> </item>
<item>
<key> <string>year</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAo=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</value> </value>
</item> </item>
...@@ -443,6 +463,7 @@ ...@@ -443,6 +463,7 @@
<string>hour</string> <string>hour</string>
<string>minute</string> <string>minute</string>
<string>ampm</string> <string>ampm</string>
<string>timezone</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -474,13 +495,7 @@ ...@@ -474,13 +495,7 @@
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple> <global name="TALESMethod" module="Products.Formulator.TALESField"/>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -1745,6 +1760,366 @@ ...@@ -1745,6 +1760,366 @@
</pickle> </pickle>
</record> </record>
<record id="9" aka="AAAAAAAAAAk="> <record id="9" aka="AAAAAAAAAAk=">
<pickle>
<global name="ListField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>timezone</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>unknown_selection</string> </key>
<value> <string>You selected an item that was not in the list.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>date_field</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string>GMT</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list>
<tuple>
<string>GMT-12</string>
<string>GMT-12</string>
</tuple>
<tuple>
<string>GMT-11</string>
<string>GMT-11</string>
</tuple>
<tuple>
<string>GMT-10</string>
<string>GMT-10</string>
</tuple>
<tuple>
<string>GMT-9</string>
<string>GMT-9</string>
</tuple>
<tuple>
<string>GMT-8</string>
<string>GMT-8</string>
</tuple>
<tuple>
<string>GMT-7</string>
<string>GMT-7</string>
</tuple>
<tuple>
<string>GMT-6</string>
<string>GMT-6</string>
</tuple>
<tuple>
<string>GMT-5</string>
<string>GMT-5</string>
</tuple>
<tuple>
<string>GMT-4</string>
<string>GMT-4</string>
</tuple>
<tuple>
<string>GMT-3</string>
<string>GMT-3</string>
</tuple>
<tuple>
<string>GMT-2</string>
<string>GMT-2</string>
</tuple>
<tuple>
<string>GMT-1</string>
<string>GMT-1</string>
</tuple>
<tuple>
<string>GMT</string>
<string>GMT</string>
</tuple>
<tuple>
<string>GMT+1</string>
<string>GMT+1</string>
</tuple>
<tuple>
<string>GMT+2</string>
<string>GMT+2</string>
</tuple>
<tuple>
<string>GMT+3</string>
<string>GMT+3</string>
</tuple>
<tuple>
<string>GMT+4</string>
<string>GMT+4</string>
</tuple>
<tuple>
<string>GMT+5</string>
<string>GMT+5</string>
</tuple>
<tuple>
<string>GMT+6</string>
<string>GMT+6</string>
</tuple>
<tuple>
<string>GMT+7</string>
<string>GMT+7</string>
</tuple>
<tuple>
<string>GMT+8</string>
<string>GMT+8</string>
</tuple>
<tuple>
<string>GMT+9</string>
<string>GMT+9</string>
</tuple>
<tuple>
<string>GMT+10</string>
<string>GMT+10</string>
</tuple>
<tuple>
<string>GMT+11</string>
<string>GMT+11</string>
</tuple>
<tuple>
<string>GMT+12</string>
<string>GMT+12</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Timezone</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="10" aka="AAAAAAAAAAo=">
<pickle> <pickle>
<global name="IntegerField" module="Products.Formulator.StandardFields"/> <global name="IntegerField" module="Products.Formulator.StandardFields"/>
</pickle> </pickle>
......
...@@ -184,10 +184,6 @@ class DateTimeField(ZMIField): ...@@ -184,10 +184,6 @@ class DateTimeField(ZMIField):
if REQUEST.form['subfield_%s_%s' % (key, 'year')]: if REQUEST.form['subfield_%s_%s' % (key, 'year')]:
return None return None
gmt_timezones = [('GMT%s' %zone, 'GMT%s' %zone,) for zone in range(-12, 0)]\
+ [('GMT', 'GMT',),] \
+ [('GMT+%s' %zone, 'GMT+%s' %zone,) for zone in range(1, 13)]
def create_datetime_text_sub_form(): def create_datetime_text_sub_form():
sub_form = BasicForm() sub_form = BasicForm()
...@@ -238,7 +234,7 @@ def create_datetime_text_sub_form(): ...@@ -238,7 +234,7 @@ def create_datetime_text_sub_form():
title = "Timezone", title = "Timezone",
required = 0, required = 0,
default = 'GMT', default = 'GMT',
items = gmt_timezones, items = Widget.gmt_timezones,
size = 1) size = 1)
sub_form.add_fields([hour, minute, ampm, timezone], "time") sub_form.add_fields([hour, minute, ampm, timezone], "time")
return sub_form return sub_form
...@@ -296,7 +292,7 @@ def create_datetime_list_sub_form(): ...@@ -296,7 +292,7 @@ def create_datetime_list_sub_form():
title = "Timezone", title = "Timezone",
required = 0, required = 0,
default = 'GMT', default = 'GMT',
items = gmt_timezones, items = Widget.gmt_timezones,
size = 1) size = 1)
sub_form.add_group("time") sub_form.add_group("time")
......
...@@ -1270,6 +1270,10 @@ class MultiCheckBoxWidget(MultiItemsWidget): ...@@ -1270,6 +1270,10 @@ class MultiCheckBoxWidget(MultiItemsWidget):
MultiCheckBoxWidgetInstance = MultiCheckBoxWidget() MultiCheckBoxWidgetInstance = MultiCheckBoxWidget()
gmt_timezones = [('GMT%s' %zone, 'GMT%s' %zone,) for zone in range(-12, 0)]\
+ [('GMT', 'GMT',),] \
+ [('GMT+%s' %zone, 'GMT+%s' %zone,) for zone in range(1, 13)]
class DateTimeWidget(Widget): class DateTimeWidget(Widget):
""" """
Added support for key in every call to render_sub_field Added support for key in every call to render_sub_field
...@@ -1351,6 +1355,15 @@ class DateTimeWidget(Widget): ...@@ -1351,6 +1355,15 @@ class DateTimeWidget(Widget):
("list", "list")], ("list", "list")],
size=1) size=1)
default_timezone = fields.ListField('default_timezone',
title="Default Timezone",
description=(
"The default timezone display when inputing a new date"),
default="GMT",
items=gmt_timezones,
required=1,
size=1)
input_order = fields.ListField('input_order', input_order = fields.ListField('input_order',
title="Input order", title="Input order",
description=( description=(
...@@ -1378,8 +1391,8 @@ class DateTimeWidget(Widget): ...@@ -1378,8 +1391,8 @@ class DateTimeWidget(Widget):
property_names = Widget.property_names +\ property_names = Widget.property_names +\
['default_now', 'date_separator', 'time_separator', ['default_now', 'date_separator', 'time_separator',
'input_style', 'input_order', 'date_only', 'input_style', 'input_order', 'date_only',
'ampm_time_style', 'timezone_style', 'hide_day', 'ampm_time_style', 'timezone_style', 'default_timezone',
'hidden_day_is_last_day'] 'hide_day', 'hidden_day_is_last_day']
def getInputOrder(self, field): def getInputOrder(self, field):
input_order = field.get_value('input_order') input_order = field.get_value('input_order')
...@@ -1437,7 +1450,7 @@ class DateTimeWidget(Widget): ...@@ -1437,7 +1450,7 @@ class DateTimeWidget(Widget):
hour = None hour = None
minute = None minute = None
ampm = None ampm = None
timezone = None timezone = field.get_value("default_timezone")
if isinstance(value, DateTime): if isinstance(value, DateTime):
year = "%04d" % value.year() year = "%04d" % value.year()
month = "%02d" % value.month() month = "%02d" % value.month()
......
...@@ -280,6 +280,7 @@ class SerializeTestCase(unittest.TestCase): ...@@ -280,6 +280,7 @@ class SerializeTestCase(unittest.TestCase):
request.update(default_values) request.update(default_values)
request.update( {'field_input_style': 'list', request.update( {'field_input_style': 'list',
'field_input_order': 'mdy', 'field_input_order': 'mdy',
'field_default_timezone': 'GMT',
'field_date_only': '', 'field_date_only': '',
'field_css_class': 'test_css', 'field_css_class': 'test_css',
'field_time_separator': '$', 'field_time_separator': '$',
......
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