add webgui to strftime conversion sub

This commit is contained in:
Doug Bell 2010-08-10 13:51:20 -05:00
parent a751c3a48d
commit 731ae3801a
2 changed files with 73 additions and 45 deletions

View file

@ -486,6 +486,63 @@ sub session {
=head2 webguiToStrftime ( format )
Change a WebGUI format into a Strftime format.
NOTE: %M in WebGUI's format has no equivalent in strftime format, so it will
be replaced with "_varmonth_". Do something with it.
=cut
sub webguiToStrftime {
my ( $self, $format ) = @_;
$format ||= "%z %Z";
my $session = $self->session;
my $temp;
#--- date format preference
$temp = $session->user->profileField('dateFormat') || '%y-%M-%D';
$format =~ s/\%z/$temp/g;
#--- time format preference
$temp = $session->user->profileField('timeFormat') || '%H:%n %p';
$format =~ s/\%Z/$temp/g;
#--- convert WebGUI date formats to DateTime formats
my %conversion = (
"c" => "B",
"C" => "b",
"d" => "d",
"D" => "e",
"h" => "I",
"H" => "l",
"j" => "H",
"J" => "k",
"m" => "m",
"M" => "_varmonth_",
"n" => "M",
"t" => "Z",
"O" => "z",
"p" => "P",
"P" => "p",
"s" => "S",
"V" => "V",
"w" => "A",
"W" => "a",
"y" => "Y",
"Y" => "y"
);
$format =~ s/\%(\w)/\~$1/g;
foreach my $key (keys %conversion) {
my $replacement = $conversion{$key};
$format =~ s/\~$key/\%$replacement/g;
}
return $format;
}
#######################################################################
=head2 webguiDate ( format )
@ -527,53 +584,14 @@ sub webguiDate {
my $self = shift;
my $session = $self->session;
return undef unless ($session);
my $format = shift || "%z %Z";
my $temp;
#---date format preference
$temp = $session->user->profileField('dateFormat') || '%y-%M-%D';
$format =~ s/\%z/$temp/g;
#---time format preference
$temp = $session->user->profileField('timeFormat') || '%H:%n %p';
$format =~ s/\%Z/$temp/g;
#--- convert WebGUI date formats to DateTime formats
my %conversion = (
"c" => "B",
"C" => "b",
"d" => "d",
"D" => "e",
"h" => "I",
"H" => "l",
"j" => "H",
"J" => "k",
"m" => "m",
"M" => "_varmonth_",
"n" => "M",
"t" => "Z",
"O" => "z",
"p" => "P",
"P" => "p",
"s" => "S",
"V" => "V",
"w" => "A",
"W" => "a",
"y" => "Y",
"Y" => "y"
);
$format =~ s/\%(\w)/\~$1/g;
foreach my $key (keys %conversion) {
my $replacement = $conversion{$key};
$format =~ s/\~$key/\%$replacement/g;
}
my $format = $self->webguiToStrftime( shift || "%z %Z" );
#--- %M
my $datestr = $self->strftime($format);
$temp = int($self->month);
my $temp = int($self->month);
$datestr =~ s/\%_varmonth_/$temp/g;
#--- return
return $datestr;
}

View file

@ -26,7 +26,7 @@ my $session = WebGUI::Test->session;
# put your tests here
plan tests => 28;
plan tests => 30;
my $timeZoneUser = addUser($session);
@ -91,6 +91,16 @@ ok($@, 'new croaks on an out of range time');
my $badday = eval { WebGUI::DateTime->new($session, '2001-08-16 99:199:99'); };
ok($@, 'new croaks on an illegal time');
#----------------------------------------------------------------------------
# Test webguiToStrftime conversion
is( $nowDt->webguiToStrftime('%y-%m-%d'), '%Y-%m-%d', 'webgui to strftime conversion' );
$timeZoneUser->update({ 'dateFormat' => '%y-%M-%D' });
$timeZoneUser->update({ 'timeFormat' => '%H:%n %p' });
is( $nowDt->webguiToStrftime, '%Y-%_varmonth_-%e %l:%M %P', 'default datetime string' );
sub addUser {
my $session = shift;
my $user = WebGUI::User->new($session, "new");