From 58aab99cdaa21e0cb7e247a7b7fb35b8bb0333bc Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 1 Feb 2018 13:21:54 -0500 Subject: [PATCH] Bug 20123: Allow multiple instances of Koha to have different timezones on the same server Most of Koha depends on the local timezone of the server, except for Koha::Database which support an ENV override with the key TZ. We should take this a step further. We should not only accept the TZ environment variable for all of Koha, we should really be able to set the timezone in the koha conf file as well so we don't have to pass that environment variable to things like cronjobs and one-off scripts. Test Plan: 1) Apply this patch 2) Set a timzone in your koha_conf file, that is *not* your local time zone Available timzones are listed here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 3) Restart apache/plack 4) Perform some actions, check the timestamps in the database and in the html output, note they are for the set timezone and not the local timezone. --- C4/Context.pm | 18 +++++++++++++++++- Koha/Database.pm | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/C4/Context.pm b/C4/Context.pm index 1eb5f88..07e8185 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -969,6 +969,21 @@ sub get_versions { return %versions; } +=head2 timezone + + my $C4::Context->timzone + + Returns a timezone code for the instance of Koha + +=cut + +sub timezone { + my $self = shift; + + my $timezone = C4::Context->config('timezone') || $ENV{TZ} || 'local'; + + return $timezone; +} =head2 tz @@ -981,7 +996,8 @@ sub get_versions { sub tz { my $self = shift; if (!defined $context->{tz}) { - $context->{tz} = DateTime::TimeZone->new(name => 'local'); + my $timezone = $self->timezone; + $context->{tz} = DateTime::TimeZone->new(name => $timezone); } return $context->{tz}; } diff --git a/Koha/Database.pm b/Koha/Database.pm index e97c794..802bdc5 100644 --- a/Koha/Database.pm +++ b/Koha/Database.pm @@ -70,7 +70,7 @@ sub _new_schema { my ( %encoding_attr, $encoding_query, $tz_query, $sql_mode_query ); - my $tz = $ENV{TZ}; + my $tz = C4::Context->timezone; if ( $db_driver eq 'mysql' ) { %encoding_attr = ( mysql_enable_utf8 => 1 ); $encoding_query = "set NAMES 'utf8mb4'"; -- 2.10.2