From c4f78fbdbb9ce0a4818afbb239e5f537d0754897 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 16 Mar 2023 09:53:20 +0100 Subject: [PATCH] Bug 33242: Allow passing add_{duration} options to KohaDates For example, if I want to add a few days to the issuedate in a TT template, I could do this: [% checkout.issuedate | $KohaDates add_days => 3 %] This development allows you to pass add/subtract years, months, weeks, days, hours, minutes and seconds. Test plan: Pick a notice like CHECKOUT. Add a line like: [% checkout.date_due | $KohaDates with_hours => 1, add_minutes => 15 %] Do a checkout. Verify that the notice generated contains a time that shifted 15 minutes. Undo your change. Signed-off-by: Marcel de Rooy Signed-off-by: Nick Clemens Signed-off-by: Kyle M Hall --- Koha/Template/Plugin/KohaDates.pm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Koha/Template/Plugin/KohaDates.pm b/Koha/Template/Plugin/KohaDates.pm index 783833f7df..a5a48b6c92 100644 --- a/Koha/Template/Plugin/KohaDates.pm +++ b/Koha/Template/Plugin/KohaDates.pm @@ -32,12 +32,27 @@ sub filter { $config->{with_hours} //= 0; my $dt = dt_from_string( $text, 'iso' ); + $dt->add( %$_ ) for _parse_config_for_durations($config); # Allow date add/subtract; see _parse_config_for_durations return $config->{as_due_date} ? output_pref({ dt => $dt, as_due_date => 1, dateformat => $config->{dateformat} }) : output_pref({ dt => $dt, dateonly => !$config->{with_hours}, dateformat => $config->{dateformat} }); } +sub _parse_config_for_durations { +# Supports passing things like add_years => 1 or subtract_years => 1 +# Same for months, weeks, days, hours, minutes or seconds +# Returns a list of hashrefs like { years => 1 }, { days => -1 } that can be passed to dt->add + my $config = shift; + my @results; + foreach my $entry ( keys %$config ) { + if( $entry =~ /^(add|subtract)_(years|months|weeks|days|hours|minutes|seconds)$/ ) { + push @results, { $2 => ( $1 eq 'add' ? 1 : -1 ) * $config->{$entry} }; + } + } + return @results; +} + sub output_preference { my ( $self, @params ) = @_; return output_pref( @params ); -- 2.39.5