Completed
Pull Request — develop (#552)
by
unknown
17:40 queued 12:12
created

DocumentVersionListener   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 1
cbo 3
dl 0
loc 64
rs 10
ccs 0
cts 35
cp 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A modelUpdate() 0 8 1
A modelInsert() 0 8 1
A updateCounter() 0 15 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(
41
            $event->getCollectionClass(),
42
            $event->getCollectionId(),
43
            'update'
44
        );
45
    }
46
    /**
47
     * Insert a Model
48
     * @param ModelEvent $event Mongo.odm event argument
49
     * @return void
50
     */
51
    public function modelInsert(ModelEvent $event)
52
    {
53
        $this->updateCounter(
54
            $event->getCollectionClass(),
55
            $event->getCollectionId(),
56
            'insert'
57
        );
58
    }
59
60
    /**
61
     * Update Counter for all new saved items
62
     *
63
     * @param string $collection Qualified Object class
64
     * @param string $id         Id to be updated
65
     * @param string $action     What is to be done
66
     */
67
    private function updateCounter($collection, $id, $action)
68
    {
69
        $qb = $this->documentManager->createQueryBuilder($collection);
70
        if ('update'==$action) {
71
            $qb->findAndUpdate()
72
                ->field('id')->equals($id)
73
                ->field('version')->inc(1)
74
                ->getQuery()->execute();
75
        } else {
76
            $qb->findAndUpdate()
77
                ->field('id')->equals($id)
78
                ->field('version')->set(1)
79
                ->getQuery()->execute();
80
        }
81
    }
82
}
83