Improvements in dotenv parsing (#7208)

* Improvements in dotenv parsing

* Improvements in dotenv parsing

* Improvements in dotenv parsing

---------

Co-authored-by: Lucas Bartholemy <luke-@users.noreply.github.com>
This commit is contained in:
Gevorg Mansuryan 2024-09-16 17:26:29 +04:00 committed by GitHub
parent 6001a22fbd
commit 526ef0048e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 61 additions and 4 deletions

View File

@ -50,4 +50,4 @@
#HUMHUB_CONFIG.MODULES.USER.MINIMUM_USERNAME_LENGTH=2
#HUMHUB_CONFIG.MODULES.ADMIN.ALLOW_USER_IMPERSONATE=false
#HUMHUB_CONFIG.MODULES.DASHBOARD.AUTO_INCLUDE_PROFILE_POSTS="all"
#HUMHUB_CONFIG.MODULES.DASHBOARD.HIDE_ACTIVITY_SIDEBAR_WIDGET=true
#HUMHUB_CONFIG.MODULES.DASHBOARD.HIDE_ACTIVITY_SIDEBAR_WIDGET=true

View File

@ -27,6 +27,7 @@ HumHub Changelog
- Fix #7197: Increased version of `PHPOffice/PHPSpreadsheet` to v2.2+
- Enh #7167: Disable DEBUG mode automatically after successful humhub installation. Add `.env` support
- Enh #7202: Increased minimum PHP version to 8.1
- Enh #7208: Improvements in dotenv parsing
- Enh #7211: Remove obsolete property `AbstractRichText::$record`
- Enh #7213: By default, enabled "Mobile" notification types for those enabled for "Web"
- Fix #7215: Wording: replace British "licence" with American "license"

View File

@ -18,9 +18,11 @@ class EnvHelper
$config = [];
foreach ($env as $key => $value) {
try {
$value = Json::decode($value);
} catch (InvalidArgumentException) {
$value = self::normalizeValue($value);
// Skip null values
if (is_null($value)) {
continue;
}
if (StringHelper::startsWith($key, self::FIXED_SETTING_PREFIX)) {
@ -47,6 +49,23 @@ class EnvHelper
return $config;
}
private static function normalizeValue(mixed $value): mixed
{
try {
// Try to decode JSON
$value = Json::decode($value);
} catch (InvalidArgumentException) {
// Do nothing
}
// Normalize boolean values
if (in_array($value, ['true', 'false'], true)) {
return filter_var($value, FILTER_VALIDATE_BOOLEAN);
}
return $value;
}
private static function keyToPath(string $key): array
{
return ArrayHelper::getColumn(

View File

@ -75,4 +75,41 @@ class ConfigTest extends HumHubDbTestCase
$this->assertEquals($config, EnvHelper::toConfig($ENV));
}
public function testBooleanConfig()
{
$ENV = [
'HUMHUB_CONFIG.COMPONENTS.URL_MANAGER.SHOW_SCRIPT_NAME' => 'false',
'HUMHUB_CONFIG.COMPONENTS.URL_MANAGER.ENABLE_PRETTY_URL' => 'true',
];
$config = [
'components' => [
'urlManager' => [
'showScriptName' => false,
'enablePrettyUrl' => true,
],
],
];
$this->assertEquals($config, EnvHelper::toConfig($ENV));
}
public function testEmptyConfig()
{
$ENV = [
'HUMHUB_CONFIG.COMPONENTS.URL_MANAGER.SHOW_SCRIPT_NAME' => 'false',
'HUMHUB_CONFIG.COMPONENTS.URL_MANAGER.ENABLE_PRETTY_URL' => null,
];
$config = [
'components' => [
'urlManager' => [
'showScriptName' => false,
],
],
];
$this->assertEquals($config, EnvHelper::toConfig($ENV));
}
}