Bug 10380: Change prototype for output_pref() routine
authorJonathan Druart <jonathan.druart@biblibre.com>
Thu, 30 May 2013 12:32:33 +0000 (14:32 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Thu, 17 Oct 2013 23:34:26 +0000 (23:34 +0000)
Koha::DateUtils::output_pref took 4 parameters and the last one is a
boolean, so some calls were:
  output_pref($dt, undef, undef, 1)

This patch changes its prototype to
  output_pref({
    dt => $dt,
    dateformat => $dateformat,
    timeformat => $timeformat,
    dateonly => $boolean
  });

An alternative is to call the output_pref routine with a datetime
object, without using an hashref:

  output_pref($dt);

Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/Letters.pm
C4/Reserves.pm
Koha/DateUtils.pm
Koha/Template/Plugin/KohaDates.pm
acqui/lateorders.pl
members/member.pl
t/DateUtils.t

index be2913f..345ec3b 100644 (file)
@@ -614,9 +614,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 });
 
     }
 
index 8fe78db..bf1e398 100644 (file)
@@ -1528,7 +1528,7 @@ be cleared when it is unsuspended.
 sub ToggleSuspend {
     my ( $reserve_id, $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';
 
index 714b171..5a62307 100644 (file)
@@ -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<undef> if C<undef> 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{};
 }
index 882d51e..134712f 100644 (file)
@@ -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;
index d732357..0832974 100755 (executable)
@@ -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');
index afab693..ff6e41a 100755 (executable)
@@ -117,7 +117,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 $searchtype = $input->param('searchtype');
index eab8424..cdff2af 100755 (executable)
@@ -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';