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:
parent
8eb6de343b
commit
3cf77839ed
3 changed files with 22 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue