Completed
Push — master ( 8a247e...4109b7 )
by Matthew
05:12
created

CommonTrait::removeOlderThan()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 0
cts 7
cp 0
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 3
crap 2
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 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