Skip to content

Commit dad5ede

Browse files
Merge pull request #13 from loevgaard/make-unique-constraint-configurable
Make unique constraint configurable to revert 1.5 and get back to 1.4.X
2 parents 4880601 + be685fd commit dad5ede

11 files changed

Lines changed: 73 additions & 48 deletions

File tree

README.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,7 @@ use Sylius\Component\Core\Model\ProductVariant as BaseProductVariant;
7171

7272
/**
7373
* @ORM\Entity
74-
* @ORM\Table(name="sylius_product_variant",
75-
* uniqueConstraints={
76-
* @ORM\UniqueConstraint(name="loevgaard_barcode_unique", columns={"barcode", "version"})
77-
* }
78-
* )
74+
* @ORM\Table(name="sylius_product_variant")
7975
*/
8076
class ProductVariant extends BaseProductVariant implements LoevgaardSyliusBarcodePluginProductVariantInterface
8177
{

UPGRADE.md

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,3 @@
1-
# Upgrade from 1.4 to 1.5
2-
3-
1. Update your `ProductVariant` mapping annotations to have `loevgaard_barcode_unique` constraint:
4-
5-
```php
6-
/**
7-
* @ORM\Entity
8-
* @ORM\Table(name="sylius_product_variant",
9-
* uniqueConstraints={
10-
* @ORM\UniqueConstraint(name="loevgaard_barcode_unique", columns={"barcode", "version"})
11-
* }
12-
* )
13-
*/
14-
class ProductVariant extends BaseProductVariant implements LoevgaardSyliusBarcodePluginProductVariantInterface
15-
...
16-
```
17-
18-
1. Generate and run database migration
19-
20-
```bash
21-
php bin/console doctrine:migrations:diff
22-
php bin/console doctrine:migrations:migrate
23-
```
24-
25-
More context - at https://github.com/loevgaard/SyliusBarcodePlugin/pull/12/files
261

272
# Upgrade from 1.2 to 1.3
283

phpstan.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ parameters:
1313
- 'src/DependencyInjection/Configuration.php'
1414

1515
ignoreErrors:
16-
- '/Parameter #1 $configuration of method Symfony\Component\DependencyInjection\Extension\Extension::processConfiguration() expects Symfony\Component\Config\Definition\ConfigurationInterface, Symfony\Component\Config\Definition\ConfigurationInterface|null given./'
16+
- '/Parameter #1 \$configuration of method .+processConfiguration\(\) expects .+ConfigurationInterface, .+ConfigurationInterface\|null given\./'
1717
- '/Method Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface\:\:dispatch\(\) invoked with 2 parameters, 1 required\./'

src/DependencyInjection/Configuration.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public function getConfigTreeBuilder(): TreeBuilder
3333
->defaultFalse()
3434
->info('If true the barcode field will be validated when entered in the product forms (both product and variant)')
3535
->end()
36+
->booleanNode('require_unique')
37+
->defaultTrue()
38+
->info('If true the barcode unique constraint will be added to the field')
39+
->end()
3640
->end()
3741
->end()
3842
->end()

src/DependencyInjection/LoevgaardSyliusBarcodeExtension.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,19 @@
44

55
namespace Loevgaard\SyliusBarcodePlugin\DependencyInjection;
66

7-
use Exception;
87
use Symfony\Component\Config\FileLocator;
98
use Symfony\Component\DependencyInjection\ContainerBuilder;
109
use Symfony\Component\DependencyInjection\Extension\Extension;
1110
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
1211

1312
final class LoevgaardSyliusBarcodeExtension extends Extension
1413
{
15-
/**
16-
* {@inheritdoc}
17-
*
18-
* @throws Exception
19-
*/
2014
public function load(array $config, ContainerBuilder $container): void
2115
{
2216
$config = $this->processConfiguration($this->getConfiguration([], $container), $config);
2317
$container->setParameter('loevgaard_sylius_barcode.form.require', $config['form']['require']);
2418
$container->setParameter('loevgaard_sylius_barcode.form.require_valid', $config['form']['require_valid']);
19+
$container->setParameter('loevgaard_sylius_barcode.form.require_unique', $config['form']['require_unique']);
2520

2621
$loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
2722
$loader->load('services.xml');
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Loevgaard\SyliusBarcodePlugin\EventListener;
6+
7+
use Doctrine\Common\EventSubscriber;
8+
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
9+
use Doctrine\ORM\Events;
10+
use Loevgaard\SyliusBarcodePlugin\Model\BarcodeAwareInterface;
11+
12+
final class AddBarcodeUniqueSubscriber implements EventSubscriber
13+
{
14+
/** @var bool */
15+
private $uniqueEnabled;
16+
17+
public function __construct(bool $uniqueEnabled)
18+
{
19+
$this->uniqueEnabled = $uniqueEnabled;
20+
}
21+
22+
public function getSubscribedEvents(): array
23+
{
24+
return [
25+
Events::loadClassMetadata,
26+
];
27+
}
28+
29+
public function loadClassMetadata(LoadClassMetadataEventArgs $event): void
30+
{
31+
$metadata = $event->getClassMetadata();
32+
33+
if (!is_subclass_of($metadata->name, BarcodeAwareInterface::class, true)) {
34+
return;
35+
}
36+
37+
if (!$this->uniqueEnabled) {
38+
return;
39+
}
40+
41+
$metadata->fieldMappings['barcode']['unique'] = true;
42+
}
43+
}

src/Resources/config/services.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
66
<imports>
7+
<import resource="services/checker.xml"/>
78
<import resource="services/command.xml"/>
8-
<import resource="services/etc.xml"/>
9+
<import resource="services/event_listener.xml"/>
910
<import resource="services/form.xml"/>
1011
<import resource="services/messenger.xml"/>
1112
<import resource="services/validator.xml"/>
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,5 @@
1313
<service id="Loevgaard\SyliusBarcodePlugin\BarcodeChecker\BarcodeCheckerInterface"
1414
alias="loevgaard_sylius_barcode.barcode_checker"/>
1515

16-
<service id="Loevgaard\SyliusBarcodePlugin\EventListener\AddIndicesSubscriber">
17-
<tag name="doctrine.event_subscriber"/>
18-
</service>
19-
2016
</services>
2117
</container>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
<services>
7+
8+
<service id="Loevgaard\SyliusBarcodePlugin\EventListener\AddBarcodeUniqueSubscriber">
9+
<argument>%loevgaard_sylius_barcode.form.require_unique%</argument>
10+
11+
<tag name="doctrine.event_subscriber"/>
12+
</service>
13+
14+
<service id="Loevgaard\SyliusBarcodePlugin\EventListener\AddIndicesSubscriber">
15+
<tag name="doctrine.event_subscriber"/>
16+
</service>
17+
18+
</services>
19+
</container>

src/Validator/Constraint/Barcode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
class Barcode extends Constraint
1313
{
1414
/** @var string */
15-
public $message = 'The string "{{ string }}" is not a valid barcode.';
15+
public $message = 'loevgaard_sylius_barcode.product_variant.barcode.valid';
1616

1717
public function validatedBy(): string
1818
{

0 commit comments

Comments
 (0)