Fixed Form Date and DateTime to properly handle mysql and epoch times. Added tests to make sure they work.

This commit is contained in:
Kaleb Murphy 2008-08-04 20:23:13 +00:00
parent a81999d5ea
commit e7f5948ce1
7 changed files with 52 additions and 14 deletions

View file

@ -1377,6 +1377,7 @@ sub www_process {
};
}
$entryData->{ $field->{name} } = $value;
$self->session->errorHandler->warn($field->{name}. " ". $value);
}
# Process CAPTCHA

View file

@ -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;
}
}

View file

@ -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;