diff --git a/.env b/.env
index d3f99c76..0469f0eb 100644
--- a/.env
+++ b/.env
@@ -71,17 +71,6 @@ ERROR_PAGE_SHOW_HELP=1
# Info provider settings
##################################################################################
-# Digikey Provider:
-# You can get your client id and secret from https://developer.digikey.com/
-PROVIDER_DIGIKEY_CLIENT_ID=
-PROVIDER_DIGIKEY_SECRET=
-# The currency to get prices in
-PROVIDER_DIGIKEY_CURRENCY=EUR
-# The language to get results in (en, de, fr, it, es, zh, ja, ko)
-PROVIDER_DIGIKEY_LANGUAGE=en
-# The country to get results for
-PROVIDER_DIGIKEY_COUNTRY=DE
-
# Octopart / Nexar Provider:
# You can get your API key from https://nexar.com/api
PROVIDER_OCTOPART_CLIENT_ID=
diff --git a/config/packages/knpu_oauth2_client.yaml b/config/packages/knpu_oauth2_client.yaml
index 7d296a8b..d84b094d 100644
--- a/config/packages/knpu_oauth2_client.yaml
+++ b/config/packages/knpu_oauth2_client.yaml
@@ -6,8 +6,8 @@ knpu_oauth2_client:
type: generic
provider_class: '\League\OAuth2\Client\Provider\GenericProvider'
- client_id: '%env(PROVIDER_DIGIKEY_CLIENT_ID)%'
- client_secret: '%env(PROVIDER_DIGIKEY_SECRET)%'
+ client_id: '%env(settings:digikey:clientId)%'
+ client_secret: '%env(settings:digikey:secret)%'
redirect_route: 'oauth_client_check'
redirect_params: {name: 'ip_digikey_oauth'}
diff --git a/config/services.yaml b/config/services.yaml
index dfc9a7c7..b65a4e78 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -199,13 +199,6 @@ services:
arguments:
$providers: !tagged_iterator 'app.info_provider'
- App\Services\InfoProviderSystem\Providers\DigikeyProvider:
- arguments:
- $clientId: '%env(string:PROVIDER_DIGIKEY_CLIENT_ID)%'
- $currency: '%env(string:PROVIDER_DIGIKEY_CURRENCY)%'
- $language: '%env(string:PROVIDER_DIGIKEY_LANGUAGE)%'
- $country: '%env(string:PROVIDER_DIGIKEY_COUNTRY)%'
-
App\Services\InfoProviderSystem\Providers\OctopartProvider:
arguments:
$clientId: '&env(string:PROVIDER_OCTOPART_CLIENT_ID)%'
diff --git a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php
index b20368ce..c2113b4d 100644
--- a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php
+++ b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php
@@ -31,6 +31,7 @@ use App\Services\InfoProviderSystem\DTOs\PriceDTO;
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
use App\Services\InfoProviderSystem\DTOs\SearchResultDTO;
use App\Services\OAuth\OAuthTokenManager;
+use App\Settings\InfoProviderSystem\DigikeySettings;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class DigikeyProvider implements InfoProviderInterface
@@ -55,17 +56,16 @@ class DigikeyProvider implements InfoProviderInterface
];
public function __construct(HttpClientInterface $httpClient, private readonly OAuthTokenManager $authTokenManager,
- private readonly string $currency, private readonly string $clientId,
- private readonly string $language, private readonly string $country)
+ private readonly DigikeySettings $settings,)
{
//Create the HTTP client with some default options
$this->digikeyClient = $httpClient->withOptions([
"base_uri" => self::BASE_URI,
"headers" => [
- "X-DIGIKEY-Client-Id" => $clientId,
- "X-DIGIKEY-Locale-Site" => $this->country,
- "X-DIGIKEY-Locale-Language" => $this->language,
- "X-DIGIKEY-Locale-Currency" => $this->currency,
+ "X-DIGIKEY-Client-Id" => $this->settings->clientId,
+ "X-DIGIKEY-Locale-Site" => $this->settings->country,
+ "X-DIGIKEY-Locale-Language" => $this->settings->language,
+ "X-DIGIKEY-Locale-Currency" => $this->settings->currency,
"X-DIGIKEY-Customer-Id" => 0,
]
]);
@@ -101,7 +101,7 @@ class DigikeyProvider implements InfoProviderInterface
public function isActive(): bool
{
//The client ID has to be set and a token has to be available (user clicked connect)
- return $this->clientId !== '' && $this->authTokenManager->hasToken(self::OAUTH_APP_NAME);
+ return $this->settings->clientId !== '' && $this->authTokenManager->hasToken(self::OAUTH_APP_NAME);
}
public function searchByKeyword(string $keyword): array
@@ -268,7 +268,7 @@ class DigikeyProvider implements InfoProviderInterface
$prices = [];
foreach ($price_breaks as $price_break) {
- $prices[] = new PriceDTO(minimum_discount_amount: $price_break['BreakQuantity'], price: (string) $price_break['UnitPrice'], currency_iso_code: $this->currency);
+ $prices[] = new PriceDTO(minimum_discount_amount: $price_break['BreakQuantity'], price: (string) $price_break['UnitPrice'], currency_iso_code: $this->settings->currency);
}
return [
diff --git a/src/Settings/InfoProviderSystem/DigikeySettings.php b/src/Settings/InfoProviderSystem/DigikeySettings.php
new file mode 100644
index 00000000..e92041bb
--- /dev/null
+++ b/src/Settings/InfoProviderSystem/DigikeySettings.php
@@ -0,0 +1,65 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Settings\InfoProviderSystem;
+
+use App\Settings\SettingsIcon;
+use Jbtronics\SettingsBundle\Settings\Settings;
+use Jbtronics\SettingsBundle\Settings\SettingsTrait;
+use Symfony\Component\Form\Extension\Core\Type\CountryType;
+use Symfony\Component\Form\Extension\Core\Type\CurrencyType;
+use Symfony\Component\Form\Extension\Core\Type\LanguageType;
+use Symfony\Component\Translation\TranslatableMessage as TM;
+use Jbtronics\SettingsBundle\Settings\SettingsParameter;
+use Symfony\Component\Validator\Constraints as Assert;
+
+#[Settings(label: new TM("settings.ips.digikey"))]
+#[SettingsIcon("fa-plug")]
+class DigikeySettings
+{
+ use SettingsTrait;
+
+ #[SettingsParameter(
+ label: new TM("settings.ips.digikey.client_id"),
+ envVar: "PROVIDER_DIGIKEY_CLIENT_ID"
+ )]
+ public ?string $clientId = null;
+
+ #[SettingsParameter(
+ label: new TM("settings.ips.digikey.secret"),
+ envVar: "PROVIDER_DIGIKEY_SECRET"
+ )]
+ public ?string $secret = null;
+
+ #[SettingsParameter(label: new TM("settings.ips.tme.currency"), formType: CurrencyType::class, formOptions: ["preferred_choices" => ["EUR", "USD", "CHF", "GBP"]], envVar: "PROVIDER_DIGIKEY_CURRENCY")]
+ #[Assert\Currency()]
+ public string $currency = "EUR";
+
+ #[SettingsParameter(label: new TM("settings.ips.tme.country"), formType: CountryType::class, envVar: "PROVIDER_DIGIKEY_COUNTRY")]
+ #[Assert\Country]
+ public string $country = "DE";
+
+ #[SettingsParameter(label: new TM("settings.ips.tme.language"), formType: LanguageType::class, envVar: "PROVIDER_DIGIKEY_LANGUAGE")]
+ #[Assert\Language]
+ public string $language = "en";
+}
\ No newline at end of file
diff --git a/src/Settings/InfoProviderSystem/InfoProviderSettings.php b/src/Settings/InfoProviderSystem/InfoProviderSettings.php
index 109fbc02..7ad3c0ea 100644
--- a/src/Settings/InfoProviderSystem/InfoProviderSettings.php
+++ b/src/Settings/InfoProviderSystem/InfoProviderSettings.php
@@ -32,6 +32,9 @@ class InfoProviderSettings
{
use SettingsTrait;
+ #[EmbeddedSettings]
+ public ?DigikeySettings $digikey = null;
+
#[EmbeddedSettings]
public ?MouserSettings $mouser = null;
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf
index 76bf65fb..9efccd04 100644
--- a/translations/messages.en.xlf
+++ b/translations/messages.en.xlf
@@ -12928,5 +12928,23 @@ Please note, that you can not impersonate a disabled user. If you try you will g
Root nodes redirect to new entity pages
+
+
+ settings.ips.digikey
+ Digikey
+
+
+
+
+ settings.ips.digikey.client_id
+ Client ID
+
+
+
+
+ settings.ips.digikey.secret
+ Secret
+
+