Fixed Form Date and DateTime to properly handle mysql and epoch times. Added tests to make sure they work.
This commit is contained in:
parent
a81999d5ea
commit
e7f5948ce1
7 changed files with 52 additions and 14 deletions
|
|
@ -21,6 +21,7 @@
|
|||
- fixed: Server side spellchecker doesn't work
|
||||
- fixed: DateTime Form Control Bug
|
||||
- fixed: Tree Menu is always collapsed
|
||||
- fixed: Form/Date and Form/DateTime to properly return MySQL formatted and epoch formatted times
|
||||
|
||||
7.5.18
|
||||
- fixed: Collateral Image Manager broken in Firefox 3
|
||||
|
|
|
|||
|
|
@ -1377,6 +1377,7 @@ sub www_process {
|
|||
};
|
||||
}
|
||||
$entryData->{ $field->{name} } = $value;
|
||||
$self->session->errorHandler->warn($field->{name}. " ". $value);
|
||||
}
|
||||
|
||||
# Process CAPTCHA
|
||||
|
|
|
|||
|
|
@ -77,7 +77,8 @@ sub definition {
|
|||
my $class = shift;
|
||||
my $session = shift;
|
||||
my $definition = shift || [];
|
||||
push(@{$definition}, {
|
||||
|
||||
push(@{$definition}, {
|
||||
defaultValue=>{
|
||||
defaultValue=>$session->datetime->time()
|
||||
},
|
||||
|
|
@ -137,16 +138,29 @@ sub getValue {
|
|||
# This should probably be rewritten as a cascading ternary
|
||||
my $value = $self->SUPER::getValue(@_);
|
||||
if (!$self->getDefaultValue || $self->getDefaultValue =~ m/^\d+$/) {
|
||||
return $self->session->datetime->setToEpoch($value);
|
||||
# Epoch format
|
||||
if($value =~ /^\d+$/){
|
||||
return $value;
|
||||
}
|
||||
return $self->session->datetime->setToEpoch($value);
|
||||
}
|
||||
else {
|
||||
# MySQL format
|
||||
# YY(YY)?-MM-DD
|
||||
|
||||
# NOTE: Cannot fix time zone since we don't have a complete date/time
|
||||
|
||||
return $1
|
||||
if ($value =~ m/((?:\d{2}|\d{4})\D\d{2}\D\d{2})/);
|
||||
|
||||
# MySQL format
|
||||
# YY(YY)?-MM-DD HH:MM:SS
|
||||
|
||||
if($value =~ /^\d+$/){
|
||||
return $self->session->datetime->epochToSet($value,$self->session->user->profileField( 'timeZone' ));
|
||||
}
|
||||
|
||||
# Verify format
|
||||
return undef
|
||||
unless ($value =~ m/((?:\d{2}|\d{4})\D\d{2}\D\d{2})/);
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,20 +138,29 @@ sub getValue {
|
|||
my $self = shift;
|
||||
# This should probably be rewritten as a cascading ternary
|
||||
my $value = $self->SUPER::getValue(@_);
|
||||
if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/ || !$self->get("value") || $self->get("value") =~ m/^\d+$/) {
|
||||
|
||||
if (!$self->getDefaultValue || $self->getDefaultValue =~ m/^\d+$/) {
|
||||
# Epoch format
|
||||
if($value =~ /^\d+$/){
|
||||
return $value;
|
||||
}
|
||||
return $self->session->datetime->setToEpoch($value);
|
||||
}
|
||||
else {
|
||||
# MySQL format
|
||||
# YY(YY)?-MM-DD HH:MM:SS
|
||||
|
||||
if($value =~ /^\d+$/){
|
||||
return $self->session->datetime->epochToSet($value,$self->session->user->profileField( 'timeZone' ));
|
||||
}
|
||||
|
||||
# Verify format
|
||||
return undef
|
||||
unless ($value =~ m/(?:\d{2}|\d{4})\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{2}/);
|
||||
|
||||
# Fix time zone
|
||||
$value = WebGUI::DateTime->new(mysql => $value, time_zone => $self->get("timeZone"))
|
||||
|
||||
$value = WebGUI::DateTime->new($self->session,mysql => $value, time_zone=>$self->session->user->profileField( 'timeZone' ))
|
||||
->set_time_zone("UTC")->toMysql;
|
||||
|
||||
return $value;
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ ok($ems->can('getRibbons'), 'Can get ribbons');
|
|||
my $ribbons = $ems->getRibbons;
|
||||
ok(scalar(@$ribbons) == 2, 'Two ribbons exist');
|
||||
|
||||
print "Cleaning\n";
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Cleanup
|
||||
END {
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ my $testBlock = [
|
|||
|
||||
my $formType = 'date';
|
||||
|
||||
my $numTests = 12 + scalar @{ $testBlock } ;
|
||||
my $numTests = 15 + scalar @{ $testBlock } ;
|
||||
|
||||
|
||||
plan tests => $numTests;
|
||||
|
|
@ -94,7 +94,10 @@ $html = join "\n",
|
|||
@inputs = $forms[0]->inputs;
|
||||
$input = $inputs[0];
|
||||
is($input->name, 'preDateValue', 'Checking input name');
|
||||
#is($input->value, 1217608466, 'Checking default value');
|
||||
TODO: {
|
||||
local $TODO = "Figure out why this is returning a MySQL value instead of an epoch.";
|
||||
is($input->value, 1217608466, 'Checking default value');
|
||||
}
|
||||
is($input->{size}, 10, 'Checking size param, set');
|
||||
is($input->{maxlength}, 10, 'Checking maxlength param, set');
|
||||
|
||||
|
|
@ -108,5 +111,9 @@ my $date2 = WebGUI::Form::Date->new($session, {'defaultValue' => '2008-08-01 16:
|
|||
is($date2->getValue(1217608466), '2008-08-01 11:34:26', "Epoch to MySQL");
|
||||
is($date2->getValue('2008-08-01 11:34:26'), '2008-08-01 11:34:26', "MySQL to MySQL");
|
||||
|
||||
my $date2 = WebGUI::Form::Date->new($session);
|
||||
is($date2->getValue(1217608466), 1217608466, "Default Epoch to Epoch");
|
||||
is($date2->getValue('2008-08-01 11:34:26'), 1217608466, "Default MySQL to Epoch");
|
||||
|
||||
__END__
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ my $session = WebGUI::Test->session;
|
|||
|
||||
my $formType = 'datetime';
|
||||
|
||||
my $numTests = 14;
|
||||
my $numTests = 15;
|
||||
|
||||
plan tests => $numTests;
|
||||
|
||||
|
|
@ -87,14 +87,18 @@ is($input->{maxlength}, 19, 'Checking maxlength param, set');
|
|||
#WebGUI::Form_Checking::auto_check($session, $formType, $testBlock);
|
||||
|
||||
my $date1 = WebGUI::Form::DateTime->new($session, {'defaultValue' => time()});
|
||||
$session->user->profileField( 'timeZone' , 'American/Chicago');
|
||||
$session->user->profileField( 'timeZone' , 'America/Chicago');
|
||||
is($date1->getValue(1217608466), 1217608466, "Epoch to Epch");
|
||||
is($date1->getValue('2008-08-01 16:34:26'), $session->datetime->setToEpoch("2008-08-01 16:34:26"), "MySQL to Epoch");
|
||||
|
||||
my $date2 = WebGUI::Form::DateTime->new($session);
|
||||
is($date2->getValue(1217608466), 1217608466, "Default Epoch to Epch");
|
||||
is($date2->getValue('2008-08-01 16:34:26'), $session->datetime->setToEpoch("2008-08-01 16:34:26"), "Default MySQL to Epoch");
|
||||
|
||||
#Dates to MySQL
|
||||
my $date2 = WebGUI::Form::DateTime->new($session, {'defaultValue' => '2008-08-01 16:34:26'});
|
||||
is($date2->getValue(1217608466), '2008-08-01 11:34:26', "Epoch to MySQL");
|
||||
is($date2->getValue('2008-08-01 11:34:26'), '2008-08-01 11:34:26', "MySQL to MySQL");
|
||||
my $date3 = WebGUI::Form::DateTime->new($session, {'defaultValue' => '2008-08-01 16:34:26'});
|
||||
is($date3->getValue(1217608466), '2008-08-01 11:34:26', "Epoch to MySQL");
|
||||
is($date3->getValue('2008-08-01 11:34:26'), '2008-08-01 16:34:26', "MySQL to MySQL");#UTC is 5 hours ahead of Chicago
|
||||
|
||||
__END__
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue