From a937062d4e05ce2161e79b0e3b42e6b8c4b2ec6d Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 12 Jun 2020 11:53:49 +0100 Subject: [PATCH] Bug 25723: Drop DateTime::Set dependancy This patch removes our use of DateTime::Set and replaces it with a quick hashref implimentation --- Koha/Calendar.pm | 57 +++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/Koha/Calendar.pm b/Koha/Calendar.pm index ef397cd838..a41fff8491 100644 --- a/Koha/Calendar.pm +++ b/Koha/Calendar.pm @@ -4,7 +4,6 @@ use warnings; use 5.010; use DateTime; -use DateTime::Set; use DateTime::Duration; use C4::Context; use Koha::Caches; @@ -53,32 +52,40 @@ sub _init { } sub exception_holidays { - my ( $self ) = @_; + my ( $self, $date ) = @_; + + my $cache = Koha::Caches->get_instance(); + my $exception_holidays = $cache->get_from_cache('exception_holidays'); - my $cache = Koha::Caches->get_instance(); - my $cached = $cache->get_from_cache('exception_holidays'); - return $cached if $cached; + # Populate the cache is necessary + unless ($exception_holidays) { + my $dbh = C4::Context->dbh; + $exception_holidays = {}; + + # Push holidays for each branch + my $exception_holidays_sth = $dbh->prepare( +'SELECT day, month, year, branchcode FROM special_holidays WHERE isexception = 1' + ); + $exception_holidays_sth->execute(); + my $dates = []; + while ( my ( $day, $month, $year, $branch ) = + $exception_holidays_sth->fetchrow ) + { + push @{ $exception_holidays->{$branch} }, + sprintf( "%04d", $year ) + . sprintf( "%02d", $month ) + . sprintf( "%02d", $day ); + } + $cache->set_in_cache( 'exception_holidays', $exception_holidays, + { expiry => 76800 } ); + } - my $dbh = C4::Context->dbh; + # Return if we match my $branch = $self->{branchcode}; - my $exception_holidays_sth = $dbh->prepare( -'SELECT day, month, year FROM special_holidays WHERE branchcode = ? AND isexception = 1' - ); - $exception_holidays_sth->execute( $branch ); - my $dates = []; - while ( my ( $day, $month, $year ) = $exception_holidays_sth->fetchrow ) { - push @{$dates}, - DateTime->new( - day => $day, - month => $month, - year => $year, - time_zone => "floating", - )->truncate( to => 'day' ); + for my $hols ( @{ $exception_holidays->{$branch} } ) { + return 1 if ( $date == $hols ); } - $self->{exception_holidays} = - DateTime::Set->from_datetimes( dates => $dates ); - $cache->set_in_cache( 'exception_holidays', $self->{exception_holidays} ); - return $self->{exception_holidays}; + return 0; } sub single_holidays { @@ -250,13 +257,14 @@ sub is_holiday { my $localdt = $dt->clone(); my $day = $localdt->day; my $month = $localdt->month; + my $ymd = $localdt->ymd('') ; #Change timezone to "floating" before doing any calculations or comparisons $localdt->set_time_zone("floating"); $localdt->truncate( to => 'day' ); - if ( $self->exception_holidays->contains($localdt) ) { + if ( $self->exception_holidays( $ymd ) == 1 ) { # exceptions are not holidays return 0; } @@ -277,7 +285,6 @@ sub is_holiday { return 1; } - my $ymd = $localdt->ymd('') ; if ($self->single_holidays( $ymd ) == 1 ) { return 1; } -- 2.20.1