Completed
Push — master ( f30a66...783f1c )
by Matthew
08:20 queued 39s
created

CommonTrait   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 100%

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A removeOlderThan() 0 13 1
A stopIdGenerator() 0 12 1
A restoreIdGenerator() 0 11 1
getObjectManager() 0 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 1
    protected function removeOlderThan($objectName, $field, \DateTime $olderThan)
22
    {
23
        /** @var EntityManager $objectManager */
24 1
        $objectManager = $this->getObjectManager();
25 1
        $qb = $objectManager->createQueryBuilder()->delete($objectName, 'j');
26
        $qb = $qb
27 1
            ->where('j.'.$field.' < :'.$field)
28 1
            ->setParameter(':'.$field, $olderThan);
29
30 1
        $query = $qb->getQuery();
31
32 1
        return $query->execute();
33
    }
34
35 1
    public function stopIdGenerator($objectName)
36
    {
37
        /** @var EntityManager $objectManager */
38 1
        $objectManager = $this->getObjectManager();
39 1
        $repository = $objectManager->getRepository($objectName);
40
        /** @var ClassMetadata $metadata */
41 1
        $metadata = $objectManager->getClassMetadata($repository->getClassName());
42 1
        $this->formerIdGenerators[$objectName]['generator'] = $metadata->idGenerator;
43 1
        $this->formerIdGenerators[$objectName]['type'] = $metadata->generatorType;
44 1
        $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
45 1
        $metadata->setIdGenerator(new AssignedGenerator());
46 1
    }
47
48 1
    public function restoreIdGenerator($objectName)
49
    {
50 1
        $objectManager = $this->getObjectManager();
51 1
        $repository = $objectManager->getRepository($objectName);
52
        /** @var ClassMetadata $metadata */
53 1
        $metadata = $objectManager->getClassMetadata($repository->getClassName());
54 1
        $generator = $this->formerIdGenerators[$objectName]['generator'];
55 1
        $type = $this->formerIdGenerators[$objectName]['type'];
56 1
        $metadata->setIdGeneratorType($type);
57 1
        $metadata->setIdGenerator($generator);
58 1
    }
59
60
    /**
61
     * @return ObjectManager
62
     */
63
    abstract public function getObjectManager();
64
}
65