From 731ae3801a73fecb52683d4463189f638e165049 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 10 Aug 2010 13:51:20 -0500 Subject: [PATCH] add webgui to strftime conversion sub --- lib/WebGUI/DateTime.pm | 106 ++++++++++++++++++++++++----------------- t/DateTime.t | 12 ++++- 2 files changed, 73 insertions(+), 45 deletions(-) diff --git a/lib/WebGUI/DateTime.pm b/lib/WebGUI/DateTime.pm index f21d8a7f6..2ff53a969 100644 --- a/lib/WebGUI/DateTime.pm +++ b/lib/WebGUI/DateTime.pm @@ -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; } diff --git a/t/DateTime.t b/t/DateTime.t index 1bad3527e..48026b902 100644 --- a/t/DateTime.t +++ b/t/DateTime.t @@ -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");