Passed
Push — master ( e8db75...046444 )
by Andrea
16:46 queued 08:08
created

TableSchemaSubscriber::getSubscribedEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Cdf\BiCoreBundle\Subscriber;
4
5
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
6
use Doctrine\ORM\Id\SequenceGenerator;
7
8
class TableSchemaSubscriber implements \Doctrine\Common\EventSubscriber
9
{
10
    private $schemaprefix;
11
12 42
    public function __construct($schemaprefix)
13
    {
14 42
        $this->schemaprefix = $schemaprefix;
15 42
    }
16
17 42
    public function getSubscribedEvents()
18
    {
19 42
        return array('loadClassMetadata');
20
    }
21
22 40
    public function loadClassMetadata(LoadClassMetadataEventArgs $args)
23
    {
24 40
        $classMetadata = $args->getClassMetadata();
25 40
        if (!$this->schemaprefix || ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity())) {
26 40
            return;
27
        }
28
        $classMetadata->setPrimaryTable(array('name' => $this->schemaprefix.'.'.$classMetadata->getTableName()));
29
        foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
30
            if (\Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY == $mapping['type'] &&
31
                    isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])
32
            ) {
33
                $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
34
                $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->schemaprefix.'.'.$mappedTableName;
35
            }
36
        }
37
38
        if ($classMetadata->isIdGeneratorSequence()) {
39
            $newDefinition = $classMetadata->sequenceGeneratorDefinition;
40
            $newDefinition['sequenceName'] = $this->schemaprefix.'.'.$newDefinition['sequenceName'];
41
42
            $classMetadata->setSequenceGeneratorDefinition($newDefinition);
43
            $em = $args->getEntityManager();
44
            if (isset($classMetadata->idGenerator)) {
45
                $sequenceGenerator = new SequenceGenerator(
46
                    $em->getConfiguration()->getQuoteStrategy()->getSequenceName(
47
                        $newDefinition,
48
                        $classMetadata,
49
                        $em->getConnection()->getDatabasePlatform()
50
                    ),
51
                    $newDefinition['allocationSize']
52
                );
53
                $classMetadata->setIdGenerator($sequenceGenerator);
54
            }
55
        }
56
    }
57
}
58