diff --git a/src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php b/src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php new file mode 100644 index 0000000..0109217 --- /dev/null +++ b/src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php @@ -0,0 +1,22 @@ +getData(self::LANGUAGES); + if ($languages) { + return $languages; + } + + $language = $this->getData(self::LANGUAGE); + if ($language) { + if (isset($language['languageid']) && !isset($language[0])) { + $language = [$language]; + } + + $values = []; + foreach ($language as $value) { + if (!$value instanceof LanguageType) { + $value = $this->languageTypeFactory->create(['data' => $value]); + } + + $values[] = $value; + } + + $this->setLanguages($values); + } + + return $this->getData(self::LANGUAGES); + } + + /** + * @param array $languages + * @return LanguageResponse + */ + public function setLanguages(array $languages): LanguageResponseInterface + { + return $this->setData(self::LANGUAGES, $languages); + } +} diff --git a/src/Model/Api/Type/LanguageType.php b/src/Model/Api/Type/LanguageType.php new file mode 100644 index 0000000..3cca9ae --- /dev/null +++ b/src/Model/Api/Type/LanguageType.php @@ -0,0 +1,45 @@ +getData(self::NAME); + } + + /** + * @param string $name + * @return LanguageTypeInterface + */ + public function setName(string $name): LanguageTypeInterface + { + return $this->setData(self::NAME, $name); + } + + /** + * @return string + */ + public function getLanguageId(): string + { + return $this->getData(self::KEY); + } + + /** + * @param string $languageId + * @return LanguageTypeInterface + */ + public function setLanguageId(string $languageId): LanguageTypeInterface + { + return $this->setData(self::KEY, $languageId); + } +} diff --git a/src/Model/Config.php b/src/Model/Config.php index fae3299..527975f 100644 --- a/src/Model/Config.php +++ b/src/Model/Config.php @@ -15,6 +15,9 @@ class Config private const XML_PATH_MERCHANDISING_ENABLED = 'tweakwise/tweakwisejs/merchandising/enabled'; + private const XML_PATH_UI_LANGUAGE = 'tweakwise/tweakwisejs/general/uilanguage'; + private const XML_PATH_LANGUAGE = 'tweakwise/tweakwisejs/general/language'; + private const XML_PATH_SEARCH_TYPE = 'tweakwise/tweakwisejs/search/type'; private const XML_PATH_EVENTS_ENABLED = 'tweakwise/tweakwisejs/events/enabled'; private const XML_PATH_EVENTS_COOKIE_NAME = 'tweakwise/tweakwisejs/events/cookie_name'; @@ -76,4 +79,20 @@ public function getEventsCookieName(): string { return $this->scopeConfig->getValue(self::XML_PATH_EVENTS_COOKIE_NAME, ScopeInterface::SCOPE_STORE); } + + /** + * @return string|null + */ + public function getUiLanguage(): ?string + { + return $this->scopeConfig->getValue(self::XML_PATH_UI_LANGUAGE, ScopeInterface::SCOPE_STORE); + } + + /** + * @return string|null + */ + public function getLanguage(): ?string + { + return $this->scopeConfig->getValue(self::XML_PATH_LANGUAGE, ScopeInterface::SCOPE_STORE); + } } diff --git a/src/Model/Config/Source/Language.php b/src/Model/Config/Source/Language.php new file mode 100644 index 0000000..6773413 --- /dev/null +++ b/src/Model/Config/Source/Language.php @@ -0,0 +1,56 @@ + __('Default language'), + 'value' => '' + ] + ]; + + try { + $request = $this->requestFactory->create(); + /** @var LanguageResponse $response */ + $response = $this->apiClient->request($request); + + $languages = $response->getLanguages(); + + foreach ($languages as $language) { + $options[] = [ + 'label' => $language->getName(), + 'value' => $language->getLanguageId() + ]; + } + } catch (ApiException $e) { + //do nothing + } + + return $options; + } +} diff --git a/src/Model/Config/Source/UiLanguage.php b/src/Model/Config/Source/UiLanguage.php new file mode 100644 index 0000000..2ed7056 --- /dev/null +++ b/src/Model/Config/Source/UiLanguage.php @@ -0,0 +1,29 @@ + __('Default language'), + 'value' => '' + ], + ['value' => 'en', 'label' => __('English')], + ['value' => 'nl', 'label' => __('Dutch')], + ['value' => 'de', 'label' => __('German')], + ['value' => 'fr', 'label' => __('French')], + ['value' => 'es', 'label' => __('Spanish')], + ['value' => 'it', 'label' => __('Italian')], + ]; + } +} diff --git a/src/ViewModel/Base.php b/src/ViewModel/Base.php index 8f7e354..e1d2810 100644 --- a/src/ViewModel/Base.php +++ b/src/ViewModel/Base.php @@ -49,4 +49,20 @@ public function isEventsEnabled(): bool { return $this->config->isEventsEnabled(); } + + /** + * @return string|null + */ + public function getUiLanguage(): ?string + { + return $this->config->getUiLanguage(); + } + + /** + * @return string|null + */ + public function getLanguage(): ?string + { + return $this->config->getLanguage(); + } } diff --git a/src/etc/adminhtml/di.xml b/src/etc/adminhtml/di.xml index 0c7e72e..b07d60a 100644 --- a/src/etc/adminhtml/di.xml +++ b/src/etc/adminhtml/di.xml @@ -15,6 +15,13 @@ + + + Tweakwise\TweakwiseJs\Model\Api\Request\Catalog\LanguageRequest + + + @@ -57,6 +64,13 @@ + + + + Tweakwise\TweakwiseJs\Model\Api\RequestFactory\Catalog\LanguageRequest + + + diff --git a/src/etc/adminhtml/system.xml b/src/etc/adminhtml/system.xml index e6886d2..8a942d6 100644 --- a/src/etc/adminhtml/system.xml +++ b/src/etc/adminhtml/system.xml @@ -25,6 +25,16 @@ 1 + + + Tweakwise\TweakwiseJs\Model\Config\Source\UiLanguage + Important: Save your instance key so that all options are loaded.]]> + + + + Tweakwise\TweakwiseJs\Model\Config\Source\Language + Important: Save your instance key so that all options are loaded.]]> + diff --git a/src/view/frontend/layout/default.xml b/src/view/frontend/layout/default.xml index fb70c4b..94ec3fd 100644 --- a/src/view/frontend/layout/default.xml +++ b/src/view/frontend/layout/default.xml @@ -7,7 +7,11 @@ + ifconfig="tweakwise/tweakwisejs/general/enabled"> + + Tweakwise\TweakwiseJs\ViewModel\Base + + getData('view_model'); +$language = (string) $viewModel->getLanguage(); +$uiLanguage = (string) $viewModel->getUiLanguage(); ?>