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

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

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;

View file

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

View file

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

View file

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