Test Failed
Push — develop ( d382d0...28e0cd )
by Daniel
10:59
created

ComponentSubscriber::deleteSubComponents()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 3
nop 2
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Silverback\ApiComponentBundle\EventSubscriber\EntitySubscriber;
6
7
use Doctrine\ORM\EntityManagerInterface;
8
use Doctrine\ORM\Event\LifecycleEventArgs;
9
use Doctrine\ORM\Events;
10
use Silverback\ApiComponentBundle\Entity\Component\AbstractComponent;
11
12
class ComponentSubscriber implements EntitySubscriberInterface
13
{
14
    public function supportsEntity($entity = null): bool
15
    {
16
        return $entity instanceof AbstractComponent;
17
    }
18
19
    public function getSubscribedEvents(): array
20
    {
21
        return [
22
            Events::preRemove
23
        ];
24
    }
25
26
    /**
27
     * @param LifecycleEventArgs $eventArgs
28
     * @param AbstractComponent $component
29
     */
30
    public function preRemove(LifecycleEventArgs $eventArgs, AbstractComponent $component): void
31
    {
32
        $entityManager = $eventArgs->getEntityManager();
33
        if ($component->onDeleteCascade()) {
34
            $this->deleteSubComponents($component, $entityManager);
35
        }
36
    }
37
    /**
38
     * @param AbstractComponent $component
39
     * @param EntityManagerInterface $entityManager
40
     */
41
    private function deleteSubComponents(AbstractComponent $component, EntityManagerInterface $entityManager): void
42
    {
43
        foreach ($component->getComponentGroups() as $componentGroup) {
44
            $entityManager->remove($componentGroup);
45
            foreach ($componentGroup->getComponentLocations() as $componentLocation) {
46
                $component = $componentLocation->getComponent();
47
                $entityManager->remove($componentLocation);
48
                $entityManager->remove($component);
49
                $this->deleteSubComponents($component, $entityManager);
50
            }
51
        }
52
    }
53
}
54