-
-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathAbstractConfigurationFromTypoScriptService.php
More file actions
97 lines (77 loc) · 3.09 KB
/
AbstractConfigurationFromTypoScriptService.php
File metadata and controls
97 lines (77 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
declare(strict_types=1);
namespace Extcode\Cart\Service;
/*
* This file is part of the package extcode/cart.
*
* For the full copyright and license information, please read the
* LICENSE file that was distributed with this source code.
*/
use Extcode\Cart\Domain\Model\Cart\Cart;
use Extcode\Cart\Domain\Model\Cart\ServiceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
abstract class AbstractConfigurationFromTypoScriptService
{
protected array $configurations;
public function __construct(
private readonly ConfigurationManagerInterface $configurationManager,
private readonly ServiceFactory $serviceFactory
) {
$this->configurations = $this->configurationManager->getConfiguration(
ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK,
'Cart'
);
}
public function getServices(?array $configurations, array $services, Cart $cart): array
{
if (empty($configurations['options'])) {
return $services;
}
foreach ($configurations['options'] as $serviceKey => $serviceConfig) {
$service = $this->serviceFactory->getService($serviceKey, $serviceConfig, $configurations['preset'] == $serviceKey);
$service->setCart($cart);
$services[$serviceKey] = $service;
}
return $services;
}
public function getConfigurationsForType(string $configurationType, ?string $country = null): ?array
{
if (!isset($this->configurations[$configurationType])) {
return null;
}
$configuration = $this->configurations[$configurationType];
if (is_null($country)) {
if (isset($configuration['settings']['countries']['options'][$configuration['settings']['countries']['preset']]['code'])) {
$country = $configuration['settings']['countries']['options'][$configuration['settings']['countries']['preset']]['code'];
}
}
if (isset($country)) {
if (
!empty($configuration['countries']) &&
!empty($configuration['countries'][$country]) &&
is_array($configuration['countries'][$country])
) {
return $configuration['countries'][$country];
}
if (!empty($configuration['zones']) && is_array($configuration['zones'])) {
$zoneSetting = $this->getTypeZonesPluginSettings($configuration['zones'], $country);
if (!empty($zoneSetting)) {
return $zoneSetting;
}
}
return $configuration;
}
return null;
}
protected function getTypeZonesPluginSettings(array $zoneSettings, string $country): array
{
foreach ($zoneSettings as $zoneSetting) {
$countriesInZones = GeneralUtility::trimExplode(',', $zoneSetting['countries'], true);
if (in_array($country, $countriesInZones)) {
return $zoneSetting;
}
}
return [];
}
}