Completed
Push — master ( c5f975...e222d1 )
by Joachim
05:06
created

AddIndicesSubscriber   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 5
eloc 15
c 1
b 0
f 1
dl 0
loc 33
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A loadClassMetadata() 0 24 4
A getSubscribedEvents() 0 4 1
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 AddIndicesSubscriber implements EventSubscriber
13
{
14
    public function getSubscribedEvents(): array
15
    {
16
        return [
17
            Events::loadClassMetadata,
18
        ];
19
    }
20
21
    public function loadClassMetadata(LoadClassMetadataEventArgs $event): void
22
    {
23
        $metadata = $event->getClassMetadata();
24
25
        if (!is_subclass_of($metadata->name, BarcodeAwareInterface::class, true)) {
26
            return;
27
        }
28
29
        $actualColumns = $metadata->getColumnNames();
30
        $requiredColumns = ['barcode_checked', 'barcode_valid'];
31
32
        $tableConfig = ['indexes' => []];
33
34
        foreach ($requiredColumns as $requiredColumn) {
35
            if (!in_array($requiredColumn, $actualColumns, true)) {
36
                return;
37
            }
38
39
            $tableConfig['indexes'][] = [
40
                'columns' => [$requiredColumn],
41
            ];
42
        }
43
44
        $metadata->table = array_merge_recursive($tableConfig, $metadata->table);
45
    }
46
}
47