diff --git a/src/EventSubscriber/AdminSettingsSubscriber.php b/src/EventSubscriber/AdminSettingsSubscriber.php new file mode 100644 index 00000000..2e482bc2 --- /dev/null +++ b/src/EventSubscriber/AdminSettingsSubscriber.php @@ -0,0 +1,74 @@ + 'updateSearchIndex', + ]; + } + + /** + * @throws Exception + */ + public function updateSearchIndex(GenericEvent $event): void + { + $arguments = $event->getArguments(); + $currentLanguages = $arguments['existingValues']['general']['valid_languages']; + $newLanguages = $this->languageService->getNewLanguages( + explode(',', $arguments['values']['general.validLanguages']) + ); + + if (empty($currentLanguages) && !empty($newLanguages)) { + $this->setLanguagesAndUpdate($newLanguages); + + return; + } + + sort($currentLanguages); + sort($newLanguages); + + if ($currentLanguages !== $newLanguages) { + $this->setLanguagesAndUpdate($newLanguages); + } + } + + /** + * @throws Exception + */ + private function setLanguagesAndUpdate( + array $newLanguages + ): void + { + $this->languageService->setValidLanguages($newLanguages); + $this->indexUpdateService->updateAll(); + } +} diff --git a/src/Service/SearchIndex/LanguageService.php b/src/Service/SearchIndex/LanguageService.php index 237871b0..16af2e5f 100644 --- a/src/Service/SearchIndex/LanguageService.php +++ b/src/Service/SearchIndex/LanguageService.php @@ -13,6 +13,7 @@ namespace Pimcore\Bundle\GenericDataIndexBundle\Service\SearchIndex; +use Pimcore\Localization\LocaleServiceInterface; use Pimcore\Tool; /** @@ -20,6 +21,11 @@ */ final class LanguageService implements LanguageServiceInterface { + public function __construct( + private readonly LocaleServiceInterface $localeService, + ) { + } + private array $validLanguages = []; public function setValidLanguages(array $argLanguages): void @@ -35,4 +41,17 @@ public function getValidLanguages(): array return $this->validLanguages; } + + public function getNewLanguages(array $validLanguages): array + { + $newLanguages = []; + + foreach ($validLanguages as $language) { + if ($this->localeService->isLocale($language)) { + $newLanguages[] = $language; + } + } + + return $newLanguages; + } } diff --git a/src/Service/SearchIndex/LanguageServiceInterface.php b/src/Service/SearchIndex/LanguageServiceInterface.php index a25a00b1..2247d6f7 100644 --- a/src/Service/SearchIndex/LanguageServiceInterface.php +++ b/src/Service/SearchIndex/LanguageServiceInterface.php @@ -21,4 +21,6 @@ interface LanguageServiceInterface public function setValidLanguages(array $argLanguages): void; public function getValidLanguages(): array; + + public function getNewLanguages(array $validLanguages): array; }