Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Api\Data\Api\Response\Catalog;

interface LanguageResponseInterface
{
public const LANGUAGES = 'languages';
public const LANGUAGE = 'language';

/**
* @return array
*/
public function getLanguages(): array;

/**
* @param array $languages
* @return self
*/
public function setLanguages(array $languages): self;
}
34 changes: 34 additions & 0 deletions src/Api/Data/Api/Type/LanguageTypeInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Api\Data\Api\Type;

interface LanguageTypeInterface
{
public const NAME = 'name';

public const KEY = 'key';

/**
* @return string
*/
public function getName(): string;

/**
* @param string $name
* @return self
*/
public function setName(string $name): self;

/**
* @return string
*/
public function getLanguageId(): string;

/**
* @param string $languageId
* @return self
*/
public function setLanguageId(string $languageId): self;
}
24 changes: 24 additions & 0 deletions src/Model/Api/Request/Catalog/LanguageRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Model\Api\Request\Catalog;

use Tweakwise\TweakwiseJs\Model\Api\Request;
use Tweakwise\TweakwiseJs\Model\Api\Response\Catalog\LanguageResponse;

class LanguageRequest extends Request
{
/**
* @var string
*/
protected string $path = 'catalog/languages';

/**
* @return string
*/
public function getResponseType(): string
{
return LanguageResponse::class;
}
}
76 changes: 76 additions & 0 deletions src/Model/Api/Response/Catalog/LanguageResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Model\Api\Response\Catalog;

use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\Model\Context;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Registry;
use Tweakwise\TweakwiseJs\Api\Data\Api\Response\Catalog\LanguageResponseInterface;
use Tweakwise\TweakwiseJs\Model\Api\Response;
use Tweakwise\TweakwiseJs\Model\Api\Type\LanguageType;
use Tweakwise\TweakwiseJs\Model\Api\Type\LanguageTypeFactory;

class LanguageResponse extends Response implements LanguageResponseInterface
{
/**
* @param Context $context
* @param Registry $registry
* @param LanguageTypeFactory $languageTypeFactory
* @param AbstractResource|null $resource
* @param AbstractDb|null $resourceCollection
* @param array $data
*/
public function __construct(
Context $context,
Registry $registry,
protected readonly LanguageTypeFactory $languageTypeFactory,
?AbstractResource $resource = null,
?AbstractDb $resourceCollection = null,
array $data = []
) {
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
}

/**
* @return array
*/
public function getLanguages(): array
{
$languages = $this->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);
}
}
45 changes: 45 additions & 0 deletions src/Model/Api/Type/LanguageType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Model\Api\Type;

use Magento\Framework\Model\AbstractModel;
use Tweakwise\TweakwiseJs\Api\Data\Api\Type\LanguageTypeInterface;

class LanguageType extends AbstractModel implements LanguageTypeInterface
{
/**
* @return string
*/
public function getName(): string
{
return $this->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);
}
}
19 changes: 19 additions & 0 deletions src/Model/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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);
}
}
56 changes: 56 additions & 0 deletions src/Model/Config/Source/Language.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Model\Config\Source;

use Tweakwise\TweakwiseJs\Exception\ApiException;
use Tweakwise\TweakwiseJs\Model\Api\Client;
use Tweakwise\TweakwiseJs\Model\Api\RequestFactory;
use Tweakwise\TweakwiseJs\Model\Api\Response\Catalog\LanguageResponse;
use Magento\Framework\Data\OptionSourceInterface;

class Language implements OptionSourceInterface
{
/**
* @param RequestFactory $requestFactory
* @param Client $apiClient
*/
public function __construct(
private readonly Client $apiClient,
private readonly RequestFactory $requestFactory,
) {
}

/**
* @return array
*/
public function toOptionArray()
{
$options = [
[
'label' => __('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;
}
}
29 changes: 29 additions & 0 deletions src/Model/Config/Source/UiLanguage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace Tweakwise\TweakwiseJs\Model\Config\Source;

use Magento\Framework\Data\OptionSourceInterface;

class UiLanguage implements OptionSourceInterface
{
/**
* @return array
*/
public function toOptionArray()
{
return [
[
'label' => __('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')],
];
}
}
16 changes: 16 additions & 0 deletions src/ViewModel/Base.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
14 changes: 14 additions & 0 deletions src/etc/adminhtml/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
</argument>
</arguments>
</virtualType>
<virtualType name="Tweakwise\TweakwiseJs\Model\Api\RequestFactory\Catalog\LanguageRequest"
type="Tweakwise\TweakwiseJs\Model\Api\RequestFactory">
<arguments>
<argument name="type" xsi:type="string">Tweakwise\TweakwiseJs\Model\Api\Request\Catalog\LanguageRequest
</argument>
</arguments>
</virtualType>
<virtualType name="Tweakwise\TweakwiseJs\Model\Api\RequestFactory\Catalog\SortTemplateRequest"
type="Tweakwise\TweakwiseJs\Model\Api\RequestFactory">
<arguments>
Expand Down Expand Up @@ -57,6 +64,13 @@
</argument>
</arguments>
</virtualType>
<type name="Tweakwise\TweakwiseJs\Model\Config\Source\Language">
<arguments>
<argument name="requestFactory" xsi:type="object">
Tweakwise\TweakwiseJs\Model\Api\RequestFactory\Catalog\LanguageRequest
</argument>
</arguments>
</type>
<virtualType name="Tweakwise\TweakwiseJs\Model\Config\Source\SortTemplate"
type="Tweakwise\TweakwiseJs\Model\Config\Source\Template">
<arguments>
Expand Down
10 changes: 10 additions & 0 deletions src/etc/adminhtml/system.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@
<field id="enabled">1</field>
</depends>
</field>
<field id="uilanguage" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
<label>UI Language</label>
<source_model>Tweakwise\TweakwiseJs\Model\Config\Source\UiLanguage</source_model>
<comment><![CDATA[Choose which language to use for the User interface<br /><strong style="color:red">Important:</strong> Save your instance key so that all options are loaded.]]></comment>
</field>
<field id="language" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Language</label>
<source_model>Tweakwise\TweakwiseJs\Model\Config\Source\Language</source_model>
<comment><![CDATA[Choose which language to use<br /><strong style="color:red">Important:</strong> Save your instance key so that all options are loaded.]]></comment>
</field>
</group>
<group id="merchandising" translate="label" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Merchandising</label>
Expand Down
Loading
Loading