diff --git a/composer.json b/composer.json index dc48915..5bd670e 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "require": { "php": "^8.1", "tweakwise/magento2-tweakwise-export": "^7.0", - "emico/m2-attributelanding": "^6.0", + "emico/m2-attributelanding": "^6.0.5", "ext-simplexml": "*", "ext-libxml": "*" }, 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 @@ + $filterAttribute) { - foreach (array_keys($filterAttribute) as $field) { - if (!in_array($field, $allowedFields, true) || !$filterAttribute[$field]) { - continue; - } - - $sanitizedAttributes[$key][$field] = $filterAttribute[$field]; - } - } - - return $sanitizedAttributes; - } -} diff --git a/src/Model/Api/Request/Catalog/LanguageRequest.php b/src/Model/Api/Request/Catalog/LanguageRequest.php new file mode 100644 index 0000000..454d997 --- /dev/null +++ b/src/Model/Api/Request/Catalog/LanguageRequest.php @@ -0,0 +1,24 @@ +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/Plugin/Model/Page/DataProvider.php b/src/Plugin/Model/Page/DataProvider.php deleted file mode 100644 index d12e1ad..0000000 --- a/src/Plugin/Model/Page/DataProvider.php +++ /dev/null @@ -1,37 +0,0 @@ -backendUrl->getBaseUrl(), - $this->frontNameResolver->getFrontName() - ); - return $result; - } -} 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..af1ba08 100644 --- a/src/etc/adminhtml/di.xml +++ b/src/etc/adminhtml/di.xml @@ -1,13 +1,6 @@ - - - - - @@ -15,6 +8,13 @@ + + + Tweakwise\TweakwiseJs\Model\Api\Request\Catalog\LanguageRequest + + + @@ -57,6 +57,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/adminhtml/web/js/form/element/filter-attribute-value.js b/src/view/adminhtml/web/js/form/element/filter-attribute-value.js index 6ee974f..f685c2d 100644 --- a/src/view/adminhtml/web/js/form/element/filter-attribute-value.js +++ b/src/view/adminhtml/web/js/form/element/filter-attribute-value.js @@ -34,12 +34,14 @@ define([ }); }, - setOtherFieldVisibility: function (selectedAttributeValue) { + setOtherFieldVisibility: function (selectedAttributeValue, otherFieldValue = null) { registry.get(`${this.parentName}.${this.otherFieldName}`, function (otherField) { const otherFieldVisible = selectedAttributeValue === this.otherValue otherField.disabled(!otherFieldVisible); if (selectedAttributeValue && !otherFieldVisible) { otherField.value(''); + } else if (otherFieldValue) { + otherField.value(otherFieldValue); } }.bind(this)); }, @@ -52,10 +54,8 @@ define([ if (optionExists) { this.value(valueToRestore); } else { - const firstOption = this.options()[0]; - if(firstOption) { - this.value(firstOption.value); - } + this.value(this.otherValue); + this.setOtherFieldVisibility(this.otherValue, valueToRestore); } }, diff --git a/src/view/adminhtml/web/js/form/element/filter-attribute.js b/src/view/adminhtml/web/js/form/element/filter-attribute.js index 56bf1bf..830a7d1 100644 --- a/src/view/adminhtml/web/js/form/element/filter-attribute.js +++ b/src/view/adminhtml/web/js/form/element/filter-attribute.js @@ -67,12 +67,14 @@ define([ }); }, - setOtherFieldVisibility: function (selectedAttribute) { + setOtherFieldVisibility: function (selectedAttribute, otherFieldValue = null) { registry.get(`${this.parentName}.${this.otherFieldName}`, function (otherField) { const otherFieldVisible = selectedAttribute === this.otherValue otherField.disabled(!otherFieldVisible); if (!otherFieldVisible) { otherField.value(''); + } else if (otherFieldValue) { + otherField.value(otherFieldValue); } }.bind(this)); }, @@ -89,10 +91,8 @@ define([ if (optionExists) { this.value(this.savedValue); } else { - const firstOption = this.options()[0]; - if (firstOption) { - this.value(firstOption.value); - } + this.value(this.otherValue); + this.setOtherFieldVisibility(this.otherValue, this.savedValue); } }, diff --git a/src/view/frontend/layout/default.xml b/src/view/frontend/layout/default.xml index 376e67b..d82de8c 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(); ?> registerInlineScript(); ?>