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
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue