Skip to content

Commit 1b1f71b

Browse files
authored
Merge pull request #59 from NoResponseMate/SYL-4343/refactor-options
[Maintenance] Refactor `Options` classes and usage
2 parents befcd51 + 43fbc1b commit 1b1f71b

File tree

74 files changed

+546
-354
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+546
-354
lines changed

config/services/form.xml

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@
1111
1212
-->
1313

14-
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
15-
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
14+
<container
15+
xmlns="http://symfony.com/schema/dic/services"
16+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
17+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
18+
>
1619
<parameters>
1720
<parameter key="sylius_mollie.form.type.mollie_gateway_config.validation_groups" type="collection">
1821
<parameter>sylius</parameter>
@@ -77,9 +80,8 @@
7780

7881
<service id="sylius_mollie.form.extension.mollie_gateway_config" class="Sylius\MolliePlugin\Form\Type\MollieGatewayConfigType">
7982
<argument>%sylius_mollie.model.mollie_gateway_config.class%</argument>
80-
<argument type="service" id="sylius_mollie.documentation.documentation_links"/>
81-
<argument>%sylius_locale.locale%</argument>
8283
<argument>%sylius_mollie.form.type.mollie_gateway_config.validation_groups%</argument>
84+
<argument>%sylius_locale.locale%</argument>
8385
<tag name="form.type"/>
8486
</service>
8587

@@ -127,5 +129,23 @@
127129
<argument>%sylius_mollie.model.mollie_gateway_config_translation.class%</argument>
128130
<tag name="form.type" />
129131
</service>
132+
133+
<service id="sylius_mollie.form.type.countries_restriction_choice" class="Sylius\MolliePlugin\Form\Type\CountriesRestrictionChoiceType">
134+
<tag name="form.type" />
135+
</service>
136+
137+
<service id="sylius_mollie.form.type.payment_type_choice" class="Sylius\MolliePlugin\Form\Type\PaymentTypeChoiceType">
138+
<argument type="service" id="sylius_mollie.documentation.documentation_links" />
139+
140+
<tag name="form.type" />
141+
</service>
142+
143+
<service id="sylius_mollie.form.type.payment_surcharge_type_choice" class="Sylius\MolliePlugin\Form\Type\PaymentSurchargeFeeTypeChoiceType">
144+
<tag name="form.type" />
145+
</service>
146+
147+
<service id="sylius_mollie.form.type.logger_level_choice" class="Sylius\MolliePlugin\Form\Type\LoggerLevelChoiceType">
148+
<tag name="form.type" />
149+
</service>
130150
</services>
131151
</container>

src/Action/CaptureAction.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
use Sylius\Component\Core\Repository\PaymentRepositoryInterface;
2929
use Sylius\MolliePlugin\Action\Api\BaseApiAwareAction;
3030
use Sylius\MolliePlugin\Entity\OrderInterface;
31-
use Sylius\MolliePlugin\Payments\PaymentTerms\Options;
31+
use Sylius\MolliePlugin\Payments\ApiTypeRestrictedPaymentMethods;
32+
use Sylius\MolliePlugin\Payments\PaymentType;
3233
use Sylius\MolliePlugin\Request\Api\CreateCustomer;
3334
use Sylius\MolliePlugin\Request\Api\CreateInternalRecurring;
3435
use Sylius\MolliePlugin\Request\Api\CreateOnDemandSubscription;
@@ -126,31 +127,31 @@ public function execute($request): void
126127
$this->gateway->execute(new CreateOnDemandSubscriptionPayment($details));
127128
}
128129
} else {
129-
if (isset($details['metadata']['methodType']) && Options::PAYMENT_API === $details['metadata']['methodType']) {
130-
if (in_array($details['metadata']['molliePaymentMethods'], Options::getOnlyOrderAPIMethods(), true)) {
130+
if (isset($details['metadata']['methodType']) && PaymentType::PAYMENT_API === $details['metadata']['methodType']) {
131+
if (in_array($details['metadata']['molliePaymentMethods'], ApiTypeRestrictedPaymentMethods::onlyOrderApi(), true)) {
131132
throw new InvalidArgumentException(sprintf(
132133
'Method %s is not allowed to use %s',
133134
$details['metadata']['molliePaymentMethods'],
134-
Options::PAYMENT_API,
135+
PaymentType::PAYMENT_API,
135136
));
136137
}
137138

138139
$this->gateway->execute(new CreatePayment($details));
139140
}
140141

141-
if (isset($details['metadata']['methodType']) && Options::ORDER_API === $details['metadata']['methodType']) {
142-
if (in_array($details['metadata']['molliePaymentMethods'], Options::getOnlyPaymentAPIMethods(), true)) {
142+
if (isset($details['metadata']['methodType']) && PaymentType::ORDER_API === $details['metadata']['methodType']) {
143+
if (in_array($details['metadata']['molliePaymentMethods'], ApiTypeRestrictedPaymentMethods::onlyPaymentApi(), true)) {
143144
throw new InvalidArgumentException(sprintf(
144145
'Method %s is not allowed to use %s',
145146
$details['metadata']['molliePaymentMethods'],
146-
Options::ORDER_API,
147+
PaymentType::ORDER_API,
147148
));
148149
}
149150

150151
$this->gateway->execute(new CreateOrder($details));
151152
}
152153

153-
if (isset($details['metadata']['methodType']) && Options::ORDER_API === $details['metadata']['methodType']) {
154+
if (isset($details['metadata']['methodType']) && PaymentType::ORDER_API === $details['metadata']['methodType']) {
154155
$this->gateway->execute(new CreateOrder($details));
155156
}
156157
}

src/Action/ConvertMolliePaymentAction.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
use Sylius\MolliePlugin\Helper\ConvertOrderInterface;
3333
use Sylius\MolliePlugin\Helper\IntToStringConverterInterface;
3434
use Sylius\MolliePlugin\Helper\PaymentDescriptionInterface;
35-
use Sylius\MolliePlugin\Payments\PaymentTerms\Options;
35+
use Sylius\MolliePlugin\Payments\PaymentType;
3636
use Sylius\MolliePlugin\Provider\Divisor\DivisorProviderInterface;
3737
use Sylius\MolliePlugin\Resolver\PaymentLocaleResolverInterface;
3838
use Webmozart\Assert\Assert;
@@ -134,16 +134,16 @@ public function execute($request): void
134134

135135
if (false === $this->mollieApiClient->isRecurringSubscription()) {
136136
$details['customerId'] = $model['customer_mollie_id'] ?? null;
137-
$details['metadata']['methodType'] = Options::PAYMENT_API;
137+
$details['metadata']['methodType'] = PaymentType::PAYMENT_API;
138138

139139
if (null !== ($paymentLocale = $this->paymentLocaleResolver->resolveFromOrder($order))) {
140140
$details['locale'] = $paymentLocale;
141141
}
142142

143-
if (Options::ORDER_API === array_search($method->getPaymentType(), Options::getAvailablePaymentType(), true)) {
143+
if (PaymentType::ORDER_API === array_search($method->getPaymentType(), PaymentType::getAllAvailable(), true)) {
144144
unset($details['customerId']);
145145

146-
$details['metadata']['methodType'] = Options::ORDER_API;
146+
$details['metadata']['methodType'] = PaymentType::ORDER_API;
147147
$details = $this->orderConverter->convert($order, $details, $divisor, $method);
148148
}
149149
}

src/Entity/MollieGatewayConfigInterface.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818

1919
interface MollieGatewayConfigInterface extends MethodInterface, TranslatableInterface
2020
{
21-
public const ALL_COUNTRIES = 'ALL_COUNTRIES';
22-
23-
public const SELECTED_COUNTRIES = 'SELECTED_COUNTRIES';
24-
2521
public function getId(): int;
2622

2723
public function getMethodId(): ?string;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Sylius Mollie Plugin package.
5+
*
6+
* (c) Sylius Sp. z o.o.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Sylius\MolliePlugin\Form\Type;
15+
16+
use Sylius\MolliePlugin\Model\CountriesRestriction;
17+
use Symfony\Component\Form\AbstractType;
18+
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
19+
use Symfony\Component\OptionsResolver\OptionsResolver;
20+
21+
final class CountriesRestrictionChoiceType extends AbstractType
22+
{
23+
public function configureOptions(OptionsResolver $resolver): void
24+
{
25+
$resolver->setDefaults([
26+
'label' => 'sylius_mollie_plugin.ui.country_level_restriction',
27+
'choices' => [
28+
'sylius_mollie_plugin.ui.all_countries' => CountriesRestriction::ALL,
29+
'sylius_mollie_plugin.ui.selected_countries' => CountriesRestriction::SELECTED,
30+
],
31+
]);
32+
}
33+
34+
public function getParent(): string
35+
{
36+
return ChoiceType::class;
37+
}
38+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Sylius Mollie Plugin package.
5+
*
6+
* (c) Sylius Sp. z o.o.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Sylius\MolliePlugin\Form\Type;
15+
16+
use Sylius\MolliePlugin\Logger\LoggerLevel;
17+
use Symfony\Component\Form\AbstractType;
18+
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
19+
use Symfony\Component\OptionsResolver\OptionsResolver;
20+
21+
final class LoggerLevelChoiceType extends AbstractType
22+
{
23+
public const TYPE_DEBUG = 'debug';
24+
25+
public const TYPE_LOG = 'log';
26+
27+
public function configureOptions(OptionsResolver $resolver): void
28+
{
29+
$resolver->setDefaults([
30+
'label' => 'sylius_mollie_plugin.ui.debug_level_log',
31+
'log_type' => self::TYPE_DEBUG,
32+
'choices' => self::getDebugChoices(),
33+
]);
34+
35+
$resolver->setAllowedValues('log_type', [self::TYPE_DEBUG, self::TYPE_LOG]);
36+
37+
$resolver->addNormalizer('choices', static function ($options, $choices) {
38+
if ($options['log_type'] === self::TYPE_LOG) {
39+
return self::getLogChoices();
40+
}
41+
42+
return $choices;
43+
});
44+
}
45+
46+
public function getParent(): string
47+
{
48+
return ChoiceType::class;
49+
}
50+
51+
/** @return array<string, int> */
52+
private static function getLogChoices(): array
53+
{
54+
return [
55+
'sylius_mollie_plugin.ui.info' => LoggerLevel::LOG_ERRORS,
56+
'sylius_mollie_plugin.ui.errors' => LoggerLevel::LOG_EVERYTHING,
57+
];
58+
}
59+
60+
/** @return array<string, int> */
61+
private static function getDebugChoices(): array
62+
{
63+
return [
64+
'sylius_mollie_plugin.ui.nothing_log' => LoggerLevel::LOG_DISABLED,
65+
'sylius_mollie_plugin.ui.errors' => LoggerLevel::LOG_ERRORS,
66+
'sylius_mollie_plugin.ui.everything' => LoggerLevel::LOG_EVERYTHING,
67+
];
68+
}
69+
}

src/Form/Type/MollieGatewayConfigType.php

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@
1616
use Sylius\Bundle\ProductBundle\Form\Type\ProductType as ProductFormType;
1717
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
1818
use Sylius\Bundle\ResourceBundle\Form\Type\ResourceTranslationsType;
19-
use Sylius\MolliePlugin\Documentation\DocumentationLinksInterface;
2019
use Sylius\MolliePlugin\Entity\MollieGatewayConfigInterface;
2120
use Sylius\MolliePlugin\Entity\MollieGatewayConfigTranslationInterface;
2221
use Sylius\MolliePlugin\Entity\ProductType;
2322
use Sylius\MolliePlugin\Factory\MollieSubscriptionGatewayFactory;
2423
use Sylius\MolliePlugin\Form\Type\Translation\MollieGatewayConfigTranslationType;
25-
use Sylius\MolliePlugin\Options\Country\Options as CountryOptions;
26-
use Sylius\MolliePlugin\Payments\Methods\AbstractMethod;
27-
use Sylius\MolliePlugin\Payments\PaymentTerms\Options;
24+
use Sylius\MolliePlugin\Payments\ApiTypeRestrictedPaymentMethods;
25+
use Sylius\MolliePlugin\Payments\PaymentType;
2826
use Sylius\MolliePlugin\Validator\Constraints\PaymentSurchargeType;
2927
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
3028
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
@@ -39,9 +37,8 @@ final class MollieGatewayConfigType extends AbstractResourceType
3937
{
4038
public function __construct(
4139
string $dataClass,
42-
private readonly DocumentationLinksInterface $documentationLinks,
40+
array $validationGroups,
4341
private readonly string $defaultLocale,
44-
array $validationGroups = [],
4542
) {
4643
parent::__construct($dataClass, $validationGroups);
4744
}
@@ -67,12 +64,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
6764
'label' => 'sylius_mollie_plugin.ui.payment_name',
6865
'entry_type' => MollieGatewayConfigTranslationType::class,
6966
])
70-
->add('paymentType', ChoiceType::class, [
71-
'label' => 'sylius_mollie_plugin.ui.payment_type',
72-
'choices' => Options::getAvailablePaymentType(),
73-
'help' => $this->documentationLinks->getPaymentMethodDoc(),
74-
'help_html' => true,
75-
])
67+
->add('paymentType', PaymentTypeChoiceType::class)
7668
->add('qrCodeEnabled', CheckboxType::class, [
7769
'label' => 'sylius_mollie_plugin.ui.qr_code',
7870
])
@@ -95,10 +87,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
9587
->add('customizeMethodImage', CustomizeMethodImageType::class, [
9688
'label' => false,
9789
])
98-
->add('country_restriction', ChoiceType::class, [
99-
'label' => 'sylius_mollie_plugin.ui.country_level_restriction',
100-
'choices' => CountryOptions::getCountriesConfigOptions(),
101-
])
90+
->add('country_restriction', CountriesRestrictionChoiceType::class)
10291
->add('countryLevel_excluded', CountryType::class, [
10392
'label' => 'sylius_mollie_plugin.ui.country_level_exclude',
10493
'required' => false,
@@ -125,9 +114,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
125114
->add('loggerEnabled', CheckboxType::class, [
126115
'label' => 'sylius_mollie_plugin.ui.debug_level_enabled',
127116
])
128-
->add('loggerLevel', ChoiceType::class, [
129-
'label' => 'sylius_mollie_plugin.ui.debug_level_log',
130-
'choices' => Options::getDebugLevels(),
117+
->add('loggerLevel', LoggerLevelChoiceType::class, [
118+
'log_type' => LoggerLevelChoiceType::TYPE_DEBUG,
131119
])
132120
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event): void {
133121
/** @var MollieGatewayConfigInterface $object */
@@ -139,12 +127,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
139127

140128
if (MollieSubscriptionGatewayFactory::FACTORY_NAME === $factoryName) {
141129
$form->remove('paymentType');
142-
$form->add('paymentType', ChoiceType::class, [
143-
'label' => 'sylius_mollie_plugin.ui.payment_type',
144-
'choices' => Options::getAvailablePaymentType(),
145-
'help' => $this->documentationLinks->getPaymentMethodDoc(),
146-
'help_html' => true,
147-
'empty_data' => Options::PAYMENT_API_VALUE,
130+
$form->add('paymentType', PaymentTypeChoiceType::class, [
131+
'empty_data' => PaymentType::PAYMENT_API_VALUE,
148132
'attr' => [
149133
'disabled' => 'disabled',
150134
],
@@ -163,13 +147,9 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
163147
$object = $form->getData();
164148
$data = $event->getData();
165149

166-
if (in_array($object->getMethodId(), Options::getOnlyOrderAPIMethods(), true)) {
150+
if (in_array($object->getMethodId(), ApiTypeRestrictedPaymentMethods::onlyOrderApi(), true)) {
167151
$form->remove('paymentType');
168-
$form->add('paymentType', ChoiceType::class, [
169-
'label' => 'sylius_mollie_plugin.ui.payment_type',
170-
'choices' => Options::getAvailablePaymentType(),
171-
'help' => $this->documentationLinks->getPaymentMethodDoc(),
172-
'help_html' => true,
152+
$form->add('paymentType', PaymentTypeChoiceType::class, [
173153
'attr' => [
174154
'disabled' => 'disabled',
175155
],
@@ -183,12 +163,12 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
183163
$object = $event->getForm()->getData();
184164
$data = $event->getData();
185165

186-
if (in_array($object->getMethodId(), Options::getOnlyOrderAPIMethods(), true)) {
187-
$data['paymentType'] = AbstractMethod::ORDER_API;
166+
if (in_array($object->getMethodId(), ApiTypeRestrictedPaymentMethods::onlyOrderApi(), true)) {
167+
$data['paymentType'] = PaymentType::ORDER_API_VALUE;
188168
}
189169

190-
if (in_array($object->getMethodId(), Options::getOnlyPaymentAPIMethods(), true)) {
191-
$data['paymentType'] = AbstractMethod::PAYMENT_API;
170+
if (in_array($object->getMethodId(), ApiTypeRestrictedPaymentMethods::onlyPaymentApi(), true)) {
171+
$data['paymentType'] = PaymentType::PAYMENT_API_VALUE;
192172
}
193173

194174
$event->setData($data);

src/Form/Type/MollieGatewayConfigurationType.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
use Sylius\MolliePlugin\Client\MollieApiClient;
1717
use Sylius\MolliePlugin\Documentation\DocumentationLinksInterface;
18-
use Sylius\MolliePlugin\Payments\PaymentTerms\Options;
1918
use Sylius\MolliePlugin\Validator\Constraints\LiveApiKeyIsNotBlank;
2019
use Symfony\Component\Form\AbstractType;
2120
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
@@ -100,9 +99,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
10099
range(1, 200, 1),
101100
),
102101
])
103-
->add('loggerLevel', ChoiceType::class, [
104-
'label' => 'sylius_mollie_plugin.ui.debug_level_log',
105-
'choices' => Options::getDebugLevels(),
102+
->add('loggerLevel', LoggerLevelChoiceType::class, [
103+
'log_type' => LoggerLevelChoiceType::TYPE_DEBUG,
106104
])
107105
->add('components', CheckboxType::class, [
108106
'label' => 'sylius_mollie_plugin.ui.enable_components',

0 commit comments

Comments
 (0)