From 52c55f385da9ef73a05e19b1ee292d8c1378baee Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 14 Apr 2022 14:22:48 +0200 Subject: [PATCH 1/3] 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 */ From 0495b6f298788709e239038cfe38846fb4b3d06e Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 14 Apr 2022 14:24:01 +0200 Subject: [PATCH 2/3] Updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1bbc48d..08640aa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this ### Added * [#1294](https://github.com/shlinkio/shlink/issues/1294) Allowed to specify a specific domain when importing URLs from YOURLS. * [#1416](https://github.com/shlinkio/shlink/issues/1416) Added support to import URLs from Kutt.it. +* [#1418](https://github.com/shlinkio/shlink/issues/1418) Added support to customize the timezone used by Shlink, falling back to the default one set in PHP config. ### Changed * [#1359](https://github.com/shlinkio/shlink/issues/1359) Hidden database commands. From 3db8a65ddbbb229c484cf83b96127d9867844562 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 14 Apr 2022 16:00:15 +0200 Subject: [PATCH 3/3] Fixed test --- module/Core/test/Config/EnvVarsTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/Core/test/Config/EnvVarsTest.php b/module/Core/test/Config/EnvVarsTest.php index a7ccbcee..51a7a088 100644 --- a/module/Core/test/Config/EnvVarsTest.php +++ b/module/Core/test/Config/EnvVarsTest.php @@ -77,6 +77,7 @@ class EnvVarsTest extends TestCase EnvVars::DEFAULT_DOMAIN, EnvVars::AUTO_RESOLVE_TITLES, EnvVars::REDIRECT_APPEND_EXTRA_PATH, + EnvVars::TIMEZONE, EnvVars::VISITS_WEBHOOKS, EnvVars::NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS, ], $list);