Completed
Branch master (38bcb9)
by Matthew
02:36
created

CommonTrait   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 8
dl 0
loc 55
ccs 0
cts 25
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
getObjectManager() 0 1 ?
A removeOlderThan() 0 13 1
A stopIdGenerator() 0 12 1
A restoreIdGenerator() 0 11 1
1
<?php
2
3
namespace Dtc\QueueBundle\ORM;
4
5
use Doctrine\Common\Persistence\ObjectManager;
6
use Doctrine\ORM\EntityManager;
7
use Doctrine\ORM\Id\AssignedGenerator;
8
use Doctrine\ORM\Mapping\ClassMetadata;
9
10
trait CommonTrait
11
{
12
    protected $formerIdGenerators;
13
14
    /**
15
     * @param string    $objectName
16
     * @param string    $field
17
     * @param \DateTime $olderThan
18
     *
19
     * @return int
20
     */
21
    protected function removeOlderThan($objectName, $field, \DateTime $olderThan)
22
    {
23
        /** @var EntityManager $objectManager */
24
        $objectManager = $this->getObjectManager();
25
        $qb = $objectManager->createQueryBuilder()->delete($objectName, 'j');
26
        $qb = $qb
27
            ->where('j.'.$field.' < :'.$field)
28
            ->setParameter(':'.$field, $olderThan);
29
30
        $query = $qb->getQuery();
31
32
        return $query->execute();
33
    }
34
35
    public function stopIdGenerator($objectName)
36
    {
37
        /** @var EntityManager $objectManager */
38
        $objectManager = $this->getObjectManager();
39
        $repository = $objectManager->getRepository($objectName);
40
        /** @var ClassMetadata $metadata */
41
        $metadata = $objectManager->getClassMetadata($repository->getClassName());
42
        $this->formerIdGenerators[$objectName]['generator'] = $metadata->idGenerator;
43
        $this->formerIdGenerators[$objectName]['type'] = $metadata->generatorType;
44
        $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
45
        $metadata->setIdGenerator(new AssignedGenerator());
46
    }
47
48
    public function restoreIdGenerator($objectName)
49
    {
50
        $objectManager = $this->getObjectManager();
51
        $repository = $objectManager->getRepository($objectName);
52
        /** @var ClassMetadata $metadata */
53
        $metadata = $objectManager->getClassMetadata($repository->getClassName());
54
        $generator = $this->formerIdGenerators[$objectName]['generator'];
55
        $type = $this->formerIdGenerators[$objectName]['type'];
56
        $metadata->setIdGeneratorType($type);
57
        $metadata->setIdGenerator($generator);
58
    }
59
60
    /**
61
     * @return ObjectManager
62
     */
63
    abstract public function getObjectManager();
64
}
65