Completed
Pull Request — develop (#552)
by
unknown
14:01 queued 09:14
created

DocumentVersionListener::modelUpdate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
ccs 0
cts 4
cp 0
cc 1
eloc 2
nc 1
nop 1
crap 2
1
<?php
2
/**
3
 * Custom Model Document Version listener
4
 */
5
6
namespace Graviton\DocumentBundle\Listener;
7
8
use Graviton\RestBundle\Event\ModelEvent;
9
use Doctrine\ODM\MongoDB\DocumentManager;
10
11
/**
12
 * Class DocumentVersionListener
13
 * @package Graviton\DocumentBundle\Listener
14
 *
15
 * @author   List of contributors <https://github.com/libgraviton/graviton/graphs/contributors>
16
 * @license  http://opensource.org/licenses/gpl-license.php GNU Public License
17
 * @link     http://swisscom.ch
18
 */
19
class DocumentVersionListener
20
{
21
    /** @var DocumentManager Document manager */
22
    private $documentManager;
23
24
    /**
25
     * constructor.
26
     * @param DocumentManager $documentManager Db Connection document manager
27
     */
28
    public function __construct(DocumentManager $documentManager)
29
    {
30
        $this->documentManager = $documentManager;
31
    }
32
33
    /**
34
     * Updating a Model
35
     * @param ModelEvent $event Mongo.odm event argument
36
     * @return void
37
     */
38
    public function modelUpdate(ModelEvent $event)
39
    {
40
        $this->updateCounter($event, 'update');
41
    }
42
    /**
43
     * Insert a Model
44
     * @param ModelEvent $event Mongo.odm event argument
45
     * @return void
46
     */
47
    public function modelInsert(ModelEvent $event)
48
    {
49
        $this->updateCounter($event, 'insert');
50
    }
51
52
    /**
53
     * Update Counter for all new saved items
54
     *
55
     * @param ModelEvent $event  Object event
56
     * @param string     $action What is to be done
57
     * @return void
58
     */
59
    private function updateCounter(ModelEvent $event, $action)
60
    {
61
        if (!property_exists($event->getCollection(), 'version')) {
62
            return;
63
        }
64
65
        $qb = $this->documentManager->createQueryBuilder($event->getCollectionClass());
66
        if ('update' == $action) {
67
            $qb->findAndUpdate()
68
                ->field('id')->equals($event->getCollectionId())
69
                ->field('version')->inc(1)
70
                ->getQuery()->execute();
71
        } else {
72
            $qb->findAndUpdate()
73
                ->field('id')->equals($event->getCollectionId())
74
                ->field('version')->set(1)
75
                ->getQuery()->execute();
76
        }
77
    }
78
}
79