From 94cbcf66ba54f07163970cfb7abe07486f0084d5 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Thu, 27 Apr 2023 13:02:52 +0000 Subject: [PATCH] Bug 33611: Ensure dt_from_string always returns a new object This patch alters dt_from_string to pass a cloned object if called on an existing date time object This resolves an issue where a holds reserve date was being altered when the default expiration date was set To test: 1 - Set DefaultHoldExpiration to Set 2 - Set DefaultHoldExpirationPeriod to 365 3 - Set DefaultHoldExpirationunitOfTimeToDays 4 - Place a hold 5 - Note reserve date is 1 year in the future, same as expiration 6 - Apply patch 7 - Restart all 8 - Place another hold 9 - Note reserve date is set to today Signed-off-by: David Nind Signed-off-by: Jonathan Druart --- Koha/DateUtils.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Koha/DateUtils.pm b/Koha/DateUtils.pm index 2ee889aac58..86c8314b4f3 100644 --- a/Koha/DateUtils.pm +++ b/Koha/DateUtils.pm @@ -68,8 +68,8 @@ sub dt_from_string { $date_format = C4::Context->preference('dateformat') unless $date_format; - if ( ref($date_string) eq 'DateTime' ) { # already a dt return it - return $date_string; + if ( ref($date_string) eq 'DateTime' ) { # already a dt return a clone + return $date_string->clone(); } my $regex; -- 2.25.1