From 52c55f385da9ef73a05e19b1ee292d8c1378baee Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 14 Apr 2022 14:22:48 +0200 Subject: [PATCH] Added support to set the timezone via config/env vars --- composer.json | 2 +- config/autoload/installer.global.php | 1 + config/container.php | 6 +++++- module/Core/src/Config/EnvVars.php | 4 +++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index b5e50a8a..ca691be5 100644 --- a/composer.json +++ b/composer.json @@ -51,7 +51,7 @@ "shlinkio/shlink-config": "^1.6", "shlinkio/shlink-event-dispatcher": "^2.3", "shlinkio/shlink-importer": "dev-main#af0e05e as 3.0", - "shlinkio/shlink-installer": "dev-develop#d02f256 as 7.1", + "shlinkio/shlink-installer": "dev-develop#fbbc8f5 as 7.1", "shlinkio/shlink-ip-geolocation": "^2.2", "symfony/console": "^6.0", "symfony/filesystem": "^6.0", diff --git a/config/autoload/installer.global.php b/config/autoload/installer.global.php index 81f9941a..3cada5db 100644 --- a/config/autoload/installer.global.php +++ b/config/autoload/installer.global.php @@ -27,6 +27,7 @@ return [ Option\Redirect\Regular404RedirectConfigOption::class, Option\Visit\VisitsThresholdConfigOption::class, Option\BasePathConfigOption::class, + Option\TimezoneConfigOption::class, Option\Worker\TaskWorkerNumConfigOption::class, Option\Worker\WebWorkerNumConfigOption::class, Option\Redis\RedisServersConfigOption::class, diff --git a/config/container.php b/config/container.php index 56fb345d..568eb1ee 100644 --- a/config/container.php +++ b/config/container.php @@ -3,6 +3,7 @@ declare(strict_types=1); use Laminas\ServiceManager\ServiceManager; +use Shlinkio\Shlink\Core\Config\EnvVars; use Symfony\Component\Lock; use const Shlinkio\Shlink\LOCAL_LOCK_FACTORY; @@ -11,6 +12,9 @@ chdir(dirname(__DIR__)); require 'vendor/autoload.php'; +// This is one of the first files loaded. Configure the timezone here +date_default_timezone_set(EnvVars::TIMEZONE()->loadFromEnv(date_default_timezone_get())); + // This class alias tricks the ConfigAbstractFactory to return Lock\Factory instances even with a different service name // It needs to be placed here as individual config files will not be loaded once config is cached if (! class_exists(LOCAL_LOCK_FACTORY)) { @@ -18,7 +22,7 @@ if (! class_exists(LOCAL_LOCK_FACTORY)) { } // Build container -return (function () { +return (static function () { $config = require __DIR__ . '/config.php'; $container = new ServiceManager($config['dependencies']); $container->setService('config', $config); diff --git a/module/Core/src/Config/EnvVars.php b/module/Core/src/Config/EnvVars.php index 3513687d..112b7599 100644 --- a/module/Core/src/Config/EnvVars.php +++ b/module/Core/src/Config/EnvVars.php @@ -12,7 +12,7 @@ use function array_values; use function Functional\contains; use function Shlinkio\Shlink\Config\env; -// TODO Convert to enum +// TODO Convert to enum after dropping PHP 8.0 support /** * @method static EnvVars DELETE_SHORT_URL_THRESHOLD() @@ -62,6 +62,7 @@ use function Shlinkio\Shlink\Config\env; * @method static EnvVars DEFAULT_DOMAIN() * @method static EnvVars AUTO_RESOLVE_TITLES() * @method static EnvVars REDIRECT_APPEND_EXTRA_PATH() + * @method static EnvVars TIMEZONE() * @method static EnvVars VISITS_WEBHOOKS() * @method static EnvVars NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS() */ @@ -114,6 +115,7 @@ final class EnvVars public const DEFAULT_DOMAIN = 'DEFAULT_DOMAIN'; public const AUTO_RESOLVE_TITLES = 'AUTO_RESOLVE_TITLES'; public const REDIRECT_APPEND_EXTRA_PATH = 'REDIRECT_APPEND_EXTRA_PATH'; + public const TIMEZONE = 'TIMEZONE'; /** @deprecated */ public const VISITS_WEBHOOKS = 'VISITS_WEBHOOKS'; /** @deprecated */