@@ -, +, @@ output_pref($dt, undef, undef, 1) output_pref({ dt => $dt, dateformat => $dateformat, timeformat => $timeformat, dateonly => $boolean }); output_pref($dt); --- C4/Letters.pm | 4 ++-- C4/Reserves.pm | 2 +- Koha/DateUtils.pm | 33 +++++++++++++++++++++++++-------- Koha/Template/Plugin/KohaDates.pm | 2 +- acqui/lateorders.pl | 4 ++-- members/member.pl | 2 +- t/DateUtils.t | 30 +++++++++++++++++++----------- 7 files changed, 51 insertions(+), 26 deletions(-) --- a/C4/Letters.pm +++ a/C4/Letters.pm @@ -612,9 +612,9 @@ sub _parseletter { my $dt = dt_from_string(); $dt->add( days => C4::Context->preference('ReservesMaxPickUpDelay') ); - $values->{'expirationdate'} = output_pref( $dt, undef, 1 ); + $values->{'expirationdate'} = output_pref({ dt => $dt, dateonly => 1 }); - $values->{'waitingdate'} = output_pref( dt_from_string( $values->{'waitingdate'} ), undef, 1 ); + $values->{'waitingdate'} = output_pref({ dt => dt_from_string( $values->{'waitingdate'} ), dateonly => 1 }); } --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -1546,7 +1546,7 @@ be cleared when it is unsuspended. sub ToggleSuspend { my ( $borrowernumber, $biblionumber, $suspend_until ) = @_; - $suspend_until = output_pref( dt_from_string( $suspend_until ), 'iso' ) if ( $suspend_until ); + $suspend_until = output_pref({ dt => dt_from_string( $suspend_until ), dateformat => 'iso' }) if ( $suspend_until ); my $do_until = ( $suspend_until ) ? '?' : 'NULL'; --- a/Koha/DateUtils.pm +++ a/Koha/DateUtils.pm @@ -93,7 +93,8 @@ s/(\d{4})(\d{2})(\d{2})\s+(\d{2})(\d{2})(\d{2})/$1-$2-$3T$4:$5:$6/; =head2 output_pref -$date_string = output_pref($dt, [$date_format], [$time_format] ); +$date_string = output_pref({ dt => $dt [, dateformat => $date_format, timeformat => $time_format, dateonly => 0|1 ] }); +$date_string = output_pref( $dt ); Returns a string containing the time & date formatted as per the C4::Context setting, or C if C was provided. @@ -109,10 +110,16 @@ If it is not defined, the default value is 0; =cut sub output_pref { - my $dt = shift; - my $force_pref = shift; # if testing we want to override Context - my $force_time = shift; - my $dateonly = shift || 0; # if you don't want the hours and minutes + my $params = shift; + my ( $dt, $force_pref, $force_time, $dateonly ); + if ( ref $params eq 'HASH' ) { + $dt = $params->{dt}; + $force_pref = $params->{dateformat}; # if testing we want to override Context + $force_time = $params->{timeformat}; + $dateonly = $params->{dateonly} || 0; # if you don't want the hours and minutes + } else { + $dt = $params; + } return unless defined $dt; @@ -153,7 +160,7 @@ sub output_pref { =head2 output_pref_due -$date_string = output_pref_due($dt, [$format] ); +$date_string = output_pref({ dt => $dt [, dateformat => $date_format, timeformat => $time_format, dateonly => 0|1 ] }); Returns a string containing the time & date formatted as per the C4::Context setting @@ -190,7 +197,12 @@ sub format_sqldatetime { my $dt = dt_from_string( $str, 'sql' ); return q{} unless $dt; $dt->truncate( to => 'minute' ); - return output_pref( $dt, $force_pref, $force_time, $dateonly ); + return output_pref({ + dt => $dt, + dateformat => $force_pref, + timeformat => $force_time, + dateonly => $dateonly + }); } return q{}; } @@ -213,7 +225,12 @@ sub format_sqlduedatetime { if ( defined $str && $str =~ m/^\d{4}-\d{2}-\d{2}/ ) { my $dt = dt_from_string( $str, 'sql' ); $dt->truncate( to => 'minute' ); - return output_pref_due( $dt, $force_pref, $force_time, $dateonly ); + return output_pref_due({ + dt => $dt, + dateformat => $force_pref, + timeformat => $force_time, + dateonly => $dateonly + }); } return q{}; } --- a/Koha/Template/Plugin/KohaDates.pm +++ a/Koha/Template/Plugin/KohaDates.pm @@ -30,7 +30,7 @@ sub filter { return "" unless $text; $config->{with_hours} //= 0; my $dt = dt_from_string( $text, 'iso' ); - return output_pref( $dt, undef, undef, !$config->{with_hours} ); + return output_pref({ dt => $dt, dateonly => !$config->{with_hours} }); } 1; --- a/acqui/lateorders.pl +++ a/acqui/lateorders.pl @@ -86,10 +86,10 @@ my $estimateddeliverydateto_dt = $estimateddeliverydateto # Format the output of "date from" and "date to" if ($estimateddeliverydatefrom_dt) { - $estimateddeliverydatefrom = output_pref($estimateddeliverydatefrom_dt, undef, undef, 1); + $estimateddeliverydatefrom = output_pref({dt => $estimateddeliverydatefrom_dt, dateonly => 1}); } if ($estimateddeliverydateto_dt) { - $estimateddeliverydateto = output_pref($estimateddeliverydateto_dt, undef, undef, 1); + $estimateddeliverydateto = output_pref({dt => $estimateddeliverydateto_dt, dateonly => 1}); } my $branch = $input->param('branch'); --- a/members/member.pl +++ a/members/member.pl @@ -108,7 +108,7 @@ if ($member || keys %$patron) { my @searchfields = $searchfields ? split( ',', $searchfields ) : ( "firstname", "surname", "othernames", "cardnumber", "userid", "email" ); if ( $searchfields eq "dateofbirth" ) { - $member = output_pref(dt_from_string($member), 'iso', undef, 1); + $member = output_pref({dt => dt_from_string($member), dateformat => 'iso', dateonly => 1}); } my $search_scope = ( $quicksearch ? "field_start_with" : "start_with" ); --- a/t/DateUtils.t +++ a/t/DateUtils.t @@ -5,7 +5,7 @@ use DateTime; use DateTime::TimeZone; use C4::Context; -use Test::More tests => 30; +use Test::More tests => 31; BEGIN { use_ok('Koha::DateUtils'); } @@ -23,40 +23,48 @@ cmp_ok( $dt->ymd(), 'eq', $testdate_iso, 'Returned object matches input' ); $dt->set_hour(12); $dt->set_minute(0); -my $date_string = output_pref( $dt, 'iso', '24hr' ); +my $date_string; + +my $dateformat = C4::Context->preference('dateformat'); +cmp_ok output_pref({ dt => $dt, dateformat => $dateformat }), + 'eq', + output_pref($dt), + 'output_pref gives an hashref or a dt'; + +$date_string = output_pref({ dt => $dt, dateformat => 'iso', timeformat => '24hr' }); cmp_ok $date_string, 'eq', '2011-06-16 12:00', 'iso output'; -$date_string = output_pref( $dt, 'iso', '12hr' ); +$date_string = output_pref({ dt => $dt, dateformat => 'iso', timeformat => '12hr' }); cmp_ok $date_string, 'eq', '2011-06-16 12:00 PM', 'iso output 12hr'; # "notime" doesn't actually mean anything in this context, but we # can't pass undef or output_pref will try to access the database -$date_string = output_pref( $dt, 'iso', 'notime', 1 ); +$date_string = output_pref({ dt => $dt, dateformat => 'iso', timeformat => 'notime', dateonly => 1 }); cmp_ok $date_string, 'eq', '2011-06-16', 'iso output (date only)'; -$date_string = output_pref( $dt, 'us', '24hr' ); +$date_string = output_pref({ dt => $dt, dateformat => 'us', timeformat => '24hr' }); cmp_ok $date_string, 'eq', '06/16/2011 12:00', 'us output'; -$date_string = output_pref( $dt, 'us', '12hr' ); +$date_string = output_pref({ dt => $dt, dateformat => 'us', timeformat => '12hr' }); cmp_ok $date_string, 'eq', '06/16/2011 12:00 PM', 'us output 12hr'; -$date_string = output_pref( $dt, 'us', 'notime', 1 ); +$date_string = output_pref({ dt => $dt, dateformat => 'us', timeformat => 'notime', dateonly => 1 }); cmp_ok $date_string, 'eq', '06/16/2011', 'us output (date only)'; # metric should return the French Revolutionary Calendar Really -$date_string = output_pref( $dt, 'metric', '24hr' ); +$date_string = output_pref({ dt => $dt, dateformat => 'metric', timeformat => '24hr' }); cmp_ok $date_string, 'eq', '16/06/2011 12:00', 'metric output'; -$date_string = output_pref( $dt, 'metric', 'notime', 1 ); +$date_string = output_pref({ dt => $dt, dateformat => 'metric', timeformat => 'notime', dateonly => 1 }); cmp_ok $date_string, 'eq', '16/06/2011', 'metric output (date only)'; -$date_string = output_pref_due( $dt, 'metric', '24hr' ); +$date_string = output_pref({ dt => $dt, dateformat => 'metric', timeformat => '24hr' }); cmp_ok $date_string, 'eq', '16/06/2011 12:00', 'output_pref_due preserves non midnight HH:SS'; $dt->set_hour(23); $dt->set_minute(59); -$date_string = output_pref_due( $dt, 'metric', '24hr' ); +$date_string = output_pref_due({ dt => $dt, dateformat => 'metric', timeformat => '24hr' }); cmp_ok $date_string, 'eq', '16/06/2011', 'output_pref_due truncates HH:SS at midnight'; --