diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index 51d656e6fb73..b848b2b677d4 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -289,7 +289,6 @@ 'factories' => [ \League\CommonMark\MarkdownConverter::class => \VuFind\Service\MarkdownFactory::class, \VuFind\Date\Converter::class => \VuFind\Service\DateConverterFactory::class, - \VuFind\I18n\Locale\LocaleSettings::class => \VuFind\Service\ServiceWithConfigIniFactory::class, \VuFind\ILS\Logic\Holds::class => \VuFind\ILS\Logic\LogicFactory::class, \VuFind\ILS\Logic\TitleHolds::class => \VuFind\ILS\Logic\LogicFactory::class, \VuFind\Record\Router::class => \VuFind\Service\ServiceWithConfigIniFactory::class, diff --git a/module/VuFind/src/VuFind/I18n/Locale/LocaleSettings.php b/module/VuFind/src/VuFind/I18n/Locale/LocaleSettings.php index 5c44af3abe1e..4b2bfda070e2 100644 --- a/module/VuFind/src/VuFind/I18n/Locale/LocaleSettings.php +++ b/module/VuFind/src/VuFind/I18n/Locale/LocaleSettings.php @@ -34,7 +34,7 @@ namespace VuFind\I18n\Locale; use Psr\Http\Message\ServerRequestInterface; -use VuFind\Config\Config; +use VuFind\ServiceManager\Factory\Autowire; use function array_key_exists; use function floatval; @@ -106,12 +106,14 @@ class LocaleSettings /** * Constructor. * - * @param Config $config Configuration object + * @param array $config Configuration object */ - public function __construct(Config $config) - { - $this->enabledLocales = $config->Languages ? $config->Languages->toArray() : []; - $this->browserDetectLanguage = (bool)($config->Site->browserDetectLanguage ?? true); + public function __construct( + #[Autowire(config: 'config')] + array $config + ) { + $this->enabledLocales = $config['Languages'] ?? []; + $this->browserDetectLanguage = (bool)($config['Site']['browserDetectLanguage'] ?? true); $this->defaultLocale = $this->parseDefaultLocale($config); $this->fallbackLocales = $this->parseFallbackLocales($config); $this->rightToLeftLocales = $this->parseRightToLeftLocales($config); @@ -197,14 +199,14 @@ public function getRightToLeftLocales(): array /** * Extract and validate default locale from configuration. * - * @param Config $config Configuration + * @param array $config Configuration * * @return string * @throws \Exception */ - protected function parseDefaultLocale(Config $config): string + protected function parseDefaultLocale(array $config): string { - $locale = $config->Site->language ?? null; + $locale = $config['Site']['language'] ?? null; if (empty($locale)) { throw new \Exception('Default locale not configured!'); } @@ -217,18 +219,18 @@ protected function parseDefaultLocale(Config $config): string /** * Parses the configured language fallbacks. * - * @param Config $config Configuration + * @param array $config Configuration * * @return string[] */ - protected function parseFallbackLocales(Config $config): array + protected function parseFallbackLocales(array $config): array { - $value = trim($config->Site->fallback_languages ?? '', ','); + $value = trim($config['Site']['fallback_languages'] ?? '', ','); $languages = $value ? array_map('trim', explode(',', $value)) : []; return array_unique( [ ...$languages, - $config->Site->language, + $config['Site']['language'], 'en', ] ); @@ -237,13 +239,13 @@ protected function parseFallbackLocales(Config $config): array /** * Parses the right-to-left language configuration. * - * @param Config $config Configuration + * @param array $config Configuration * * @return string[] */ - protected function parseRightToLeftLocales(Config $config): array + protected function parseRightToLeftLocales(array $config): array { - $value = trim($config->LanguageSettings->rtl_langs ?? '', ','); + $value = trim($config['LanguageSettings']['rtl_langs'] ?? '', ','); return $value ? array_map('trim', explode(',', $value)) : []; } diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Locale/LocaleSettingsTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Locale/LocaleSettingsTest.php index f747014c04e4..6cf9576c10a2 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Locale/LocaleSettingsTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Locale/LocaleSettingsTest.php @@ -33,7 +33,6 @@ use GuzzleHttp\Psr7\ServerRequest; use Psr\Http\Message\ServerRequestInterface; -use VuFind\Config\Config; use VuFind\I18n\Locale\LocaleSettings; /** @@ -56,7 +55,7 @@ class LocaleSettingsTest extends \PHPUnit\Framework\TestCase public function testDefaultLocaleRequired(): void { $this->expectExceptionMessage('Default locale not configured!'); - new LocaleSettings(new Config([])); + new LocaleSettings([]); } /** @@ -68,7 +67,7 @@ public function testDefaultLocaleRequired(): void public function testDefaultMustBeEnabled(): void { $this->expectExceptionMessage("Configured default locale 'en' not enabled!"); - new LocaleSettings(new Config(['Site' => ['language' => 'en']])); + new LocaleSettings(['Site' => ['language' => 'en']]); } /** @@ -79,12 +78,10 @@ public function testDefaultMustBeEnabled(): void public function testDefaultConfigs(): void { $settings = new LocaleSettings( - new Config( - [ - 'Site' => ['language' => 'en'], - 'Languages' => ['en' => 'English'], - ] - ) + [ + 'Site' => ['language' => 'en'], + 'Languages' => ['en' => 'English'], + ] ); $this->assertTrue($settings->browserLanguageDetectionEnabled()); $this->assertSame(['en'], $settings->getFallbackLocales()); @@ -98,12 +95,10 @@ public function testDefaultConfigs(): void public function testDisablingBrowserLanguageDetection(): void { $settings = new LocaleSettings( - new Config( - [ - 'Site' => ['language' => 'en', 'browserDetectLanguage' => 0], - 'Languages' => ['en' => 'English'], - ] - ) + [ + 'Site' => ['language' => 'en', 'browserDetectLanguage' => 0], + 'Languages' => ['en' => 'English'], + ] ); $this->assertFalse($settings->browserLanguageDetectionEnabled()); } @@ -116,13 +111,11 @@ public function testDisablingBrowserLanguageDetection(): void public function testRightToLeft(): void { $settings = new LocaleSettings( - new Config( - [ - 'Site' => ['language' => 'en'], - 'Languages' => ['en' => 'English', 'ar' => 'Arabic'], - 'LanguageSettings' => ['rtl_langs' => 'ar'], - ] - ) + [ + 'Site' => ['language' => 'en'], + 'Languages' => ['en' => 'English', 'ar' => 'Arabic'], + 'LanguageSettings' => ['rtl_langs' => 'ar'], + ] ); $this->assertFalse($settings->isRightToLeftLocale('en')); $this->assertTrue($settings->isRightToLeftLocale('ar')); @@ -136,12 +129,10 @@ public function testRightToLeft(): void public function testInitializationStatusFlagging(): void { $settings = new LocaleSettings( - new Config( - [ - 'Site' => ['language' => 'en'], - 'Languages' => ['en' => 'English'], - ] - ) + [ + 'Site' => ['language' => 'en'], + 'Languages' => ['en' => 'English'], + ] ); $this->assertFalse($settings->isLocaleInitialized('en')); $settings->markLocaleInitialized('en'); @@ -212,7 +203,7 @@ public function testFallbackLocaleConfigs(array $expected, string $language, ?st $config['Site']['fallback_languages'] = $fallbackLanguages; } - $settings = new LocaleSettings(new Config($config)); + $settings = new LocaleSettings($config); $this->assertEquals($expected, $settings->getFallbackLocales()); } @@ -364,12 +355,10 @@ public function testDetectLocale( string $expected ): void { $settings = new LocaleSettings( - new Config( - [ - 'Site' => ['language' => $default], - 'Languages' => $enabled, - ] - ) + [ + 'Site' => ['language' => $default], + 'Languages' => $enabled, + ] ); $this->assertSame(