Date form plugin needs to observe the time zone of the viewer of the data when processing AND displaying date. Fixes bugs #11789 11894

This commit is contained in:
Colin Kuskie 2010-10-04 11:53:05 -07:00
parent 8eb6de343b
commit 3cf77839ed
3 changed files with 22 additions and 4 deletions

View file

@ -3,6 +3,8 @@
- recommitted ukplayer. Removal broke Matrix. Licencing information was available but overlooked.
- fixed #11883: Wiki "Add page" link does not encode special chars
- fixed #11886: profile knows it's me, but doesn't display edit
- fixed #11789: Date form reports 1 day earlier on Edit for the time zone corresponding to Europe/Berlin.
- fixed #11894: Europe London timezone decrements birth date
7.10.1
- fixed #11851: Story Topic: top story variables should be available all the time

View file

@ -18,6 +18,7 @@ use strict;
use base 'WebGUI::Form::Text';
use WebGUI::Form::Hidden;
use WebGUI::International;
use Scalar::Util qw/blessed/;
my $isaEpoch = qr/^-?\d+$/;
@ -241,8 +242,11 @@ sub toHtml {
$value = $self->set("value",'');
}
else {
$value = eval { WebGUI::DateTime->new($session, $self->getOriginalValue)->toMysqlDate; };
$value = WebGUI::DateTime->new($session,0)->toMysqlDate if $value eq '';
my $originalValue = $self->getOriginalValue;
my $dt = eval { WebGUI::DateTime->new($session, $originalValue); };
$dt = WebGUI::DateTime->new($session,0) if ! (blessed $dt && $dt->isa('DateTime')); ##Parsing error
$dt->set_time_zone($session->datetime->getTimeZone);
$value = $dt->toMysqlDate;
}

View file

@ -50,7 +50,7 @@ my $testBlock = [
my $formType = 'date';
my $numTests = 26 + scalar @{ $testBlock } ;
my $numTests = 27 + scalar @{ $testBlock } ;
plan tests => $numTests;
@ -145,7 +145,7 @@ is(
$date2 = WebGUI::Form::Date->new($session, {defaultValue => '2008-008-001'});
is(
getValueFromForm($session, $date2->toHtml),
'1970-01-01',
'1969-12-31',
"toHtml: defaultValue in bad mysql format returns date from epoch 0"
);
@ -161,6 +161,18 @@ is($date2->getValueAsHtml(), '8/16/2001', "getValueAsHtml: defaultValue in mysql
$date2 = WebGUI::Form::Date->new($session, {defaultValue => '2008-08-01', value => '2001-08-16', });
is($date2->getValueAsHtml(), '2001-08-16', "getValueAsHtml: defaultValue in mysql format, value as mysql returns value in mysql format");
my $dutchie = WebGUI::User->create($session);
WebGUI::Test->addToCleanup($dutchie);
$dutchie->update({timeZone => 'Europe/Amsterdam', });
$session->user({user => $dutchie});
my $date_form = WebGUI::Form::Date->new($session, { name => 'test_date', });
$session->request->setup_body({ test_date => '2001-08-16', });
my $epochal_value = $date_form->getValue;
$date_form->set(value => $epochal_value);
my $mysql_date = getValueFromForm($session, $date_form->toHtml);
is $mysql_date, '2001-08-16', 'Form data processed and rendered round trip';
sub getValueFromForm {
my ($session, $textForm) = @_;
my ($header, $footer) = (WebGUI::Form::formHeader($session), WebGUI::Form::formFooter($session));