Passed
Push — develop ( 2b0133...275e57 )
by Mario
02:37
created

AccessListener::postPersist()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace AppBundle\EventListener\Entity\Role;
4
5
use AppBundle\Entity\Role;
6
use Doctrine\ORM\Event\PreFlushEventArgs;
7
use Ds\Component\Container\EventListener\ContainerListener;
8
9
/**
10
 * Class AccessListener
11
 */
12
class AccessListener extends ContainerListener
13
{
14
    /**
15
     * Create access across all microservices when a role is created
16
     *
17
     * @param \AppBundle\Entity\Role $role
18
     */
19
    public function postPersist(Role $role)
20
    {
21
        $service = $this->container->get('app.service.role');
22
        $service->createAccess($role);
23
    }
24
25
    /**
26
     * Update access across all microservices when a role is updated
27
     *
28
     * @param \AppBundle\Entity\Role $role
29
     */
30
    public function postUpdate(Role $role)
31
    {
32
        $service = $this->container->get('app.service.role');
33
        $service->deleteAccess($role);
34
        $service->createAccess($role);
35
    }
36
37
    /**
38
     * Remove access across all microservices when a role is removed
39
     *
40
     * The preFlush event is used instead of postRemove as a workaround soft-deletable
41
     *
42
     * @param \Doctrine\ORM\Event\PreFlushEventArgs $event
43
     */
44
    public function preFlush(PreFlushEventArgs $event)
45
    {
46
        foreach ($event->getEntityManager()->getUnitOfWork()->getScheduledEntityDeletions() as $entity) {
47
            if (!$entity instanceof Role) {
48
                continue;
49
            }
50
51
            $service = $this->container->get('app.service.role');
52
            $service->deleteAccess($entity);
53
        }
54
    }
55
}
56